f4609b896f
This also bumps the stable nixpkgs to 20.09 as of 2020-11-21, because there is some breakage in the git build related to the netrc credentials helper which someone has taken care of in nixpkgs. The stable channel is not used for anything other than git, so this should be fine. Change-Id: I3575a19dab09e1e9556cf8231d717de9890484fb
258 lines
6.1 KiB
Bash
Executable file
258 lines
6.1 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
test_description='Test Git when git repository is located at root
|
|
|
|
This test requires write access in root. Do not bother if you do not
|
|
have a throwaway chroot or VM.
|
|
|
|
Script t1509/prepare-chroot.sh may help you setup chroot, then you
|
|
can chroot in and execute this test from there.
|
|
'
|
|
|
|
. ./test-lib.sh
|
|
|
|
test_cmp_val() {
|
|
echo "$1" > expected
|
|
echo "$2" > result
|
|
test_cmp expected result
|
|
}
|
|
|
|
test_vars() {
|
|
test_expect_success "$1: gitdir" '
|
|
test_cmp_val "'"$2"'" "$(git rev-parse --git-dir)"
|
|
'
|
|
|
|
test_expect_success "$1: worktree" '
|
|
test_cmp_val "'"$3"'" "$(git rev-parse --show-toplevel)"
|
|
'
|
|
|
|
test_expect_success "$1: prefix" '
|
|
test_cmp_val "'"$4"'" "$(git rev-parse --show-prefix)"
|
|
'
|
|
}
|
|
|
|
test_foobar_root() {
|
|
test_expect_success 'add relative' '
|
|
test -z "$(cd / && git ls-files)" &&
|
|
git add foo/foome &&
|
|
git add foo/bar/barme &&
|
|
git add me &&
|
|
( cd / && git ls-files --stage ) > result &&
|
|
test_cmp /ls.expected result &&
|
|
rm "$(git rev-parse --git-dir)/index"
|
|
'
|
|
|
|
test_expect_success 'add absolute' '
|
|
test -z "$(cd / && git ls-files)" &&
|
|
git add /foo/foome &&
|
|
git add /foo/bar/barme &&
|
|
git add /me &&
|
|
( cd / && git ls-files --stage ) > result &&
|
|
test_cmp /ls.expected result &&
|
|
rm "$(git rev-parse --git-dir)/index"
|
|
'
|
|
|
|
}
|
|
|
|
test_foobar_foo() {
|
|
test_expect_success 'add relative' '
|
|
test -z "$(cd / && git ls-files)" &&
|
|
git add foome &&
|
|
git add bar/barme &&
|
|
git add ../me &&
|
|
( cd / && git ls-files --stage ) > result &&
|
|
test_cmp /ls.expected result &&
|
|
rm "$(git rev-parse --git-dir)/index"
|
|
'
|
|
|
|
test_expect_success 'add absolute' '
|
|
test -z "$(cd / && git ls-files)" &&
|
|
git add /foo/foome &&
|
|
git add /foo/bar/barme &&
|
|
git add /me &&
|
|
( cd / && git ls-files --stage ) > result &&
|
|
test_cmp /ls.expected result &&
|
|
rm "$(git rev-parse --git-dir)/index"
|
|
'
|
|
}
|
|
|
|
test_foobar_foobar() {
|
|
test_expect_success 'add relative' '
|
|
test -z "$(cd / && git ls-files)" &&
|
|
git add ../foome &&
|
|
git add barme &&
|
|
git add ../../me &&
|
|
( cd / && git ls-files --stage ) > result &&
|
|
test_cmp /ls.expected result &&
|
|
rm "$(git rev-parse --git-dir)/index"
|
|
'
|
|
|
|
test_expect_success 'add absolute' '
|
|
test -z "$(cd / && git ls-files)" &&
|
|
git add /foo/foome &&
|
|
git add /foo/bar/barme &&
|
|
git add /me &&
|
|
( cd / && git ls-files --stage ) > result &&
|
|
test_cmp /ls.expected result &&
|
|
rm "$(git rev-parse --git-dir)/index"
|
|
'
|
|
}
|
|
|
|
if ! test -w /
|
|
then
|
|
skip_all="Test requiring writable / skipped. Read this test if you want to run it"
|
|
test_done
|
|
fi
|
|
|
|
if test -e /refs || test -e /objects || test -e /info || test -e /hooks ||
|
|
test -e /.git || test -e /foo || test -e /me
|
|
then
|
|
skip_all="Skip test that clobbers existing files in /"
|
|
test_done
|
|
fi
|
|
|
|
if [ "$IKNOWWHATIAMDOING" != "YES" ]; then
|
|
skip_all="You must set env var IKNOWWHATIAMDOING=YES in order to run this test"
|
|
test_done
|
|
fi
|
|
|
|
if ! test_have_prereq NOT_ROOT
|
|
then
|
|
skip_all="No you can't run this as root"
|
|
test_done
|
|
fi
|
|
|
|
ONE_SHA1=d00491fd7e5bb6fa28c517a0bb32b8b506539d4d
|
|
|
|
test_expect_success 'setup' '
|
|
rm -rf /foo &&
|
|
mkdir /foo &&
|
|
mkdir /foo/bar &&
|
|
echo 1 > /foo/foome &&
|
|
echo 1 > /foo/bar/barme &&
|
|
echo 1 > /me
|
|
'
|
|
|
|
say "GIT_DIR absolute, GIT_WORK_TREE set"
|
|
|
|
test_expect_success 'go to /' 'cd /'
|
|
|
|
cat >ls.expected <<EOF
|
|
100644 $ONE_SHA1 0 foo/bar/barme
|
|
100644 $ONE_SHA1 0 foo/foome
|
|
100644 $ONE_SHA1 0 me
|
|
EOF
|
|
|
|
GIT_DIR="$TRASH_DIRECTORY/.git" && export GIT_DIR
|
|
GIT_WORK_TREE=/ && export GIT_WORK_TREE
|
|
|
|
test_vars 'abs gitdir, root' "$GIT_DIR" "/" ""
|
|
test_foobar_root
|
|
|
|
test_expect_success 'go to /foo' 'cd /foo'
|
|
|
|
test_vars 'abs gitdir, foo' "$GIT_DIR" "/" "foo/"
|
|
test_foobar_foo
|
|
|
|
test_expect_success 'go to /foo/bar' 'cd /foo/bar'
|
|
|
|
test_vars 'abs gitdir, foo/bar' "$GIT_DIR" "/" "foo/bar/"
|
|
test_foobar_foobar
|
|
|
|
say "GIT_DIR relative, GIT_WORK_TREE set"
|
|
|
|
test_expect_success 'go to /' 'cd /'
|
|
|
|
GIT_DIR="$(echo $TRASH_DIRECTORY|sed 's,^/,,')/.git" && export GIT_DIR
|
|
GIT_WORK_TREE=/ && export GIT_WORK_TREE
|
|
|
|
test_vars 'rel gitdir, root' "$GIT_DIR" "/" ""
|
|
test_foobar_root
|
|
|
|
test_expect_success 'go to /foo' 'cd /foo'
|
|
|
|
GIT_DIR="../$TRASH_DIRECTORY/.git" && export GIT_DIR
|
|
GIT_WORK_TREE=/ && export GIT_WORK_TREE
|
|
|
|
test_vars 'rel gitdir, foo' "$TRASH_DIRECTORY/.git" "/" "foo/"
|
|
test_foobar_foo
|
|
|
|
test_expect_success 'go to /foo/bar' 'cd /foo/bar'
|
|
|
|
GIT_DIR="../../$TRASH_DIRECTORY/.git" && export GIT_DIR
|
|
GIT_WORK_TREE=/ && export GIT_WORK_TREE
|
|
|
|
test_vars 'rel gitdir, foo/bar' "$TRASH_DIRECTORY/.git" "/" "foo/bar/"
|
|
test_foobar_foobar
|
|
|
|
say "GIT_DIR relative, GIT_WORK_TREE relative"
|
|
|
|
test_expect_success 'go to /' 'cd /'
|
|
|
|
GIT_DIR="$(echo $TRASH_DIRECTORY|sed 's,^/,,')/.git" && export GIT_DIR
|
|
GIT_WORK_TREE=. && export GIT_WORK_TREE
|
|
|
|
test_vars 'rel gitdir, root' "$GIT_DIR" "/" ""
|
|
test_foobar_root
|
|
|
|
test_expect_success 'go to /' 'cd /foo'
|
|
|
|
GIT_DIR="../$TRASH_DIRECTORY/.git" && export GIT_DIR
|
|
GIT_WORK_TREE=.. && export GIT_WORK_TREE
|
|
|
|
test_vars 'rel gitdir, foo' "$TRASH_DIRECTORY/.git" "/" "foo/"
|
|
test_foobar_foo
|
|
|
|
test_expect_success 'go to /foo/bar' 'cd /foo/bar'
|
|
|
|
GIT_DIR="../../$TRASH_DIRECTORY/.git" && export GIT_DIR
|
|
GIT_WORK_TREE=../.. && export GIT_WORK_TREE
|
|
|
|
test_vars 'rel gitdir, foo/bar' "$TRASH_DIRECTORY/.git" "/" "foo/bar/"
|
|
test_foobar_foobar
|
|
|
|
say ".git at root"
|
|
|
|
unset GIT_DIR
|
|
unset GIT_WORK_TREE
|
|
|
|
test_expect_success 'go to /' 'cd /'
|
|
test_expect_success 'setup' '
|
|
rm -rf /.git &&
|
|
echo "Initialized empty Git repository in /.git/" > expected &&
|
|
git init > result &&
|
|
test_i18ncmp expected result
|
|
'
|
|
|
|
test_vars 'auto gitdir, root' ".git" "/" ""
|
|
test_foobar_root
|
|
|
|
test_expect_success 'go to /foo' 'cd /foo'
|
|
test_vars 'auto gitdir, foo' "/.git" "/" "foo/"
|
|
test_foobar_foo
|
|
|
|
test_expect_success 'go to /foo/bar' 'cd /foo/bar'
|
|
test_vars 'auto gitdir, foo/bar' "/.git" "/" "foo/bar/"
|
|
test_foobar_foobar
|
|
|
|
test_expect_success 'cleanup' 'rm -rf /.git'
|
|
|
|
say "auto bare gitdir"
|
|
|
|
# DESTROYYYYY!!!!!
|
|
test_expect_success 'setup' '
|
|
rm -rf /refs /objects /info /hooks &&
|
|
rm -f /expected /ls.expected /me /result &&
|
|
cd / &&
|
|
echo "Initialized empty Git repository in /" > expected &&
|
|
git init --bare > result &&
|
|
test_i18ncmp expected result
|
|
'
|
|
|
|
test_vars 'auto gitdir, root' "." "" ""
|
|
|
|
test_expect_success 'go to /foo' 'cd /foo'
|
|
|
|
test_vars 'auto gitdir, root' "/" "" ""
|
|
|
|
test_done
|