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
This commit is contained in:
commit
bc1f262d67
@ -199,6 +199,7 @@ only=
|
|||||||
logfile=
|
logfile=
|
||||||
use_commit=
|
use_commit=
|
||||||
amend=
|
amend=
|
||||||
|
edit_flag=
|
||||||
no_edit=
|
no_edit=
|
||||||
log_given=
|
log_given=
|
||||||
log_message=
|
log_message=
|
||||||
@ -246,7 +247,7 @@ do
|
|||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
-e|--e|--ed|--edi|--edit)
|
-e|--e|--ed|--edi|--edit)
|
||||||
no_edit=
|
edit_flag=t
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
-i|--i|--in|--inc|--incl|--inclu|--includ|--include)
|
-i|--i|--in|--inc|--incl|--inclu|--includ|--include)
|
||||||
@ -384,6 +385,7 @@ $1"
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
case "$edit_flag" in t) no_edit= ;; esac
|
||||||
|
|
||||||
################################################################
|
################################################################
|
||||||
# Sanity check options
|
# 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 void die(const char *err, ...) NORETURN __attribute__((format (printf, 1, 2)));
|
||||||
extern int error(const char *err, ...) __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
|
#ifdef NO_MMAP
|
||||||
|
|
||||||
#ifndef PROT_READ
|
#ifndef PROT_READ
|
||||||
|
@ -55,7 +55,7 @@ finish () {
|
|||||||
|
|
||||||
case "$no_summary" in
|
case "$no_summary" in
|
||||||
'')
|
'')
|
||||||
git-diff-tree -p --stat --summary -M "$head" "$1"
|
git-diff-tree --stat --summary -M "$head" "$1"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
@ -42,6 +42,8 @@ static void generate_id_list(void)
|
|||||||
|
|
||||||
if (!memcmp(line, "diff-tree ", 10))
|
if (!memcmp(line, "diff-tree ", 10))
|
||||||
p += 10;
|
p += 10;
|
||||||
|
else if (!memcmp(line, "commit ", 7))
|
||||||
|
p += 7;
|
||||||
|
|
||||||
if (!get_sha1_hex(p, n)) {
|
if (!get_sha1_hex(p, n)) {
|
||||||
flush_current_id(patchlen, sha1, &ctx);
|
flush_current_id(patchlen, sha1, &ctx);
|
||||||
|
46
usage.c
46
usage.c
@ -12,20 +12,58 @@ static void report(const char *prefix, const char *err, va_list params)
|
|||||||
fputs("\n", stderr);
|
fputs("\n", stderr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void usage(const char *err)
|
static NORETURN void usage_builtin(const char *err)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "usage: %s\n", err);
|
fprintf(stderr, "usage: %s\n", err);
|
||||||
exit(129);
|
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, ...)
|
void die(const char *err, ...)
|
||||||
{
|
{
|
||||||
va_list params;
|
va_list params;
|
||||||
|
|
||||||
va_start(params, err);
|
va_start(params, err);
|
||||||
report("fatal: ", err, params);
|
die_routine(err, params);
|
||||||
va_end(params);
|
va_end(params);
|
||||||
exit(128);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int error(const char *err, ...)
|
int error(const char *err, ...)
|
||||||
@ -33,7 +71,7 @@ int error(const char *err, ...)
|
|||||||
va_list params;
|
va_list params;
|
||||||
|
|
||||||
va_start(params, err);
|
va_start(params, err);
|
||||||
report("error: ", err, params);
|
error_routine(err, params);
|
||||||
va_end(params);
|
va_end(params);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user