diff options
author | Jeff King <peff@peff.net> | 2014-04-19 15:22:25 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2014-04-21 10:32:19 -0700 |
commit | f3efe78782b36d68dc71a4f48a7bd3381c6b5669 (patch) | |
tree | d6420e252b46026fadefe777c95a7ebf6d175fed /diff.c | |
parent | 0d4217d92e3043e23a8960519a51cc7a36ed8914 (diff) | |
download | git-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.c | 26 |
1 files changed, 15 insertions, 11 deletions
@@ -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); } |