summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 4dafd7d)
raw | patch | inline | side by side (parent: 4dafd7d)
author | Shawn Pearce <spearce@spearce.org> | |
Wed, 27 Sep 2006 05:21:19 +0000 (01:21 -0400) | ||
committer | Junio C Hamano <junkio@cox.net> | |
Wed, 27 Sep 2006 05:42:52 +0000 (22:42 -0700) |
If the user has configured core.filemode=0 then we shouldn't set
the execute bit in the index when adding a new file as the user
has indicated that the local filesystem can't be trusted.
This means that when adding files that should be marked executable
in a repository with core.filemode=0 the user must perform a
'git update-index --chmod=+x' on the file before committing the
addition.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
the execute bit in the index when adding a new file as the user
has indicated that the local filesystem can't be trusted.
This means that when adding files that should be marked executable
in a repository with core.filemode=0 the user must perform a
'git update-index --chmod=+x' on the file before committing the
addition.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
builtin-update-index.c | patch | blob | history | |
read-cache.c | patch | blob | history | |
t/t3700-add.sh | patch | blob | history |
diff --git a/builtin-update-index.c b/builtin-update-index.c
index 0620e779b04146a01f9e06cbbcd535b106034bd6..a3c0a455ae5d1b8d7b7b6a8798ed7f038ab7bd72 100644 (file)
--- a/builtin-update-index.c
+++ b/builtin-update-index.c
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.
+ * from it, otherwise force to 644.
*/
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);
}
if (index_path(ce->sha1, path, &st, !info_only))
diff --git a/read-cache.c b/read-cache.c
index 20c9d494ac94380c9074997e9cb3c69ff1c04a3f..97c38670b45d852b2f07f3d3addb2aaf6dbd8697 100644 (file)
--- a/read-cache.c
+++ b/read-cache.c
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.
+ * from it, otherwise force to 644.
*/
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);
}
if (index_path(ce->sha1, path, &st, 1))
diff --git a/t/t3700-add.sh b/t/t3700-add.sh
index 6cd05c3d9096e8017a6bfb23982ea46e0ae93630..d36f22d7deb071d50d220eac76bae5ef6415e412 100755 (executable)
--- a/t/t3700-add.sh
+++ b/t/t3700-add.sh
'Test that "git-add -- -q" works' \
'touch -- -q && git-add -- -q'
+test_expect_success \
+ 'git-add: Test that executable bit is not used if core.filemode=0' \
+ 'git repo-config core.filemode 0 &&
+ echo foo >xfoo1 &&
+ chmod 755 xfoo1 &&
+ git-add xfoo1 &&
+ case "`git-ls-files --stage xfoo1`" in
+ 100644" "*xfoo1) echo ok;;
+ *) echo fail; git-ls-files --stage xfoo1; exit 1;;
+ esac'
+
+test_expect_success \
+ 'git-update-index --add: Test that executable bit is not used...' \
+ 'git repo-config core.filemode 0 &&
+ echo foo >xfoo2 &&
+ chmod 755 xfoo2 &&
+ git-add xfoo2 &&
+ case "`git-ls-files --stage xfoo2`" in
+ 100644" "*xfoo2) echo ok;;
+ *) echo fail; git-ls-files --stage xfoo2; exit 1;;
+ esac'
+
test_done