[PATCH] git-merge-cache -q doesn't complain about failing merge program
authorPetr Baudis <pasky@suse.cz>
Fri, 29 Jul 2005 12:53:38 +0000 (14:53 +0200)
committerJunio C Hamano <junkio@cox.net>
Mon, 1 Aug 2005 22:20:14 +0000 (15:20 -0700)
git-merge-cache reporting failed merge program is undesirable for
Cogito, since it emits its own more appropriate error message in that
case. However, I want to show other possible git-merge-cache error
messages. So -q will just silence this particular error.

Signed-off-by: Petr Baudis <pasky@ucw.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Documentation/git-merge-cache.txt
merge-cache.c

index 3fb4d49..f1fbb5d 100644 (file)
@@ -9,7 +9,7 @@ git-merge-cache - Runs a merge for files needing merging
 
 SYNOPSIS
 --------
 
 SYNOPSIS
 --------
-'git-merge-cache' [-o] <merge-program> (-a | -- | <file>\*) 
+'git-merge-cache' [-o] [-q] <merge-program> (-a | -- | <file>\*) 
 
 DESCRIPTION
 -----------
 
 DESCRIPTION
 -----------
@@ -32,6 +32,11 @@ OPTIONS
        returned errors, and only return the error code after all the
        merges are over.
 
        returned errors, and only return the error code after all the
        merges are over.
 
+-q::
+       Do not complain about failed merge program (the merge program
+       failure usually indicates conflicts during merge). This is for
+       porcelains which might want to emit custom messages.
+
 If "git-merge-cache" is called with multiple <file>s (or -a) then it
 processes them in turn only stopping if merge returns a non-zero exit
 code.
 If "git-merge-cache" is called with multiple <file>s (or -a) then it
 processes them in turn only stopping if merge returns a non-zero exit
 code.
@@ -40,7 +45,7 @@ Typically this is run with the a script calling the merge command from
 the RCS package.
 
 A sample script called "git-merge-one-file-script" is included in the
 the RCS package.
 
 A sample script called "git-merge-one-file-script" is included in the
-ditribution.
+distribution.
 
 ALERT ALERT ALERT! The git "merge object order" is different from the
 RCS "merge" program merge object order. In the above ordering, the
 
 ALERT ALERT ALERT! The git "merge object order" is different from the
 RCS "merge" program merge object order. In the above ordering, the
index 37c72d2..b2893e6 100644 (file)
@@ -5,7 +5,7 @@
 
 static const char *pgm = NULL;
 static const char *arguments[8];
 
 static const char *pgm = NULL;
 static const char *arguments[8];
-static int one_shot;
+static int one_shot, quiet;
 static int err;
 
 static void run_program(void)
 static int err;
 
 static void run_program(void)
@@ -27,10 +27,13 @@ static void run_program(void)
                die("unable to execute '%s'", pgm);
        }
        if (waitpid(pid, &status, 0) < 0 || !WIFEXITED(status) || WEXITSTATUS(status)) {
                die("unable to execute '%s'", pgm);
        }
        if (waitpid(pid, &status, 0) < 0 || !WIFEXITED(status) || WEXITSTATUS(status)) {
-               if (one_shot)
+               if (one_shot) {
                        err++;
                        err++;
-               else
-                       die("merge program failed");
+               } else {
+                       if (quiet)
+                               die("merge program failed");
+                       exit(1);
+               }
        }
 }
 
        }
 }
 
@@ -97,15 +100,19 @@ int main(int argc, char **argv)
        int i, force_file = 0;
 
        if (argc < 3)
        int i, force_file = 0;
 
        if (argc < 3)
-               usage("git-merge-cache [-o] <merge-program> (-a | <filename>*)");
+               usage("git-merge-cache [-o] [-q] <merge-program> (-a | <filename>*)");
 
        read_cache();
 
        i = 1;
 
        read_cache();
 
        i = 1;
-       if (!strcmp(argv[1], "-o")) {
+       if (!strcmp(argv[i], "-o")) {
                one_shot = 1;
                i++;
        }
                one_shot = 1;
                i++;
        }
+       if (!strcmp(argv[i], "-q")) {
+               quiet = 1;
+               i++;
+       }
        pgm = argv[i++];
        for (; i < argc; i++) {
                char *arg = argv[i];
        pgm = argv[i++];
        for (; i < argc; i++) {
                char *arg = argv[i];
@@ -122,7 +129,7 @@ int main(int argc, char **argv)
                }
                merge_file(arg);
        }
                }
                merge_file(arg);
        }
-       if (err)
+       if (err && quiet)
                die("merge program failed");
                die("merge program failed");
-       return 0;
+       return err;
 }
 }