| #!/bin/sh | |
| test_description='check problems with relative GIT_DIR | |
| This test creates a working tree state with a file and subdir: | |
| top (committed several times) | |
| subdir (a subdirectory) | |
| It creates a commit-hook and tests it, then moves .git | |
| into the subdir while keeping the worktree location, | |
| and tries commits from the top and the subdir, checking | |
| that the commit-hook still gets called.' | |
| . ./test-lib.sh | |
| COMMIT_FILE="$(pwd)/output" | |
| export COMMIT_FILE | |
| test_expect_success 'Setting up post-commit hook' ' | |
| mkdir -p .git/hooks && | |
| echo >.git/hooks/post-commit "#!/bin/sh | |
| touch \"\${COMMIT_FILE}\" | |
| echo Post commit hook was called." && | |
| chmod +x .git/hooks/post-commit' | |
| test_expect_success 'post-commit hook used ordinarily' ' | |
| echo initial >top && | |
| git add top && | |
| git commit -m initial && | |
| test -r "${COMMIT_FILE}" | |
| ' | |
| rm -rf "${COMMIT_FILE}" | |
| mkdir subdir | |
| mv .git subdir | |
| test_expect_success 'post-commit-hook created and used from top dir' ' | |
| echo changed >top && | |
| git --git-dir subdir/.git add top && | |
| git --git-dir subdir/.git commit -m topcommit && | |
| test -r "${COMMIT_FILE}" | |
| ' | |
| rm -rf "${COMMIT_FILE}" | |
| test_expect_success 'post-commit-hook from sub dir' ' | |
| echo changed again >top && | |
| cd subdir && | |
| git --git-dir .git --work-tree .. add ../top && | |
| git --git-dir .git --work-tree .. commit -m subcommit && | |
| test -r "${COMMIT_FILE}" | |
| ' | |
| test_done |