Skip to content

Commit f137bd4

Browse files
committed
Merge branch 'jk/diff-result-code-cleanup'
"git diff --no-such-option" and other corner cases around the exit status of the "diff" command has been corrected. * jk/diff-result-code-cleanup: diff: drop useless "status" parameter from diff_result_code() diff: drop useless return values in git-diff helpers diff: drop useless return from run_diff_{files,index} functions diff: die when failing to read index in git-diff builtin diff: show usage for unknown builtin_diff_files() options diff-files: avoid negative exit value diff: spell DIFF_INDEX_CACHED out when calling run_diff_index()
2 parents 3525f1d + 5cc6b2d commit f137bd4

17 files changed

+81
-95
lines changed

add-interactive.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -569,7 +569,7 @@ static int get_modified_files(struct repository *r,
569569
copy_pathspec(&rev.prune_data, ps);
570570

571571
if (s.mode == FROM_INDEX)
572-
run_diff_index(&rev, 1);
572+
run_diff_index(&rev, DIFF_INDEX_CACHED);
573573
else {
574574
rev.diffopt.flags.ignore_dirty_submodules = 1;
575575
run_diff_files(&rev, 0);

builtin/add.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,8 +194,7 @@ static int edit_patch(int argc, const char **argv, const char *prefix)
194194
out = xopen(file, O_CREAT | O_WRONLY | O_TRUNC, 0666);
195195
rev.diffopt.file = xfdopen(out, "w");
196196
rev.diffopt.close_file = 1;
197-
if (run_diff_files(&rev, 0))
198-
die(_("Could not write patch"));
197+
run_diff_files(&rev, 0);
199198

200199
if (launch_editor(file, NULL, NULL))
201200
die(_("editing patch failed"));

builtin/am.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1430,7 +1430,7 @@ static void write_index_patch(const struct am_state *state)
14301430
rev_info.diffopt.close_file = 1;
14311431
add_pending_object(&rev_info, &tree->object, "");
14321432
diff_setup_done(&rev_info.diffopt);
1433-
run_diff_index(&rev_info, 1);
1433+
run_diff_index(&rev_info, DIFF_INDEX_CACHED);
14341434
release_revisions(&rev_info);
14351435
}
14361436

@@ -1593,7 +1593,7 @@ static int fall_back_threeway(const struct am_state *state, const char *index_pa
15931593
rev_info.diffopt.filter |= diff_filter_bit('M');
15941594
add_pending_oid(&rev_info, "HEAD", &our_tree, 0);
15951595
diff_setup_done(&rev_info.diffopt);
1596-
run_diff_index(&rev_info, 1);
1596+
run_diff_index(&rev_info, DIFF_INDEX_CACHED);
15971597
release_revisions(&rev_info);
15981598
}
15991599

builtin/describe.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -668,7 +668,7 @@ int cmd_describe(int argc, const char **argv, const char *prefix)
668668
struct lock_file index_lock = LOCK_INIT;
669669
struct rev_info revs;
670670
struct strvec args = STRVEC_INIT;
671-
int fd, result;
671+
int fd;
672672

673673
setup_work_tree();
674674
prepare_repo_settings(the_repository);
@@ -685,9 +685,9 @@ int cmd_describe(int argc, const char **argv, const char *prefix)
685685
strvec_pushv(&args, diff_index_args);
686686
if (setup_revisions(args.nr, args.v, &revs, NULL) != 1)
687687
BUG("malformed internal diff-index command line");
688-
result = run_diff_index(&revs, 0);
688+
run_diff_index(&revs, 0);
689689

690-
if (!diff_result_code(&revs.diffopt, result))
690+
if (!diff_result_code(&revs.diffopt))
691691
suffix = NULL;
692692
else
693693
suffix = dirty;

builtin/diff-files.c

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -80,14 +80,10 @@ int cmd_diff_files(int argc, const char **argv, const char *prefix)
8080
(rev.diffopt.output_format & DIFF_FORMAT_PATCH))
8181
diff_merges_set_dense_combined_if_unset(&rev);
8282

