From aba4727281612c3e24914691727e11e1f44a9aac Mon Sep 17 00:00:00 2001
From: Thomas Rast
Date: Sun, 16 Feb 2014 17:52:34 +0100
Subject: diff: do not reuse_worktree_file for submodules
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The GIT_EXTERNAL_DIFF calling code attempts to reuse existing worktree
files for the worktree side of diffs, for performance reasons.
However, that code also tries to do the same with submodules. This
results in calls to $GIT_EXTERNAL_DIFF where the old-file is a file of
the form "Submodule commit $sha1", but the new-file is a directory in
the worktree.
Fix it by never reusing a worktree "file" in the submodule case.
Reported-by: Grégory Pakosz
Signed-off-by: Thomas Rast
Signed-off-by: Junio C Hamano
---
diff.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
(limited to 'diff.c')
diff --git a/diff.c b/diff.c
index 266112ca6..a96992a1b 100644
--- a/diff.c
+++ b/diff.c
@@ -2842,8 +2842,9 @@ static struct diff_tempfile *prepare_temp_file(const char *name,
remove_tempfile_installed = 1;
}
- if (!one->sha1_valid ||
- reuse_worktree_file(name, one->sha1, 1)) {
+ if (!S_ISGITLINK(one->mode) &&
+ (!one->sha1_valid ||
+ reuse_worktree_file(name, one->sha1, 1))) {
struct stat st;
if (lstat(name, &st) < 0) {
if (errno == ENOENT)
--
cgit v1.2.1