summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNazri Ramliy <ayiehere@gmail.com>2009-02-12 13:36:14 (GMT)
committerJunio C Hamano <gitster@pobox.com>2009-02-12 20:31:52 (GMT)
commita8344abe0f70f9fc629ee055d73ffa65fbc58311 (patch)
treeb1b33c20811a2b62866530dea12b910f47d3c465
parent30aa4fb15fa408596dea59cdc9f00c94eeaa69f1 (diff)
downloadgit-a8344abe0f70f9fc629ee055d73ffa65fbc58311.zip
git-a8344abe0f70f9fc629ee055d73ffa65fbc58311.tar.gz
git-a8344abe0f70f9fc629ee055d73ffa65fbc58311.tar.bz2
Bugfix: GIT_EXTERNAL_DIFF with more than one changed files
When there is more than one file that are changed, running git diff with GIT_EXTERNAL_DIFF incorrectly diagnoses an programming error and dies. The check introduced in 479b0ae (diff: refactor tempfile cleanup handling, 2009-01-22) to detect a temporary file slot that forgot to remove its temporary file was inconsistent with the way the codepath to remove the temporary to mark the slot that it is done with it. This patch fixes this problem and adds a test case for it. Signed-off-by: Nazri Ramliy <ayiehere@gmail.com> Acked-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--diff.c8
-rwxr-xr-xt/t4020-diff-external.sh8
2 files changed, 12 insertions, 4 deletions
diff --git a/diff.c b/diff.c
index a5a540f..be3859e 100644
--- a/diff.c
+++ b/diff.c
@@ -184,11 +184,11 @@ static int remove_tempfile_installed;
static void remove_tempfile(void)
{
int i;
- for (i = 0; i < ARRAY_SIZE(diff_temp); i++)
- if (diff_temp[i].name == diff_temp[i].tmp_path) {
+ for (i = 0; i < ARRAY_SIZE(diff_temp); i++) {
+ if (diff_temp[i].name == diff_temp[i].tmp_path)
unlink(diff_temp[i].name);
- diff_temp[i].name = NULL;
- }
+ diff_temp[i].name = NULL;
+ }
}
static void remove_tempfile_on_signal(int signo)
diff --git a/t/t4020-diff-external.sh b/t/t4020-diff-external.sh
index caea292..281680d 100755
--- a/t/t4020-diff-external.sh
+++ b/t/t4020-diff-external.sh
@@ -128,4 +128,12 @@ test_expect_success 'force diff with "diff"' '
test_cmp "$TEST_DIRECTORY"/t4020/diff.NUL actual
'
+test_expect_success 'GIT_EXTERNAL_DIFF with more than one changed files' '
+ echo anotherfile > file2 &&
+ git add file2 &&
+ git commit -m "added 2nd file" &&
+ echo modified >file2 &&
+ GIT_EXTERNAL_DIFF=echo git diff
+'
+
test_done