Merge branch 'pb/error'
authorJunio C Hamano <junkio@cox.net>
Sat, 24 Jun 2006 08:06:51 +0000 (01:06 -0700)
committerJunio C Hamano <junkio@cox.net>
Sat, 24 Jun 2006 08:06:51 +0000 (01:06 -0700)
* pb/error:
usage: minimum type fix.
Customizable error handlers
git-merge: Don't use -p when outputting summary
git-commit: allow -e option anywhere on command line
patch-id: take "commit" prefix as well as "diff-tree" prefix

git-commit.sh
git-compat-util.h
git-merge.sh
patch-id.c
usage.c
index 6dd04fd3675fd2559f983581a9d5f7eddee31e55..e74fe640b8acb87bef2cc118e87d8779c79f8786 100755 (executable)
@@ -199,6 +199,7 @@ only=
 logfile=
 use_commit=
 amend=
+edit_flag=
 no_edit=
 log_given=
 log_message=
@@ -246,7 +247,7 @@ do
       shift
       ;;
   -e|--e|--ed|--edi|--edit)
-      no_edit=
+      edit_flag=t
       shift
       ;;
   -i|--i|--in|--inc|--incl|--inclu|--includ|--include)
@@ -384,6 +385,7 @@ $1"
       ;;
   esac
 done
+case "$edit_flag" in t) no_edit= ;; esac
 
 ################################################################
 # Sanity check options
index 5d543d29f85e432a89bb8cbfbe2d18205599b06f..b3d4cf532e5728e6b962d0d65789f6e8e4bd7fe5 100644 (file)
@@ -40,6 +40,10 @@ extern void usage(const char *err) NORETURN;
 extern void die(const char *err, ...) NORETURN __attribute__((format (printf, 1, 2)));
 extern int error(const char *err, ...) __attribute__((format (printf, 1, 2)));
 
+extern void set_usage_routine(void (*routine)(const char *err) NORETURN);
+extern void set_die_routine(void (*routine)(const char *err, va_list params) NORETURN);
+extern void set_error_routine(void (*routine)(const char *err, va_list params));
+
 #ifdef NO_MMAP
 
 #ifndef PROT_READ
index af1f25b3c51d197ea5fd24b7623dfb591f867133..da5657eb40516430d0302eea2e15bac6fa699b55 100755 (executable)
@@ -55,7 +55,7 @@ finish () {
 
        case "$no_summary" in
        '')
-               git-diff-tree -p --stat --summary -M "$head" "$1"
+               git-diff-tree --stat --summary -M "$head" "$1"
                ;;
        esac
 }
index edbc4aa3e82974168f2d4c21085bdd43b774d55e..3b4c80f764bd11a740a7cce60f2e8c062706e897 100644 (file)
@@ -42,6 +42,8 @@ static void generate_id_list(void)
 
                if (!memcmp(line, "diff-tree ", 10))
                        p += 10;
+               else if (!memcmp(line, "commit ", 7))
+                       p += 7;
 
                if (!get_sha1_hex(p, n)) {
                        flush_current_id(patchlen, sha1, &ctx);
diff --git a/usage.c b/usage.c
index 1fa924c3d9ed8f70523685c26cf169316b366598..52c2e960560531b62a28a8a716e531093fd5e8a7 100644 (file)
--- a/usage.c
+++ b/usage.c
@@ -12,20 +12,58 @@ static void report(const char *prefix, const char *err, va_list params)
        fputs("\n", stderr);
 }
 
-void usage(const char *err)
+static NORETURN void usage_builtin(const char *err)
 {
        fprintf(stderr, "usage: %s\n", err);
        exit(129);
 }
 
+static NORETURN void die_builtin(const char *err, va_list params)
+{
+       report("fatal: ", err, params);
+       exit(128);
+}
+
+static void error_builtin(const char *err, va_list params)
+{
+       report("error: ", err, params);
+}
+
+
+/* If we are in a dlopen()ed .so write to a global variable would segfault
+ * (ugh), so keep things static. */
+static void (*usage_routine)(const char *err) NORETURN = usage_builtin;
+static void (*die_routine)(const char *err, va_list params) NORETURN = die_builtin;
+static void (*error_routine)(const char *err, va_list params) = error_builtin;
+
+void set_usage_routine(void (*routine)(const char *err) NORETURN)
+{
+       usage_routine = routine;
+}
+
+void set_die_routine(void (*routine)(const char *err, va_list params) NORETURN)
+{
+       die_routine = routine;
+}
+
+void set_error_routine(void (*routine)(const char *err, va_list params))
+{
+       error_routine = routine;
+}
+
+
+void usage(const char *err)
+{
+       usage_routine(err);
+}
+
 void die(const char *err, ...)
 {
        va_list params;
 
        va_start(params, err);
-       report("fatal: ", err, params);
+       die_routine(err, params);
        va_end(params);
-       exit(128);
 }
 
 int error(const char *err, ...)
@@ -33,7 +71,7 @@ int error(const char *err, ...)
        va_list params;
 
        va_start(params, err);
-       report("error: ", err, params);
+       error_routine(err, params);
        va_end(params);
        return -1;
 }