Skip to content

Commit

Permalink
trust-executable-bit: fix breakage for symlinks
Browse files Browse the repository at this point in the history
An earlier commit f28b34a broke symlinks when trust-executable-bit
is not set because it incorrectly assumed that everything was a
regular file.

Reported by Juergen Ruehle.

Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Junio C Hamano committed Nov 23, 2006
1 parent 5d1faf8 commit 2bbaaed
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 8 deletions.
6 changes: 3 additions & 3 deletions builtin-update-index.c
Original file line number Diff line number Diff line change
Expand Up @@ -112,13 +112,13 @@ static int add_file_to_cache(const char *path)
ce->ce_mode = create_ce_mode(st.st_mode);
if (!trust_executable_bit) {
/* If there is an existing entry, pick the mode bits
* from it, otherwise force to 644.
* from it, otherwise assume unexecutable.
*/
int pos = cache_name_pos(path, namelen);
if (0 <= pos)
ce->ce_mode = active_cache[pos]->ce_mode;
else
ce->ce_mode = create_ce_mode(S_IFREG | 0644);
else if (S_ISREG(st.st_mode))
ce->ce_mode = create_ce_mode(S_IFREG | 0666);
}

if (index_path(ce->sha1, path, &st, !info_only))
Expand Down
6 changes: 3 additions & 3 deletions read-cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -347,13 +347,13 @@ int add_file_to_index(const char *path, int verbose)
ce->ce_mode = create_ce_mode(st.st_mode);
if (!trust_executable_bit) {
/* If there is an existing entry, pick the mode bits
* from it, otherwise force to 644.
* from it, otherwise assume unexecutable.
*/
int pos = cache_name_pos(path, namelen);
if (pos >= 0)
ce->ce_mode = active_cache[pos]->ce_mode;
else
ce->ce_mode = create_ce_mode(S_IFREG | 0644);
else if (S_ISREG(st.st_mode))
ce->ce_mode = create_ce_mode(S_IFREG | 0666);
}

if (index_path(ce->sha1, path, &st, 1))
Expand Down
14 changes: 12 additions & 2 deletions t/t3700-add.sh
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ test_expect_success \
git-add xfoo1 &&
case "`git-ls-files --stage xfoo1`" in
100644" "*xfoo1) echo ok;;
*) echo fail; git-ls-files --stage xfoo1; exit 1;;
*) echo fail; git-ls-files --stage xfoo1; (exit 1);;
esac'

test_expect_success \
Expand All @@ -38,7 +38,17 @@ test_expect_success \
git-update-index --add xfoo2 &&
case "`git-ls-files --stage xfoo2`" in
100644" "*xfoo2) echo ok;;
*) echo fail; git-ls-files --stage xfoo2; exit 1;;
*) echo fail; git-ls-files --stage xfoo2; (exit 1);;
esac'

test_expect_success \
'git-update-index --add: Test that executable bit is not used...' \
'git repo-config core.filemode 0 &&
ln -s xfoo2 xfoo3 &&
git-update-index --add xfoo3 &&
case "`git-ls-files --stage xfoo3`" in
120000" "*xfoo3) echo ok;;
*) echo fail; git-ls-files --stage xfoo3; (exit 1);;
esac'

test_done

0 comments on commit 2bbaaed

Please sign in to comment.