Skip to content

Commit

Permalink
Merge branch 'pb/error'
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
Junio C Hamano committed Jun 24, 2006
2 parents 1f33026 + ce88ac5 commit bc1f262
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 6 deletions.
4 changes: 3 additions & 1 deletion git-commit.sh
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,7 @@ only=
logfile=
use_commit=
amend=
edit_flag=
no_edit=
log_given=
log_message=
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -384,6 +385,7 @@ $1"
;;
esac
done
case "$edit_flag" in t) no_edit= ;; esac

################################################################
# Sanity check options
Expand Down
4 changes: 4 additions & 0 deletions git-compat-util.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion git-merge.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
2 changes: 2 additions & 0 deletions patch-id.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
46 changes: 42 additions & 4 deletions usage.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,28 +12,66 @@ 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, ...)
{
va_list params;

va_start(params, err);
report("error: ", err, params);
error_routine(err, params);
va_end(params);
return -1;
}

0 comments on commit bc1f262

Please sign in to comment.