From e670a558b74eb7058f1a5759957e54a0ac6a082c Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Mon, 20 Jan 2020 11:11:02 +0100
Subject: [PATCH] gestion du push en git

---
 inc/salvatore_git.php      | 38 +++++++++++++++++++++++++++++++++++++-
 inc/salvatore_pousseur.php | 12 ++++++++++--
 2 files changed, 47 insertions(+), 3 deletions(-)

diff --git a/inc/salvatore_git.php b/inc/salvatore_git.php
index 87248f1..9ca5b8b 100644
--- a/inc/salvatore_git.php
+++ b/inc/salvatore_git.php
@@ -86,6 +86,7 @@ function salvatore_git_status_file($dir_repo, $file_or_files) {
 
 /**
  * Commit une liste de fichiers avec un message et auteur fourni
+ * on utilise pas $user et $pass en git pour commit
  * @param string $dir_repo
  * @param array $files
  * @param string $message
@@ -105,7 +106,7 @@ function salvatore_git_commit_files($dir_repo, $files, $message, $author, $user=
 	// on ajoute tous les fichiers pour commit
 	$commands = [
 		"git add $files 2>&1",
-		"git commit -m " . escapeshellarg($message)." --author=".escapeshellarg(salvatore_git_format_author($author)),
+		"git commit -m " . escapeshellarg($message)." --author=".escapeshellarg(salvatore_git_format_author($author)) . " 2>&1",
 	];
 
 	foreach ($commands as $command) {
@@ -121,3 +122,38 @@ function salvatore_git_commit_files($dir_repo, $files, $message, $author, $user=
 
 	return array($res, implode("\n", $output));
 }
+
+/**
+ * on utilise pas $user et $pass en git pour push car ils sont dans le remote si c'est un https
+ * et si c'est ssh il faut une cle pour le user www-data
+ *
+ * @param string $dir_repo
+ * @param null $user
+ * @param null $pass
+ * @return array
+ */
+function salvatore_git_push_repository($dir_repo, $user=null, $pass=null) {
+	$d = getcwd();
+	chdir($dir_repo);
+	$output = array();
+	$res = true;
+	// on ajoute tous les fichiers pour commit
+	$commands = [
+		"git pull --rebase 2>&1",
+		// TODO : activer le push quand on sera en prod
+		//"git push 2>&1",
+	];
+
+	foreach ($commands as $command) {
+		$output[] = "> $command";
+		$return_var = 0;
+		exec($command, $output, $return_var);
+		// si une erreur a eu lieu le signaler dans le retour
+		if ($return_var) {
+			$res = false;
+		}
+	}
+	chdir($d);
+
+	return array($res, implode("\n", $output));
+}
\ No newline at end of file
diff --git a/inc/salvatore_pousseur.php b/inc/salvatore_pousseur.php
index 1d88beb..8cc639d 100644
--- a/inc/salvatore_pousseur.php
+++ b/inc/salvatore_pousseur.php
@@ -167,9 +167,17 @@ function salvatore_pousser($liste_sources, $dir_modules=null, $dir_depots=null)
 					}
 				}
 
-				// TODO : push
-				// ne fera rien en svn (deja pushe)
+				// tous les commits sont faits
+				// on peut supprimer le fichier qui liste les commits
+				@unlink($file_commit);
 
+				// et push si besoin
+				// ne fera rien en svn (deja pushe)
+				list($res,$out) = $salvatore_push_repository($dir_depots . $source['dir_checkout'], empty($source['user']) ? null : $source['user'], empty($source['pass']) ? null : $source['pass']);
+				salvatore_log($out);
+				if (!$res) {
+					salvatore_fail("[Pousseur] Erreur sur $module", "Erreur lors du commit :\n$out");
+				}
 			}
 		}
 
-- 
GitLab