|  | #!/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 |