@@ -40,6 +40,7 @@ int cmd_range_diff(int argc, const char **argv, const char *prefix)
40
40
struct option * options ;
41
41
int res = 0 ;
42
42
struct strbuf range1 = STRBUF_INIT , range2 = STRBUF_INIT ;
43
+ struct object_id oid ;
43
44
44
45
git_config (git_diff_ui_config , NULL );
45
46
@@ -56,24 +57,41 @@ int cmd_range_diff(int argc, const char **argv, const char *prefix)
56
57
diffopt .use_color = 1 ;
57
58
58
59
if (argc == 3 ) {
60
+ if (get_oid_committish (argv [0 ], & oid ))
61
+ usage_msg_optf (_ ("not a revision: '%s'" ),
62
+ builtin_range_diff_usage , options ,
63
+ argv [0 ]);
64
+ else if (get_oid_committish (argv [1 ], & oid ))
65
+ usage_msg_optf (_ ("not a revision: '%s'" ),
66
+ builtin_range_diff_usage , options ,
67
+ argv [1 ]);
68
+ else if (get_oid_committish (argv [2 ], & oid ))
69
+ usage_msg_optf (_ ("not a revision: '%s'" ),
70
+ builtin_range_diff_usage , options ,
71
+ argv [2 ]);
72
+
59
73
strbuf_addf (& range1 , "%s..%s" , argv [0 ], argv [1 ]);
60
74
strbuf_addf (& range2 , "%s..%s" , argv [0 ], argv [2 ]);
61
75
} else if (argc == 2 ) {
62
76
if (!is_range_diff_range (argv [0 ]))
63
- die (_ ("not a commit range: '%s'" ), argv [0 ]);
64
- strbuf_addstr (& range1 , argv [0 ]);
77
+ usage_msg_optf (_ ("not a commit range: '%s'" ),
78
+ builtin_range_diff_usage , options ,
79
+ argv [0 ]);
80
+ else if (!is_range_diff_range (argv [1 ]))
81
+ usage_msg_optf (_ ("not a commit range: '%s'" ),
82
+ builtin_range_diff_usage , options ,
83
+ argv [1 ]);
65
84
66
- if (!is_range_diff_range (argv [1 ]))
67
- die (_ ("not a commit range: '%s'" ), argv [1 ]);
85
+ strbuf_addstr (& range1 , argv [0 ]);
68
86
strbuf_addstr (& range2 , argv [1 ]);
69
87
} else if (argc == 1 ) {
70
88
const char * b = strstr (argv [0 ], "..." ), * a = argv [0 ];
71
89
int a_len ;
72
90
73
- if (!b ) {
74
- error (_ ("single arg format must be symmetric range" ));
75
- usage_with_options ( builtin_range_diff_usage , options );
76
- }
91
+ if (!b )
92
+ usage_msg_optf (_ ("not a symmetric range: '%s'" ),
93
+ builtin_range_diff_usage , options ,
94
+ argv [ 0 ]);
77
95
78
96
a_len = (int )(b - a );
79
97
if (!a_len ) {
@@ -85,10 +103,9 @@ int cmd_range_diff(int argc, const char **argv, const char *prefix)
85
103
b = "HEAD" ;
86
104
strbuf_addf (& range1 , "%s..%.*s" , b , a_len , a );
87
105
strbuf_addf (& range2 , "%.*s..%s" , a_len , a , b );
88
- } else {
89
- error (_ ("need two commit ranges" ));
90
- usage_with_options (builtin_range_diff_usage , options );
91
- }
106
+ } else
107
+ usage_msg_opt (_ ("need two commit ranges" ),
108
+ builtin_range_diff_usage , options );
92
109
FREE_AND_NULL (options );
93
110
94
111
range_diff_opts .dual_color = simple_color < 1 ;
0 commit comments