@@ -3084,4 +3084,341 @@ EOF
3084
3084
test_repo 21/sub
3085
3085
'
3086
3086
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
+
3087
3424
test_done
0 commit comments