summaryrefslogtreecommitdiffstats
path: root/sha1_name.c
diff options
context:
space:
mode:
authorKirill Smelkov <kirr@landau.phys.spbu.ru>2010-09-29 13:35:24 +0200
committerJunio C Hamano <gitster@pobox.com>2010-09-30 01:53:25 +0200
commit900647104e02e545064789f3c6b90a5807fba07b (patch)
tree18afcf6ef450617cf0944058d40fe9e14c93312a /sha1_name.c
parentblame,cat-file: Demonstrate --textconv is wrongly running converter on symlinks (diff)
downloadgit-900647104e02e545064789f3c6b90a5807fba07b.tar.xz
git-900647104e02e545064789f3c6b90a5807fba07b.zip
blame,cat-file --textconv: Don't assume mode is ``S_IFREF | 0664''
We need to get the correct mode when blame reads the source from the working tree, the index, or trees. This allows us to omit running textconv filters on symbolic links. Signed-off-by: Kirill Smelkov <kirr@landau.phys.spbu.ru> Reviewed-by: Matthieu Moy <Matthieu.Moy@grenoble-inp.fr> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'sha1_name.c')
-rw-r--r--sha1_name.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/sha1_name.c b/sha1_name.c
index 4af94fa598..36c9cbf1ac 100644
--- a/sha1_name.c
+++ b/sha1_name.c
@@ -1068,6 +1068,7 @@ int get_sha1_with_context_1(const char *name, unsigned char *sha1,
struct cache_entry *ce;
int pos;
if (namelen > 2 && name[1] == '/')
+ /* don't need mode for commit */
return get_sha1_oneline(name + 2, sha1);
if (namelen < 3 ||
name[2] != ':' ||
@@ -1095,6 +1096,7 @@ int get_sha1_with_context_1(const char *name, unsigned char *sha1,
break;
if (ce_stage(ce) == stage) {
hashcpy(sha1, ce->sha1);
+ oc->mode = ce->ce_mode;
return 0;
}
pos++;