[PATCH] Fix incorrect diff of a link -> file change if core.filemode = false.
- From
Johannes Sixt <johannes.sixt@telecom.at>
- Date
- Feb 16, 2007, 23:09 UTC
- Message-ID
- <200702170009.02500.johannes.sixt@telecom.at>
After this sequence:
$ ln -s foo A $ git add A $ git commit -m link $ rm A && echo bar > A
the working copy contains a regular file A but HEAD contains A as a link.
Normally, at this point 'git diff HEAD' displays this change as a removal of the link followed by an addition of a new file. But in a repository where core.filemode is false this is displayed as a modification of the link. The reason is that the check when the cached mode is allowed to override the file's actual mode is not strict enough.
Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at> --- diff-lib.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/diff-lib.c b/diff-lib.c index 91cd877..5fc1910 100644 --- a/diff-lib.c +++ b/diff-lib.c @@ -171,7 +171,8 @@ static int get_stat_data(struct cache_entry *ce, changed = ce_match_stat(ce, &st, 0); if (changed) { mode = create_ce_mode(st.st_mode); - if (!trust_executable_bit && S_ISREG(st.st_mode)) + if (!trust_executable_bit && + S_ISREG(st.st_mode) && S_ISREG(ntohl(ce->ce_mode))) mode = ce->ce_mode; sha1 = no_sha1; }
-- 1.5.0.19.gddff