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);
|
delete_tempfile(&temporary_sharedindex);
|
||||||
return ret;
|
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,
|
ret = rename_tempfile(&temporary_sharedindex,
|
||||||
git_path("sharedindex.%s", sha1_to_hex(si->base->sha1)));
|
git_path("sharedindex.%s", sha1_to_hex(si->base->sha1)));
|
||||||
if (!ret) {
|
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
|
for u in 002 022
|
||||||
do
|
do
|
||||||
test_expect_success POSIXPERM "shared=1 does not clear bits preset by umask $u" '
|
test_expect_success POSIXPERM "shared=1 does not clear bits preset by umask $u" '
|
||||||
@ -88,7 +84,7 @@ do
|
|||||||
|
|
||||||
rm -f .git/info/refs &&
|
rm -f .git/info/refs &&
|
||||||
git update-server-info &&
|
git update-server-info &&
|
||||||
actual="$(modebits .git/info/refs)" &&
|
actual="$(test_modebits .git/info/refs)" &&
|
||||||
verbose test "x$actual" = "x-$y"
|
verbose test "x$actual" = "x-$y"
|
||||||
|
|
||||||
'
|
'
|
||||||
@ -98,7 +94,7 @@ do
|
|||||||
|
|
||||||
rm -f .git/info/refs &&
|
rm -f .git/info/refs &&
|
||||||
git update-server-info &&
|
git update-server-info &&
|
||||||
actual="$(modebits .git/info/refs)" &&
|
actual="$(test_modebits .git/info/refs)" &&
|
||||||
verbose test "x$actual" = "x-$x"
|
verbose test "x$actual" = "x-$x"
|
||||||
|
|
||||||
'
|
'
|
||||||
@ -111,7 +107,7 @@ test_expect_success POSIXPERM 'info/refs respects umask in unshared repo' '
|
|||||||
umask 002 &&
|
umask 002 &&
|
||||||
git update-server-info &&
|
git update-server-info &&
|
||||||
echo "-rw-rw-r--" >expect &&
|
echo "-rw-rw-r--" >expect &&
|
||||||
modebits .git/info/refs >actual &&
|
test_modebits .git/info/refs >actual &&
|
||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
|
|
||||||
@ -177,7 +173,7 @@ test_expect_success POSIXPERM 'remote init does not use config from cwd' '
|
|||||||
umask 0022 &&
|
umask 0022 &&
|
||||||
git init --bare child.git &&
|
git init --bare child.git &&
|
||||||
echo "-rw-r--r--" >expect &&
|
echo "-rw-r--r--" >expect &&
|
||||||
modebits child.git/config >actual &&
|
test_modebits child.git/config >actual &&
|
||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
|
|
||||||
@ -187,7 +183,7 @@ test_expect_success POSIXPERM 're-init respects core.sharedrepository (local)' '
|
|||||||
echo whatever >templates/foo &&
|
echo whatever >templates/foo &&
|
||||||
git init --template=templates &&
|
git init --template=templates &&
|
||||||
echo "-rw-rw-rw-" >expect &&
|
echo "-rw-rw-rw-" >expect &&
|
||||||
modebits .git/foo >actual &&
|
test_modebits .git/foo >actual &&
|
||||||
test_cmp expect 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 &&
|
test_path_is_missing child.git/foo &&
|
||||||
git init --bare --template=../templates child.git &&
|
git init --bare --template=../templates child.git &&
|
||||||
echo "-rw-rw-rw-" >expect &&
|
echo "-rw-rw-rw-" >expect &&
|
||||||
modebits child.git/foo >actual &&
|
test_modebits child.git/foo >actual &&
|
||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
|
|
||||||
@ -209,7 +205,7 @@ test_expect_success POSIXPERM 'template can set core.sharedrepository' '
|
|||||||
cp .git/config templates/config &&
|
cp .git/config templates/config &&
|
||||||
git init --bare --template=../templates child.git &&
|
git init --bare --template=../templates child.git &&
|
||||||
echo "-rw-rw-rw-" >expect &&
|
echo "-rw-rw-rw-" >expect &&
|
||||||
modebits child.git/HEAD >actual &&
|
test_modebits child.git/HEAD >actual &&
|
||||||
test_cmp expect 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
|
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
|
test_done
|
||||||
|
@ -216,6 +216,11 @@ test_chmod () {
|
|||||||
git update-index --add "--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.
|
# Unset a configuration variable, but don't fail if it doesn't exist.
|
||||||
test_unconfig () {
|
test_unconfig () {
|
||||||
config_dir=
|
config_dir=
|
||||||
|
Loading…
Reference in New Issue
Block a user