Git 2.23
[gitweb.git] / t / t1301-shared-repo.sh
index 3fddc9ee781ba9fb5d189bbc5ec0b900b159723a..2dc853d1be5f0fe012d40b5d020fcbfd7638ccb7 100755 (executable)
@@ -12,28 +12,23 @@ setfacl -k . 2>/dev/null
 
 # User must have read permissions to the repo -> failure on --shared=0400
 test_expect_success 'shared = 0400 (faulty permission u-w)' '
+       test_when_finished "rm -rf sub" &&
        mkdir sub && (
-               cd sub && git init --shared=0400
+               cd sub &&
+               test_must_fail git init --shared=0400
        )
-       ret="$?"
-       rm -rf sub
-       test $ret != "0"
 '
 
-modebits () {
-       ls -l "$1" | sed -e 's|^\(..........\).*|\1|'
-}
-
 for u in 002 022
 do
-       test_expect_success "shared=1 does not clear bits preset by umask $u" '
+       test_expect_success POSIXPERM "shared=1 does not clear bits preset by umask $u" '
                mkdir sub && (
                        cd sub &&
                        umask $u &&
                        git init --shared=1 &&
                        test 1 = "$(git config core.sharedrepository)"
                ) &&
-               actual=$(ls -l sub/.git/HEAD)
+               actual=$(ls -l sub/.git/HEAD) &&
                case "$actual" in
                -rw-rw-r--*)
                        : happy
@@ -54,7 +49,7 @@ test_expect_success 'shared=all' '
        test 2 = $(git config core.sharedrepository)
 '
 
-test_expect_success 'update-server-info honors core.sharedRepository' '
+test_expect_success POSIXPERM 'update-server-info honors core.sharedRepository' '
        : > a1 &&
        git add a1 &&
        test_tick &&
@@ -85,33 +80,39 @@ do
        git config core.sharedrepository "$u" &&
        umask 0277 &&
 
-       test_expect_success "shared = $u ($y) ro" '
+       test_expect_success POSIXPERM "shared = $u ($y) ro" '
 
                rm -f .git/info/refs &&
                git update-server-info &&
-               actual="$(modebits .git/info/refs)" &&
-               test "x$actual" = "x-$y" || {
-                       ls -lt .git/info
-                       false
-               }
+               actual="$(test_modebits .git/info/refs)" &&
+               verbose test "x$actual" = "x-$y"
+
        '
 
        umask 077 &&
-       test_expect_success "shared = $u ($x) rw" '
+       test_expect_success POSIXPERM "shared = $u ($x) rw" '
 
                rm -f .git/info/refs &&
                git update-server-info &&
-               actual="$(modebits .git/info/refs)" &&
-               test "x$actual" = "x-$x" || {
-                       ls -lt .git/info
-                       false
-               }
+               actual="$(test_modebits .git/info/refs)" &&
+               verbose test "x$actual" = "x-$x"
 
        '
 
 done
 
-test_expect_success 'git reflog expire honors core.sharedRepository' '
+test_expect_success POSIXPERM 'info/refs respects umask in unshared repo' '
+       rm -f .git/info/refs &&
+       test_unconfig core.sharedrepository &&
+       umask 002 &&
+       git update-server-info &&
+       echo "-rw-rw-r--" >expect &&
+       test_modebits .git/info/refs >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success POSIXPERM 'git reflog expire honors core.sharedRepository' '
+       umask 077 &&
        git config core.sharedRepository group &&
        git reflog expire --all &&
        actual="$(ls -l .git/logs/refs/heads/master)" &&
@@ -126,7 +127,7 @@ test_expect_success 'git reflog expire honors core.sharedRepository' '
        esac
 '
 
-test_expect_success 'forced modes' '
+test_expect_success POSIXPERM 'forced modes' '
        mkdir -p templates/hooks &&
        echo update-server-info >templates/hooks/post-update &&
        chmod +x templates/hooks/post-update &&
@@ -135,7 +136,7 @@ test_expect_success 'forced modes' '
        (
                cd new &&
                umask 002 &&
-               git init --shared=0660 --template=../templates &&
+               git init --shared=0660 --template=templates &&
                >frotz &&
                git add frotz &&
                git commit -a -m initial &&
@@ -167,4 +168,45 @@ test_expect_success 'forced modes' '
        }" actual)"
 '
 
+test_expect_success POSIXPERM 'remote init does not use config from cwd' '
+       git config core.sharedrepository 0666 &&
+       umask 0022 &&
+       git init --bare child.git &&
+       echo "-rw-r--r--" >expect &&
+       test_modebits child.git/config >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success POSIXPERM 're-init respects core.sharedrepository (local)' '
+       git config core.sharedrepository 0666 &&
+       umask 0022 &&
+       echo whatever >templates/foo &&
+       git init --template=templates &&
+       echo "-rw-rw-rw-" >expect &&
+       test_modebits .git/foo >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success POSIXPERM 're-init respects core.sharedrepository (remote)' '
+       rm -rf child.git &&
+       umask 0022 &&
+       git init --bare --shared=0666 child.git &&
+       test_path_is_missing child.git/foo &&
+       git init --bare --template=templates child.git &&
+       echo "-rw-rw-rw-" >expect &&
+       test_modebits child.git/foo >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success POSIXPERM 'template can set core.sharedrepository' '
+       rm -rf child.git &&
+       umask 0022 &&
+       git config core.sharedrepository 0666 &&
+       cp .git/config templates/config &&
+       git init --bare --template=templates child.git &&
+       echo "-rw-rw-rw-" >expect &&
+       test_modebits child.git/HEAD >actual &&
+       test_cmp expect actual
+'
+
 test_done