t / t1301-shared-repo.shon commit symbolic ref: refuse non-ref targets in HEAD (afe5d3d)
   1#!/bin/sh
   2#
   3# Copyright (c) 2007 Johannes Schindelin
   4#
   5
   6test_description='Test shared repository initialization'
   7
   8. ./test-lib.sh
   9
  10# Remove a default ACL from the test dir if possible.
  11setfacl -k . 2>/dev/null
  12
  13# User must have read permissions to the repo -> failure on --shared=0400
  14test_expect_success 'shared = 0400 (faulty permission u-w)' '
  15        mkdir sub && (
  16                cd sub && git init --shared=0400
  17        )
  18        ret="$?"
  19        rm -rf sub
  20        test $ret != "0"
  21'
  22
  23modebits () {
  24        ls -l "$1" | sed -e 's|^\(..........\).*|\1|'
  25}
  26
  27for u in 002 022
  28do
  29        test_expect_success "shared=1 does not clear bits preset by umask $u" '
  30                mkdir sub && (
  31                        cd sub &&
  32                        umask $u &&
  33                        git init --shared=1 &&
  34                        test 1 = "$(git config core.sharedrepository)"
  35                ) &&
  36                actual=$(ls -l sub/.git/HEAD)
  37                case "$actual" in
  38                -rw-rw-r--*)
  39                        : happy
  40                        ;;
  41                *)
  42                        echo Oops, .git/HEAD is not 0664 but $actual
  43                        false
  44                        ;;
  45                esac
  46        '
  47        rm -rf sub
  48done
  49
  50test_expect_success 'shared=all' '
  51        mkdir sub &&
  52        cd sub &&
  53        git init --shared=all &&
  54        test 2 = $(git config core.sharedrepository)
  55'
  56
  57test_expect_success 'update-server-info honors core.sharedRepository' '
  58        : > a1 &&
  59        git add a1 &&
  60        test_tick &&
  61        git commit -m a1 &&
  62        umask 0277 &&
  63        git update-server-info &&
  64        actual="$(ls -l .git/info/refs)" &&
  65        case "$actual" in
  66        -r--r--r--*)
  67                : happy
  68                ;;
  69        *)
  70                echo Oops, .git/info/refs is not 0444
  71                false
  72                ;;
  73        esac
  74'
  75
  76for u in        0660:rw-rw---- \
  77                0640:rw-r----- \
  78                0600:rw------- \
  79                0666:rw-rw-rw- \
  80                0664:rw-rw-r--
  81do
  82        x=$(expr "$u" : ".*:\([rw-]*\)") &&
  83        y=$(echo "$x" | sed -e "s/w/-/g") &&
  84        u=$(expr "$u" : "\([0-7]*\)") &&
  85        git config core.sharedrepository "$u" &&
  86        umask 0277 &&
  87
  88        test_expect_success "shared = $u ($y) ro" '
  89
  90                rm -f .git/info/refs &&
  91                git update-server-info &&
  92                actual="$(modebits .git/info/refs)" &&
  93                test "x$actual" = "x-$y" || {
  94                        ls -lt .git/info
  95                        false
  96                }
  97        '
  98
  99        umask 077 &&
 100        test_expect_success "shared = $u ($x) rw" '
 101
 102                rm -f .git/info/refs &&
 103                git update-server-info &&
 104                actual="$(modebits .git/info/refs)" &&
 105                test "x$actual" = "x-$x" || {
 106                        ls -lt .git/info
 107                        false
 108                }
 109
 110        '
 111
 112done
 113
 114test_expect_success 'git reflog expire honors core.sharedRepository' '
 115        git config core.sharedRepository group &&
 116        git reflog expire --all &&
 117        actual="$(ls -l .git/logs/refs/heads/master)" &&
 118        case "$actual" in
 119        -rw-rw-*)
 120                : happy
 121                ;;
 122        *)
 123                echo Ooops, .git/logs/refs/heads/master is not 0662 [$actual]
 124                false
 125                ;;
 126        esac
 127'
 128
 129test_done