提交 bc1f262d 编写于 作者: J Junio C Hamano

Merge branch 'pb/error'

* 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
......@@ -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
......
......@@ -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
......
......@@ -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
}
......
......@@ -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);
......
......@@ -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;
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册