Skip to content

Commit bc1f262

Browse files
author
Junio C Hamano
committed
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
2 parents 1f33026 + ce88ac5 commit bc1f262

File tree

5 files changed

+52
-6
lines changed

5 files changed

+52
-6
lines changed

git-commit.sh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ only=
199199
logfile=
200200
use_commit=
201201
amend=
202+
edit_flag=
202203
no_edit=
203204
log_given=
204205
log_message=
@@ -246,7 +247,7 @@ do
246247
shift
247248
;;
248249
-e|--e|--ed|--edi|--edit)
249-
no_edit=
250+
edit_flag=t
250251
shift
251252
;;
252253
-i|--i|--in|--inc|--incl|--inclu|--includ|--include)
@@ -384,6 +385,7 @@ $1"
384385
;;
385386
esac
386387
done
388+
case "$edit_flag" in t) no_edit= ;; esac
387389

388390
################################################################
389391
# Sanity check options

git-compat-util.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ extern void usage(const char *err) NORETURN;
4040
extern void die(const char *err, ...) NORETURN __attribute__((format (printf, 1, 2)));
4141
extern int error(const char *err, ...) __attribute__((format (printf, 1, 2)));
4242

43+
extern void set_usage_routine(void (*routine)(const char *err) NORETURN);
44+
extern void set_die_routine(void (*routine)(const char *err, va_list params) NORETURN);
45+
extern void set_error_routine(void (*routine)(const char *err, va_list params));
46+
4347
#ifdef NO_MMAP
4448

4549
#ifndef PROT_READ

git-merge.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ finish () {
5555

5656
case "$no_summary" in
5757
'')
58-
git-diff-tree -p --stat --summary -M "$head" "$1"
58+
git-diff-tree --stat --summary -M "$head" "$1"
5959
;;
6060
esac
6161
}

patch-id.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ static void generate_id_list(void)
4242

4343
if (!memcmp(line, "diff-tree ", 10))
4444
p += 10;
45+
else if (!memcmp(line, "commit ", 7))
46+
p += 7;
4547

4648
if (!get_sha1_hex(p, n)) {
4749
flush_current_id(patchlen, sha1, &ctx);

usage.c

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,28 +12,66 @@ static void report(const char *prefix, const char *err, va_list params)
1212
fputs("\n", stderr);
1313
}
1414

15-
void usage(const char *err)
15+
static NORETURN void usage_builtin(const char *err)
1616
{
1717
fprintf(stderr, "usage: %s\n", err);
1818
exit(129);
1919
}
2020

21+
static NORETURN void die_builtin(const char *err, va_list params)
22+
{
23+
report("fatal: ", err, params);
24+
exit(128);
25+
}
26+
27+
static void error_builtin(const char *err, va_list params)
28+
{
29+
report("error: ", err, params);
30+
}
31+
32+
33+
/* If we are in a dlopen()ed .so write to a global variable would segfault
34+
* (ugh), so keep things static. */
35+
static void (*usage_routine)(const char *err) NORETURN = usage_builtin;
36+
static void (*die_routine)(const char *err, va_list params) NORETURN = die_builtin;
37+
static void (*error_routine)(const char *err, va_list params) = error_builtin;
38+
39+
void set_usage_routine(void (*routine)(const char *err) NORETURN)
40+
{
41+
usage_routine = routine;
42+
}
43+
44+
void set_die_routine(void (*routine)(const char *err, va_list params) NORETURN)
45+
{
46+
die_routine = routine;
47+
}
48+
49+
void set_error_routine(void (*routine)(const char *err, va_list params))
50+
{
51+
error_routine = routine;
52+
}
53+
54+
55+
void usage(const char *err)
56+
{
57+
usage_routine(err);
58+
}
59+
2160
void die(const char *err, ...)
2261
{
2362
va_list params;
2463

2564
va_start(params, err);
26-
report("fatal: ", err, params);
65+
die_routine(err, params);
2766
va_end(params);
28-
exit(128);
2967
}
3068

3169
int error(const char *err, ...)
3270
{
3371
va_list params;
3472

3573
va_start(params, err);
36-
report("error: ", err, params);
74+
error_routine(err, params);
3775
va_end(params);
3876
return -1;
3977
}

0 commit comments

Comments
 (0)