[PATCH 6/6] run_external_diff: refactor cmdline setup logic
- From
Jeff King <peff@peff.net>
- Date
- Apr 19, 2014, 19:22 UTC
- Message-ID
- <20140419192225.GB9189@sigill.intra.peff.net>
- In-Reply-To
- <20140419191128.GA9266@sigill.intra.peff.net>
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> --- The last patch and this one are getting a little bit into code churn, perhaps. I think the prior one is hands-down more readable. This one, I am on the fence on whether it is a true improvement or simply "this is how _I_ would have written it". I won't be offended if we drop it.
diff.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-)
diff --git a/diff.c b/diff.c index 173b657..4b8bfc6 100644 --- a/diff.c +++ b/diff.c @@ -2888,6 +2888,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 \ @@ -2911,17 +2921,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); }
-- 1.9.1.656.ge8a0637