#!/bin/sh test_description='test GIT_CEILING_DIRECTORIES' TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_prefix() { local expect="$2" && test_expect_success "$1: git rev-parse --show-prefix is '$2'" ' echo "$expect" >expect && git rev-parse --show-prefix >actual && test_cmp expect actual ' } test_fail() { test_expect_success "$1: prefix" ' test_expect_code 128 git rev-parse --show-prefix ' } TRASH_ROOT="$PWD" ROOT_PARENT=$(dirname "$TRASH_ROOT") unset GIT_CEILING_DIRECTORIES test_prefix no_ceil "" export GIT_CEILING_DIRECTORIES GIT_CEILING_DIRECTORIES="" test_prefix ceil_empty "" GIT_CEILING_DIRECTORIES="$ROOT_PARENT" test_prefix ceil_at_parent "" GIT_CEILING_DIRECTORIES="$ROOT_PARENT/" test_prefix ceil_at_parent_slash "" GIT_CEILING_DIRECTORIES="$TRASH_ROOT" test_prefix ceil_at_trash "" GIT_CEILING_DIRECTORIES="$TRASH_ROOT/" test_prefix ceil_at_trash_slash "" GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub" test_prefix ceil_at_sub "" GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub/" test_prefix ceil_at_sub_slash "" if test_have_prereq SYMLINKS then ln -s sub top fi mkdir -p sub/dir || exit 1 cd sub/dir || exit 1 unset GIT_CEILING_DIRECTORIES test_prefix subdir_no_ceil "sub/dir/" export GIT_CEILING_DIRECTORIES GIT_CEILING_DIRECTORIES="" test_prefix subdir_ceil_empty "sub/dir/" GIT_CEILING_DIRECTORIES="$TRASH_ROOT" test_fail subdir_ceil_at_trash GIT_CEILING_DIRECTORIES="$TRASH_ROOT/" test_fail subdir_ceil_at_trash_slash GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub" test_fail subdir_ceil_at_sub GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub/" test_fail subdir_ceil_at_sub_slash if test_have_prereq SYMLINKS then GIT_CEILING_DIRECTORIES="$TRASH_ROOT/top" test_fail subdir_ceil_at_top GIT_CEILING_DIRECTORIES="$TRASH_ROOT/top/" test_fail subdir_ceil_at_top_slash GIT_CEILING_DIRECTORIES="$PATH_SEP$TRASH_ROOT/top" test_prefix subdir_ceil_at_top_no_resolve "sub/dir/" GIT_CEILING_DIRECTORIES="$PATH_SEP$TRASH_ROOT/top/" test_prefix subdir_ceil_at_top_slash_no_resolve "sub/dir/" fi GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub/dir" test_prefix subdir_ceil_at_subdir "sub/dir/" GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub/dir/" test_prefix subdir_ceil_at_subdir_slash "sub/dir/" GIT_CEILING_DIRECTORIES="$TRASH_ROOT/su" test_prefix subdir_ceil_at_su "sub/dir/" GIT_CEILING_DIRECTORIES="$TRASH_ROOT/su/" test_prefix subdir_ceil_at_su_slash "sub/dir/" GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub/di" test_prefix subdir_ceil_at_sub_di "sub/dir/" GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub/di" test_prefix subdir_ceil_at_sub_di_slash "sub/dir/" GIT_CEILING_DIRECTORIES="$TRASH_ROOT/subdi" test_prefix subdir_ceil_at_subdi "sub/dir/" GIT_CEILING_DIRECTORIES="$TRASH_ROOT/subdi" test_prefix subdir_ceil_at_subdi_slash "sub/dir/" GIT_CEILING_DIRECTORIES="/foo$PATH_SEP$TRASH_ROOT/sub" test_fail second_of_two GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub$PATH_SEP/bar" test_fail first_of_two GIT_CEILING_DIRECTORIES="/foo$PATH_SEP$TRASH_ROOT/sub$PATH_SEP/bar" test_fail second_of_three GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub" GIT_DIR=../../.git export GIT_DIR test_prefix git_dir_specified "" unset GIT_DIR cd ../.. || exit 1 mkdir -p s/d || exit 1 cd s/d || exit 1 unset GIT_CEILING_DIRECTORIES test_prefix sd_no_ceil "s/d/" export GIT_CEILING_DIRECTORIES GIT_CEILING_DIRECTORIES="" test_prefix sd_ceil_empty "s/d/" GIT_CEILING_DIRECTORIES="$TRASH_ROOT" test_fail sd_ceil_at_trash GIT_CEILING_DIRECTORIES="$TRASH_ROOT/" test_fail sd_ceil_at_trash_slash GIT_CEILING_DIRECTORIES="$TRASH_ROOT/s" test_fail sd_ceil_at_s GIT_CEILING_DIRECTORIES="$TRASH_ROOT/s/" test_fail sd_ceil_at_s_slash GIT_CEILING_DIRECTORIES="$TRASH_ROOT/s/d" test_prefix sd_ceil_at_sd "s/d/" GIT_CEILING_DIRECTORIES="$TRASH_ROOT/s/d/" test_prefix sd_ceil_at_sd_slash "s/d/" GIT_CEILING_DIRECTORIES="$TRASH_ROOT/su" test_prefix sd_ceil_at_su "s/d/" GIT_CEILING_DIRECTORIES="$TRASH_ROOT/su/" test_prefix sd_ceil_at_su_slash "s/d/" GIT_CEILING_DIRECTORIES="$TRASH_ROOT/s/di" test_prefix sd_ceil_at_s_di "s/d/" GIT_CEILING_DIRECTORIES="$TRASH_ROOT/s/di" test_prefix sd_ceil_at_s_di_slash "s/d/" GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sdi" test_prefix sd_ceil_at_sdi "s/d/" GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sdi" test_prefix sd_ceil_at_sdi_slash "s/d/" test_done