@@ -3084,4 +3084,341 @@ EOF
30843084 test_repo 21/sub
30853085'
30863086
3087+ #
3088+ # case #22.1
3089+ #
3090+ # ###########################################################
3091+ #
3092+ # Input:
3093+ #
3094+ # - GIT_WORK_TREE is not set
3095+ # - GIT_DIR is set
3096+ # - core.worktree is set
3097+ # - .git is a directory
3098+ # - cwd is inside .git
3099+ #
3100+ # Output:
3101+ #
3102+ # bare attribute is ignored
3103+ #
3104+ # - worktree is at core.worktree
3105+ # - cwd is at worktree root
3106+ # - prefix is calculated
3107+ # - git_dir is at $GIT_DIR
3108+ # - cwd can be outside worktree
3109+
3110+ test_expect_success ' #22.1: setup' '
3111+ unset GIT_DIR GIT_WORK_TREE &&
3112+ mkdir 22 &&
3113+ cd 22 &&
3114+ git init &&
3115+ mkdir .git/sub .git/wt .git/wt/sub &&
3116+ cd ..
3117+ '
3118+
3119+ test_expect_success ' #22.1: GIT_DIR(rel), core.worktree=. at .git' '
3120+ cat >22/.git/expected <<EOF &&
3121+ setup: git_dir: .
3122+ setup: worktree: $TRASH_DIRECTORY/22/.git
3123+ setup: cwd: $TRASH_DIRECTORY/22/.git
3124+ setup: prefix: (null)
3125+ EOF
3126+ git config --file="$TRASH_DIRECTORY/22/.git/config" core.worktree "$TRASH_DIRECTORY/22/.git" &&
3127+ test_repo 22/.git .
3128+ '
3129+
3130+ test_expect_success ' #22.1: GIT_DIR(rel), core.worktree=.(rel) at .git' '
3131+ cat >22/.git/expected <<EOF &&
3132+ setup: git_dir: .
3133+ setup: worktree: $TRASH_DIRECTORY/22/.git
3134+ setup: cwd: $TRASH_DIRECTORY/22/.git
3135+ setup: prefix: (null)
3136+ EOF
3137+ git config --file="$TRASH_DIRECTORY/22/.git/config" core.worktree . &&
3138+ test_repo 22/.git .
3139+ '
3140+
3141+ test_expect_success ' #22.1: GIT_DIR, core.worktree=. at .git' '
3142+ cat >22/.git/expected <<EOF &&
3143+ setup: git_dir: $TRASH_DIRECTORY/22/.git
3144+ setup: worktree: $TRASH_DIRECTORY/22/.git
3145+ setup: cwd: $TRASH_DIRECTORY/22/.git
3146+ setup: prefix: (null)
3147+ EOF
3148+ git config --file="$TRASH_DIRECTORY/22/.git/config" core.worktree "$TRASH_DIRECTORY/22/.git" &&
3149+ test_repo 22/.git "$TRASH_DIRECTORY/22/.git"
3150+ '
3151+
3152+ test_expect_success ' #22.1: GIT_DIR, core.worktree=.(rel) at root' '
3153+ cat >22/.git/expected <<EOF &&
3154+ setup: git_dir: $TRASH_DIRECTORY/22/.git
3155+ setup: worktree: $TRASH_DIRECTORY/22/.git
3156+ setup: cwd: $TRASH_DIRECTORY/22/.git
3157+ setup: prefix: (null)
3158+ EOF
3159+ git config --file="$TRASH_DIRECTORY/22/.git/config" core.worktree . &&
3160+ test_repo 22/.git "$TRASH_DIRECTORY/22/.git"
3161+ '
3162+
3163+ test_expect_failure ' #22.1: GIT_DIR(rel), core.worktree=. in .git/sub' '
3164+ cat >22/.git/sub/expected <<EOF &&
3165+ setup: git_dir: $TRASH_DIRECTORY/22/.git
3166+ setup: worktree: $TRASH_DIRECTORY/22/.git
3167+ setup: cwd: $TRASH_DIRECTORY/22/.git
3168+ setup: prefix: sub/
3169+ EOF
3170+ git config --file="$TRASH_DIRECTORY/22/.git/config" core.worktree "$TRASH_DIRECTORY/22/.git" &&
3171+ test_repo 22/.git/sub ..
3172+ '
3173+
3174+ test_expect_failure ' #22.1: GIT_DIR(rel), core.worktree=.(rel) in .git/sub' '
3175+ cat >22/.git/sub/expected <<EOF &&
3176+ setup: git_dir: $TRASH_DIRECTORY/22/.git
3177+ setup: worktree: $TRASH_DIRECTORY/22/.git
3178+ setup: cwd: $TRASH_DIRECTORY/22/.git
3179+ setup: prefix: sub/
3180+ EOF
3181+ git config --file="$TRASH_DIRECTORY/22/.git/config" core.worktree . &&
3182+ test_repo 22/.git/sub/ ..
3183+ '
3184+
3185+ test_expect_success ' #22.1: GIT_DIR, core.worktree=. in .git/sub' '
3186+ cat >22/.git/sub/expected <<EOF &&
3187+ setup: git_dir: $TRASH_DIRECTORY/22/.git
3188+ setup: worktree: $TRASH_DIRECTORY/22/.git
3189+ setup: cwd: $TRASH_DIRECTORY/22/.git
3190+ setup: prefix: sub/
3191+ EOF
3192+ git config --file="$TRASH_DIRECTORY/22/.git/config" core.worktree "$TRASH_DIRECTORY/22/.git" &&
3193+ test_repo 22/.git/sub "$TRASH_DIRECTORY/22/.git"
3194+ '
3195+
3196+ test_expect_success ' #22.1: GIT_DIR, core.worktree=.(rel) in .git/sub' '
3197+ cat >22/.git/sub/expected <<EOF &&
3198+ setup: git_dir: $TRASH_DIRECTORY/22/.git
3199+ setup: worktree: $TRASH_DIRECTORY/22/.git
3200+ setup: cwd: $TRASH_DIRECTORY/22/.git
3201+ setup: prefix: sub/
3202+ EOF
3203+ git config --file="$TRASH_DIRECTORY/22/.git/config" core.worktree . &&
3204+ test_repo 22/.git/sub "$TRASH_DIRECTORY/22/.git"
3205+ '
3206+
3207+ test_expect_success ' #22.1: GIT_DIR(rel), core.worktree=wt at .git' '
3208+ cat >22/.git/expected <<EOF &&
3209+ setup: git_dir: .
3210+ setup: worktree: $TRASH_DIRECTORY/22/.git/wt
3211+ setup: cwd: $TRASH_DIRECTORY/22/.git
3212+ setup: prefix: (null)
3213+ EOF
3214+ git config --file="$TRASH_DIRECTORY/22/.git/config" core.worktree "$TRASH_DIRECTORY/22/.git/wt" &&
3215+ test_repo 22/.git .
3216+ '
3217+
3218+ test_expect_success ' #22.1: GIT_DIR(rel), core.worktree=wt(rel) at .git' '
3219+ cat >22/.git/expected <<EOF &&
3220+ setup: git_dir: .
3221+ setup: worktree: $TRASH_DIRECTORY/22/.git/wt
3222+ setup: cwd: $TRASH_DIRECTORY/22/.git
3223+ setup: prefix: (null)
3224+ EOF
3225+ git config --file="$TRASH_DIRECTORY/22/.git/config" core.worktree wt &&
3226+ test_repo 22/.git .
3227+ '
3228+
3229+ test_expect_success ' #22.1: GIT_DIR, core.worktree=wt(rel) at .git' '
3230+ cat >22/.git/expected <<EOF &&
3231+ setup: git_dir: $TRASH_DIRECTORY/22/.git
3232+ setup: worktree: $TRASH_DIRECTORY/22/.git/wt
3233+ setup: cwd: $TRASH_DIRECTORY/22/.git
3234+ setup: prefix: (null)
3235+ EOF
3236+ git config --file="$TRASH_DIRECTORY/22/.git/config" core.worktree wt &&
3237+ test_repo 22/.git "$TRASH_DIRECTORY/22/.git"
3238+ '
3239+
3240+ test_expect_success ' #22.1: GIT_DIR, core.worktree=wt at .git' '
3241+ cat >22/.git/expected <<EOF &&
3242+ setup: git_dir: $TRASH_DIRECTORY/22/.git
3243+ setup: worktree: $TRASH_DIRECTORY/22/.git/wt
3244+ setup: cwd: $TRASH_DIRECTORY/22/.git
3245+ setup: prefix: (null)
3246+ EOF
3247+ git config --file="$TRASH_DIRECTORY/22/.git/config" core.worktree "$TRASH_DIRECTORY/22/.git/wt" &&
3248+ test_repo 22/.git "$TRASH_DIRECTORY/22/.git"
3249+ '
3250+
3251+ test_expect_success ' #22.1: GIT_DIR(rel), core.worktree=wt in .git/sub' '
3252+ cat >22/.git/sub/expected <<EOF &&
3253+ setup: git_dir: ..
3254+ setup: worktree: $TRASH_DIRECTORY/22/.git/wt
3255+ setup: cwd: $TRASH_DIRECTORY/22/.git/sub
3256+ setup: prefix: (null)
3257+ EOF
3258+ git config --file="$TRASH_DIRECTORY/22/.git/config" core.worktree "$TRASH_DIRECTORY/22/.git/wt" &&
3259+ test_repo 22/.git/sub ..
3260+ '
3261+
3262+ test_expect_success ' #22.1: GIT_DIR(rel), core.worktree=wt(rel) in .git/sub' '
3263+ cat >22/.git/sub/expected <<EOF &&
3264+ setup: git_dir: ..
3265+ setup: worktree: $TRASH_DIRECTORY/22/.git/wt
3266+ setup: cwd: $TRASH_DIRECTORY/22/.git/sub
3267+ setup: prefix: (null)
3268+ EOF
3269+ git config --file="$TRASH_DIRECTORY/22/.git/config" core.worktree wt &&
3270+ test_repo 22/.git/sub ..
3271+ '
3272+
3273+ test_expect_success ' #22.1: GIT_DIR, core.worktree=wt(rel) in .git/sub' '
3274+ cat >22/.git/sub/expected <<EOF &&
3275+ setup: git_dir: $TRASH_DIRECTORY/22/.git
3276+ setup: worktree: $TRASH_DIRECTORY/22/.git/wt
3277+ setup: cwd: $TRASH_DIRECTORY/22/.git/sub
3278+ setup: prefix: (null)
3279+ EOF
3280+ git config --file="$TRASH_DIRECTORY/22/.git/config" core.worktree wt &&
3281+ test_repo 22/.git/sub "$TRASH_DIRECTORY/22/.git"
3282+ '
3283+
3284+ test_expect_success ' #22.1: GIT_DIR, core.worktree=wt in .git/sub' '
3285+ cat >22/.git/sub/expected <<EOF &&
3286+ setup: git_dir: $TRASH_DIRECTORY/22/.git
3287+ setup: worktree: $TRASH_DIRECTORY/22/.git/wt
3288+ setup: cwd: $TRASH_DIRECTORY/22/.git/sub
3289+ setup: prefix: (null)
3290+ EOF
3291+ git config --file="$TRASH_DIRECTORY/22/.git/config" core.worktree "$TRASH_DIRECTORY/22/.git/wt" &&
3292+ test_repo 22/.git/sub "$TRASH_DIRECTORY/22/.git"
3293+ '
3294+
3295+ test_expect_failure ' #22.1: GIT_DIR(rel), core.worktree=.. at .git' '
3296+ cat >22/.git/expected <<EOF &&
3297+ setup: git_dir: $TRASH_DIRECTORY/22/.git
3298+ setup: worktree: $TRASH_DIRECTORY/22
3299+ setup: cwd: $TRASH_DIRECTORY/22
3300+ setup: prefix: .git/
3301+ EOF
3302+ git config --file="$TRASH_DIRECTORY/22/.git/config" core.worktree "$TRASH_DIRECTORY/22" &&
3303+ test_repo 22/.git .
3304+ '
3305+
3306+ test_expect_failure ' #22.1: GIT_DIR(rel), core.worktree=..(rel) at .git' '
3307+ cat >22/.git/expected <<EOF &&
3308+ setup: git_dir: $TRASH_DIRECTORY/22/.git
3309+ setup: worktree: $TRASH_DIRECTORY/22
3310+ setup: cwd: $TRASH_DIRECTORY/22
3311+ setup: prefix: .git/
3312+ EOF
3313+ git config --file="$TRASH_DIRECTORY/22/.git/config" core.worktree .. &&
3314+ test_repo 22/.git .
3315+ '
3316+
3317+ test_expect_success ' #22.1: GIT_DIR, core.worktree=..(rel) at .git' '
3318+ cat >22/.git/expected <<EOF &&
3319+ setup: git_dir: $TRASH_DIRECTORY/22/.git
3320+ setup: worktree: $TRASH_DIRECTORY/22
3321+ setup: cwd: $TRASH_DIRECTORY/22
3322+ setup: prefix: .git/
3323+ EOF
3324+ git config --file="$TRASH_DIRECTORY/22/.git/config" core.worktree .. &&
3325+ test_repo 22/.git "$TRASH_DIRECTORY/22/.git"
3326+ '
3327+
3328+ test_expect_success ' #22.1: GIT_DIR, core.worktree=.. at .git' '
3329+ cat >22/.git/expected <<EOF &&
3330+ setup: git_dir: $TRASH_DIRECTORY/22/.git
3331+ setup: worktree: $TRASH_DIRECTORY/22
3332+ setup: cwd: $TRASH_DIRECTORY/22
3333+ setup: prefix: .git/
3334+ EOF
3335+ git config --file="$TRASH_DIRECTORY/22/.git/config" core.worktree "$TRASH_DIRECTORY/22" &&
3336+ test_repo 22/.git "$TRASH_DIRECTORY/22/.git"
3337+ '
3338+
3339+ test_expect_failure ' #22.1: GIT_DIR(rel), core.worktree=.. in .git/sub' '
3340+ cat >22/.git/sub/expected <<EOF &&
3341+ setup: git_dir: $TRASH_DIRECTORY/22/.git
3342+ setup: worktree: $TRASH_DIRECTORY/22
3343+ setup: cwd: $TRASH_DIRECTORY/22
3344+ setup: prefix: .git/sub/
3345+ EOF
3346+ git config --file="$TRASH_DIRECTORY/22/.git/config" core.worktree "$TRASH_DIRECTORY/22" &&
3347+ test_repo 22/.git/sub ..
3348+ '
3349+
3350+ test_expect_failure ' #22.1: GIT_DIR(rel), core.worktree=..(rel) in .git/sub' '
3351+ cat >22/.git/sub/expected <<EOF &&
3352+ setup: git_dir: $TRASH_DIRECTORY/22/.git
3353+ setup: worktree: $TRASH_DIRECTORY/22
3354+ setup: cwd: $TRASH_DIRECTORY/22
3355+ setup: prefix: .git/sub/
3356+ EOF
3357+ git config --file="$TRASH_DIRECTORY/22/.git/config" core.worktree .. &&
3358+ test_repo 22/.git/sub ..
3359+ '
3360+
3361+ test_expect_success ' #22.1: GIT_DIR, core.worktree=..(rel) in .git/sub' '
3362+ cat >22/.git/sub/expected <<EOF &&
3363+ setup: git_dir: $TRASH_DIRECTORY/22/.git
3364+ setup: worktree: $TRASH_DIRECTORY/22
3365+ setup: cwd: $TRASH_DIRECTORY/22
3366+ setup: prefix: .git/sub/
3367+ EOF
3368+ git config --file="$TRASH_DIRECTORY/22/.git/config" core.worktree .. &&
3369+ test_repo 22/.git/sub "$TRASH_DIRECTORY/22/.git"
3370+ '
3371+
3372+ test_expect_success ' #22.1: GIT_DIR, core.worktree=.. in .git/sub' '
3373+ cat >22/.git/sub/expected <<EOF &&
3374+ setup: git_dir: $TRASH_DIRECTORY/22/.git
3375+ setup: worktree: $TRASH_DIRECTORY/22
3376+ setup: cwd: $TRASH_DIRECTORY/22
3377+ setup: prefix: .git/sub/
3378+ EOF
3379+ git config --file="$TRASH_DIRECTORY/22/.git/config" core.worktree "$TRASH_DIRECTORY/22" &&
3380+ test_repo 22/.git/sub "$TRASH_DIRECTORY/22/.git"
3381+ '
3382+
3383+ #
3384+ # case #22.2
3385+ #
3386+ # ###########################################################
3387+ #
3388+ # Input:
3389+ #
3390+ # - GIT_WORK_TREE is not set
3391+ # - GIT_DIR is set
3392+ # - core.worktree is set
3393+ # - .git is a directory
3394+ # - core.bare is set
3395+ #
3396+ # Output:
3397+ #
3398+ # core.worktree and core.bare conflict, won't fly.
3399+
3400+ test_expect_success ' #22.2: setup' '
3401+ git config --file="$TRASH_DIRECTORY/22/.git/config" core.bare true
3402+ '
3403+
3404+ test_expect_failure ' #22.2: at .git' '
3405+ (
3406+ cd 22/.git &&
3407+ GIT_DIR=. &&
3408+ export GIT_DIR &&
3409+ test_must_fail git symbolic-ref HEAD 2>result &&
3410+ grep "core.bare and core.worktree do not make sense" result
3411+ )
3412+ '
3413+
3414+ test_expect_failure ' #22.2: at root' '
3415+ (
3416+ cd 22 &&
3417+ GIT_DIR=.git &&
3418+ export GIT_DIR &&
3419+ test_must_fail git symbolic-ref HEAD 2>result &&
3420+ grep "core.bare and core.worktree do not make sense" result
3421+ )
3422+ '
3423+
30873424test_done
0 commit comments