83-
if (repo_read_index_preload(the_repository, &rev.diffopt.pathspec, 0) < 0) {
84-
perror("repo_read_index_preload");
85-
result = -1;
86-
goto cleanup;
87-
}
88-
result = run_diff_files(&rev, options);
89-
result = diff_result_code(&rev.diffopt, result);
90-
cleanup:
83+
if (repo_read_index_preload(the_repository, &rev.diffopt.pathspec, 0) < 0)
84+
die_errno("repo_read_index_preload");
85+
run_diff_files(&rev, options);
86+
result = diff_result_code(&rev.diffopt);
9187
release_revisions(&rev);
9288
return result;
9389
}

builtin/diff-index.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ int cmd_diff_index(int argc, const char **argv, const char *prefix)
7272
perror("repo_read_index");
7373
return -1;
7474
}
75-
result = run_diff_index(&rev, option);
76-
result = diff_result_code(&rev.diffopt, result);
75+
run_diff_index(&rev, option);
76+
result = diff_result_code(&rev.diffopt);
7777
release_revisions(&rev);
7878
return result;
7979
}

builtin/diff-tree.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,5 +232,5 @@ int cmd_diff_tree(int argc, const char **argv, const char *prefix)
232232
diff_free(&opt->diffopt);
233233
}
234234

235-
return diff_result_code(&opt->diffopt, 0);
235+
return diff_result_code(&opt->diffopt);
236236
}

builtin/diff.c

Lines changed: 37 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,9 @@ static void stuff_change(struct diff_options *opt,
7777
diff_queue(&diff_queued_diff, one, two);
7878
}
7979

80-
static int builtin_diff_b_f(struct rev_info *revs,
81-
int argc, const char **argv UNUSED,
82-
struct object_array_entry **blob)
80+
static void builtin_diff_b_f(struct rev_info *revs,
81+
int argc, const char **argv UNUSED,
82+
struct object_array_entry **blob)
8383
{
8484
/* Blob vs file in the working tree*/
8585
struct stat st;
@@ -109,12 +109,11 @@ static int builtin_diff_b_f(struct rev_info *revs,
109109
path);
110110
diffcore_std(&revs->diffopt);
111111
diff_flush(&revs->diffopt);
112-
return 0;
113112
}
114113

115-
static int builtin_diff_blobs(struct rev_info *revs,
116-
int argc, const char **argv UNUSED,
117-
struct object_array_entry **blob)
114+
static void builtin_diff_blobs(struct rev_info *revs,
115+
int argc, const char **argv UNUSED,
116+
struct object_array_entry **blob)
118117
{
119118
const unsigned mode = canon_mode(S_IFREG | 0644);
120119

@@ -134,11 +133,10 @@ static int builtin_diff_blobs(struct rev_info *revs,
134133
blob_path(blob[0]), blob_path(blob[1]));
135134
diffcore_std(&revs->diffopt);
136135
diff_flush(&revs->diffopt);
137-
return 0;
138136
}
139137

