Merge branch 'cc/shared-index-permfix'
The split index code did not honor core.sharedrepository setting correctly. * cc/shared-index-permfix: t1700: make sure split-index respects core.sharedrepository t1301: move modebits() to test-lib-functions.sh read-cache: use shared perms when writing shared index
This commit is contained in:
commit
8e90578ffb
@ -2431,6 +2431,14 @@ static int write_shared_index(struct index_state *istate,
|
||||
delete_tempfile(&temporary_sharedindex);
|
||||
return ret;
|
||||
}
|
||||
ret = adjust_shared_perm(get_tempfile_path(&temporary_sharedindex));
|
||||
if (ret) {
|
||||
int save_errno = errno;
|
||||
error("cannot fix permission bits on %s", get_tempfile_path(&temporary_sharedindex));
|
||||
delete_tempfile(&temporary_sharedindex);
|
||||
errno = save_errno;
|
||||
return ret;
|
||||
}
|
||||
ret = rename_tempfile(&temporary_sharedindex,
|
||||
git_path("sharedindex.%s", sha1_to_hex(si->base->sha1)));
|
||||
if (!ret) {
|
||||
|
@ -19,10 +19,6 @@ test_expect_success 'shared = 0400 (faulty permission u-w)' '
|
||||
)
|
||||
'
|
||||
|
||||
modebits () {
|
||||
ls -l "$1" | sed -e 's|^\(..........\).*|\1|'
|
||||
}
|
||||
|
||||
for u in 002 022
|
||||
do
|
||||
test_expect_success POSIXPERM "shared=1 does not clear bits preset by umask $u" '
|
||||
@ -88,7 +84,7 @@ do
|
||||
|
||||
rm -f .git/info/refs &&
|
||||
git update-server-info &&
|
||||
actual="$(modebits .git/info/refs)" &&
|
||||
actual="$(test_modebits .git/info/refs)" &&
|
||||
verbose test "x$actual" = "x-$y"
|
||||
|
||||
'
|
||||
@ -98,7 +94,7 @@ do
|
||||
|
||||
rm -f .git/info/refs &&
|
||||
git update-server-info &&
|
||||
actual="$(modebits .git/info/refs)" &&
|
||||
actual="$(test_modebits .git/info/refs)" &&
|
||||
verbose test "x$actual" = "x-$x"
|
||||
|
||||
'
|
||||
@ -111,7 +107,7 @@ test_expect_success POSIXPERM 'info/refs respects umask in unshared repo' '
|
||||
umask 002 &&
|
||||
git update-server-info &&
|
||||
echo "-rw-rw-r--" >expect &&
|
||||
modebits .git/info/refs >actual &&
|
||||
test_modebits .git/info/refs >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
@ -177,7 +173,7 @@ test_expect_success POSIXPERM 'remote init does not use config from cwd' '
|
||||
umask 0022 &&
|
||||
git init --bare child.git &&
|
||||
echo "-rw-r--r--" >expect &&
|
||||
modebits child.git/config >actual &&
|
||||
test_modebits child.git/config >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
@ -187,7 +183,7 @@ test_expect_success POSIXPERM 're-init respects core.sharedrepository (local)' '
|
||||
echo whatever >templates/foo &&
|
||||
git init --template=templates &&
|
||||
echo "-rw-rw-rw-" >expect &&
|
||||
modebits .git/foo >actual &&
|
||||
test_modebits .git/foo >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
@ -198,7 +194,7 @@ test_expect_success POSIXPERM 're-init respects core.sharedrepository (remote)'
|
||||
test_path_is_missing child.git/foo &&
|
||||
git init --bare --template=../templates child.git &&
|
||||
echo "-rw-rw-rw-" >expect &&
|
||||
modebits child.git/foo >actual &&
|
||||
test_modebits child.git/foo >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
@ -209,7 +205,7 @@ test_expect_success POSIXPERM 'template can set core.sharedrepository' '
|
||||
cp .git/config templates/config &&
|
||||
git init --bare --template=../templates child.git &&
|
||||
echo "-rw-rw-rw-" >expect &&
|
||||
modebits child.git/HEAD >actual &&
|
||||
test_modebits child.git/HEAD >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
|
@ -370,4 +370,34 @@ test_expect_success 'check splitIndex.sharedIndexExpire set to "never" and "now"
|
||||
test $(ls .git/sharedindex.* | wc -l) -le 2
|
||||
'
|
||||
|
||||
while read -r mode modebits
|
||||
do
|
||||
test_expect_success POSIXPERM "split index respects core.sharedrepository $mode" '
|
||||
# Remove existing shared index files
|
||||
git config core.splitIndex false &&
|
||||
git update-index --force-remove one &&
|
||||
rm -f .git/sharedindex.* &&
|
||||
# Create one new shared index file
|
||||
git config core.sharedrepository "$mode" &&
|
||||
git config core.splitIndex true &&
|
||||
: >one &&
|
||||
git update-index --add one &&
|
||||
echo "$modebits" >expect &&
|
||||
test_modebits .git/index >actual &&
|
||||
test_cmp expect actual &&
|
||||
shared=$(ls .git/sharedindex.*) &&
|
||||
case "$shared" in
|
||||
*" "*)
|
||||
# we have more than one???
|
||||
false ;;
|
||||
*)
|
||||
test_modebits "$shared" >actual &&
|
||||
test_cmp expect actual ;;
|
||||
esac
|
||||
'
|
||||
done <<\EOF
|
||||
0666 -rw-rw-rw-
|
||||
0642 -rw-r---w-
|
||||
EOF
|
||||
|
||||
test_done
|
||||
|
@ -216,6 +216,11 @@ test_chmod () {
|
||||
git update-index --add "--chmod=$@"
|
||||
}
|
||||
|
||||
# Get the modebits from a file.
|
||||
test_modebits () {
|
||||
ls -l "$1" | sed -e 's|^\(..........\).*|\1|'
|
||||
}
|
||||
|
||||
# Unset a configuration variable, but don't fail if it doesn't exist.
|
||||
test_unconfig () {
|
||||
config_dir=
|
||||
|
Loading…
Reference in New Issue
Block a user