summaryrefslogtreecommitdiff
path: root/diff.c
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2014-04-19 15:22:25 -0400
committerJunio C Hamano <gitster@pobox.com>2014-04-21 10:32:19 -0700
commitf3efe78782b36d68dc71a4f48a7bd3381c6b5669 (patch)
treed6420e252b46026fadefe777c95a7ebf6d175fed /diff.c
parent0d4217d92e3043e23a8960519a51cc7a36ed8914 (diff)
downloadgit-f3efe78782b36d68dc71a4f48a7bd3381c6b5669.tar.gz
run_external_diff: refactor cmdline setup logicjk/external-diff-use-argv-array
The current logic makes it hard to see what gets put onto the command line in which cases. Pulling out a helper function lets us see that we have two sets of file data, and the second set either uses the original name, or the "other" renamed/copy name. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'diff.c')
-rw-r--r--diff.c26
1 files changed, 15 insertions, 11 deletions
diff --git a/diff.c b/diff.c
index a360ab5063..680f52db4b 100644
--- a/diff.c
+++ b/diff.c
@@ -2892,6 +2892,16 @@ static struct diff_tempfile *prepare_temp_file(const char *name,
return temp;
}
+static void add_external_diff_name(struct argv_array *argv,
+ const char *name,
+ struct diff_filespec *df)
+{
+ struct diff_tempfile *temp = prepare_temp_file(name, df);
+ argv_array_push(argv, temp->name);
+ argv_array_push(argv, temp->hex);
+ argv_array_push(argv, temp->mode);
+}
+
/* An external diff command takes:
*
* diff-cmd name infile1 infile1-sha1 infile1-mode \
@@ -2915,17 +2925,11 @@ static void run_external_diff(const char *pgm,
argv_array_push(&argv, name);
if (one && two) {
- struct diff_tempfile *temp_one, *temp_two;
- const char *othername = (other ? other : name);
- temp_one = prepare_temp_file(name, one);
- temp_two = prepare_temp_file(othername, two);
- argv_array_push(&argv, temp_one->name);
- argv_array_push(&argv, temp_one->hex);
- argv_array_push(&argv, temp_one->mode);
- argv_array_push(&argv, temp_two->name);
- argv_array_push(&argv, temp_two->hex);
- argv_array_push(&argv, temp_two->mode);
- if (other) {
+ add_external_diff_name(&argv, name, one);
+ if (!other)
+ add_external_diff_name(&argv, name, two);
+ else {
+ add_external_diff_name(&argv, other, two);
argv_array_push(&argv, other);
argv_array_push(&argv, xfrm_msg);
}