140-
static int builtin_diff_index(struct rev_info *revs,
141-
int argc, const char **argv)
138+
static void builtin_diff_index(struct rev_info *revs,
139+
int argc, const char **argv)
142140
{
143141
unsigned int option = 0;
144142
while (1 < argc) {
@@ -163,20 +161,18 @@ static int builtin_diff_index(struct rev_info *revs,
163161
setup_work_tree();
164162
if (repo_read_index_preload(the_repository,
165163
&revs->diffopt.pathspec, 0) < 0) {
166-
perror("repo_read_index_preload");
167-
return -1;
164+
die_errno("repo_read_index_preload");
168165
}
169166
} else if (repo_read_index(the_repository) < 0) {
170-
perror("repo_read_cache");
171-
return -1;
167+
die_errno("repo_read_cache");
172168
}
173-
return run_diff_index(revs, option);
169+
run_diff_index(revs, option);
174170
}
175171

176-
static int builtin_diff_tree(struct rev_info *revs,
177-
int argc, const char **argv,
178-
struct object_array_entry *ent0,
179-
struct object_array_entry *ent1)
172+
static void builtin_diff_tree(struct rev_info *revs,
173+
int argc, const char **argv,
174+
struct object_array_entry *ent0,
175+
struct object_array_entry *ent1)
180176
{
181177
const struct object_id *(oid[2]);
182178
struct object_id mb_oid;
@@ -209,13 +205,12 @@ static int builtin_diff_tree(struct rev_info *revs,
209205
}
210206
diff_tree_oid(oid[0], oid[1], "", &revs->diffopt);
211207
log_tree_diff_flush(revs);
212-
return 0;
213208
}
214209

215-
static int builtin_diff_combined(struct rev_info *revs,
216-
int argc, const char **argv UNUSED,
217-
struct object_array_entry *ent,
218-
int ents, int first_non_parent)
210+
static void builtin_diff_combined(struct rev_info *revs,
211+
int argc, const char **argv UNUSED,
212+
struct object_array_entry *ent,
213+
int ents, int first_non_parent)
219214
{
220215
struct oid_array parents = OID_ARRAY_INIT;
221216
int i;
@@ -236,7 +231,6 @@ static int builtin_diff_combined(struct rev_info *revs,
236231
}
237232
diff_tree_combined(&ent[first_non_parent].item->oid, &parents, revs);
238233
oid_array_clear(&parents);
239-
return 0;
240234
}
241235

242236
static void refresh_index_quietly(void)
@@ -254,7 +248,7 @@ static void refresh_index_quietly(void)
254248
repo_update_index_if_able(the_repository, &lock_file);
255249
}
256250

257-
static int builtin_diff_files(struct rev_info *revs, int argc, const char **argv)
251+
static void builtin_diff_files(struct rev_info *revs, int argc, const char **argv)
258252
{
259253
unsigned int options = 0;
260254

@@ -269,8 +263,10 @@ static int builtin_diff_files(struct rev_info *revs, int argc, const char **argv
269263
options |= DIFF_SILENT_ON_REMOVED;
270264
else if (!strcmp(argv[1], "-h"))
271265
usage(builtin_diff_usage);
272-
else
273-
return error(_("invalid option: %s"), argv[1]);
266+
else {
267+
error(_("invalid option: %s"), argv[1]);
268+
usage(builtin_diff_usage);
269+
}
274270
argv++; argc--;
275271
}
276272

@@ -287,10 +283,9 @@ static int builtin_diff_files(struct rev_info *revs, int argc, const char **argv
287283
setup_work_tree();
288284
if (repo_read_index_preload(the_repository, &revs->diffopt.pathspec,
289285
0) < 0) {
290-
perror("repo_read_index_preload");
291-
return -1;
286+
die_errno("repo_read_index_preload");
292287
}
293-
return run_diff_files(revs, options);
288+
run_diff_files(revs, options);
294289
}
295290

296291
struct symdiff {
@@ -404,7 +399,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
404399
int blobs = 0, paths = 0;
405400
struct object_array_entry *blob[2];
406401
int nongit = 0, no_index = 0;
407-
int result = 0;
402+
int result;
408403
struct symdiff sdiff;
409404

410405
/*
@@ -583,17 +578,17 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
583578
if (!ent.nr) {
584579
switch (blobs) {
585580
case 0:
586-
result = builtin_diff_files(&rev, argc, argv);
581+
builtin_diff_files(&rev, argc, argv);
587582
break;
588583
case 1:
589584
if (paths != 1)
590585
usage(builtin_diff_usage);
591-
result = builtin_diff_b_f(&rev, argc, argv, blob);
586+
builtin_diff_b_f(&rev, argc, argv, blob);
592587
break;
593588
case 2:
594589
if (paths)
595590
usage(builtin_diff_usage);
596-
result = builtin_diff_blobs(&rev, argc, argv, blob);
591+
builtin_diff_blobs(&rev, argc, argv, blob);
597592
break;
598593
default:
599594
usage(builtin_diff_usage);
@@ -602,18 +597,18 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
602597
else if (blobs)
603598
usage(builtin_diff_usage);
604599
else if (ent.nr == 1)
605-
result = builtin_diff_index(&rev, argc, argv);
600+
builtin_diff_index(&rev, argc, argv);
606601
else if (ent.nr == 2) {
607602
if (sdiff.warn)
608603
warning(_("%s...%s: multiple merge bases, using %s"),
609604
sdiff.left, sdiff.right, sdiff.base);
610-
result = builtin_diff_tree(&rev, argc, argv,
611-
&ent.objects[0], &ent.objects[1]);
605+
builtin_diff_tree(&rev, argc, argv,
606+
&ent.objects[0], &ent.objects[1]);
612607
} else
613-
result = builtin_diff_combined(&rev, argc, argv,
614-
ent.objects, ent.nr,
615-
first_non_parent);
616-
result = diff_result_code(&rev.diffopt, result);
608+
builtin_diff_combined(&rev, argc, argv,
609+
ent.objects, ent.nr,
610+
first_non_parent);
611+
result = diff_result_code(&rev.diffopt);
617612
if (1 < rev.diffopt.skip_stat_unmatch)
618613
refresh_index_quietly();
619614
release_revisions(&rev);

builtin/log.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -549,7 +549,7 @@ static int cmd_log_walk_no_free(struct rev_info *rev)
549549
rev->diffopt.flags.check_failed) {
550550
return 02;
551551
}
552-
return diff_result_code(&rev->diffopt, 0);
552+
return diff_result_code(&rev->diffopt);
553553
}
554554

555555
static int cmd_log_walk(struct rev_info *rev)

builtin/stash.c

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -973,7 +973,7 @@ static int show_stash(int argc, const char **argv, const char *prefix)
973973
}
974974
log_tree_diff_flush(&rev);
975975

976-
ret = diff_result_code(&rev.diffopt, 0);
976+
ret = diff_result_code(&rev.diffopt);
977977
cleanup:
978978
strvec_clear(&stash_args);
979979
free_stash_info(&info);
@@ -1089,7 +1089,6 @@ static int get_untracked_files(const struct pathspec *ps, int include_untracked,
10891089
*/
10901090
static int check_changes_tracked_files(const struct pathspec *ps)
10911091
{
1092-
int result;
10931092
struct rev_info rev;
10941093
struct object_id dummy;
10951094
int ret = 0;
@@ -1111,14 +1110,14 @@ static int check_changes_tracked_files(const struct pathspec *ps)
11111110
add_head_to_pending(&rev);
11121111
diff_setup_done(&rev.diffopt);
11131112

1114-
result = run_diff_index(&rev, 1);
1115-
if (diff_result_code(&rev.diffopt, result)) {
1113+
run_diff_index(&rev, DIFF_INDEX_CACHED);
1114+
if (diff_result_code(&rev.diffopt)) {
11161115
ret = 1;
11171116
goto done;
11181117
}
11191118

1120-
result = run_diff_files(&rev, 0);
1121-
if (diff_result_code(&rev.diffopt, result)) {
1119+
run_diff_files(&rev, 0);
1120+
if (diff_result_code(&rev.diffopt)) {
11221121
ret = 1;
11231122
goto done;
11241123
}
@@ -1309,10 +1308,7 @@ static int stash_working_tree(struct stash_info *info, const struct pathspec *ps
13091308

13101309
add_pending_object(&rev, parse_object(the_repository, &info->b_commit),
13111310
"");
1312-
if (run_diff_index(&rev, 0)) {
1313-
ret = -1;
1314-
goto done;
1315-
}
1311+
run_diff_index(&rev, 0);
13161312

13171313
cp_upd_index.git_cmd = 1;
13181314
strvec_pushl(&cp_upd_index.args, "update-index",

0 commit comments

Comments
 (0)