@@ -4260,4 +4260,273 @@ test_expect_failure '#30: at root' '
4260
4260
)
4261
4261
'
4262
4262
4263
+ #
4264
+ # case #31
4265
+ #
4266
+ # ###########################################################
4267
+ #
4268
+ # Input:
4269
+ #
4270
+ # - GIT_WORK_TREE is set
4271
+ # - GIT_DIR is set
4272
+ # - core.worktree is set
4273
+ # - .git is a file
4274
+ # - core.bare is set
4275
+ #
4276
+ # Output:
4277
+ #
4278
+ # #23 except git_dir is set according to .git file
4279
+
4280
+ test_expect_success ' #31: setup' '
4281
+ unset GIT_DIR GIT_WORK_TREE &&
4282
+ mkdir 31 31/sub 31/sub/sub 31.wt 31.wt/sub 31/wt 31/wt/sub &&
4283
+ cd 31 &&
4284
+ git init &&
4285
+ git config core.bare true &&
4286
+ git config core.worktree non-existent &&
4287
+ mv .git ../31.git &&
4288
+ echo gitdir: ../31.git >.git &&
4289
+ cd ..
4290
+ '
4291
+
4292
+ test_expect_failure ' #31: GIT_DIR(rel), GIT_WORK_TREE=root at root' '
4293
+ cat >31/expected <<EOF &&
4294
+ setup: git_dir: $TRASH_DIRECTORY/31.git
4295
+ setup: worktree: $TRASH_DIRECTORY/31
4296
+ setup: cwd: $TRASH_DIRECTORY/31
4297
+ setup: prefix: (null)
4298
+ EOF
4299
+ test_repo 31 .git "$TRASH_DIRECTORY/31"
4300
+ '
4301
+
4302
+ test_expect_failure ' #31: GIT_DIR(rel), GIT_WORK_TREE=root(rel) at root' '
4303
+ cat >31/expected <<EOF &&
4304
+ setup: git_dir: $TRASH_DIRECTORY/31.git
4305
+ setup: worktree: $TRASH_DIRECTORY/31
4306
+ setup: cwd: $TRASH_DIRECTORY/31
4307
+ setup: prefix: (null)
4308
+ EOF
4309
+ test_repo 31 .git .
4310
+ '
4311
+
4312
+ test_expect_failure ' #31: GIT_DIR, GIT_WORK_TREE=root at root' '
4313
+ cat >31/expected <<EOF &&
4314
+ setup: git_dir: $TRASH_DIRECTORY/31.git
4315
+ setup: worktree: $TRASH_DIRECTORY/31
4316
+ setup: cwd: $TRASH_DIRECTORY/31
4317
+ setup: prefix: (null)
4318
+ EOF
4319
+ test_repo 31 "$TRASH_DIRECTORY/31/.git" "$TRASH_DIRECTORY/31"
4320
+ '
4321
+
4322
+ test_expect_failure ' #31: GIT_DIR, GIT_WORK_TREE=root(rel) at root' '
4323
+ cat >31/expected <<EOF &&
4324
+ setup: git_dir: $TRASH_DIRECTORY/31.git
4325
+ setup: worktree: $TRASH_DIRECTORY/31
4326
+ setup: cwd: $TRASH_DIRECTORY/31
4327
+ setup: prefix: (null)
4328
+ EOF
4329
+ test_repo 31 "$TRASH_DIRECTORY/31/.git" .
4330
+ '
4331
+
4332
+ test_expect_failure ' #31: GIT_DIR(rel), GIT_WORKTREE=root in subdir' '
4333
+ cat >31/sub/sub/expected <<EOF &&
4334
+ setup: git_dir: $TRASH_DIRECTORY/31.git
4335
+ setup: worktree: $TRASH_DIRECTORY/31
4336
+ setup: cwd: $TRASH_DIRECTORY/31
4337
+ setup: prefix: sub/sub/
4338
+ EOF
4339
+ test_repo 31/sub/sub ../../.git "$TRASH_DIRECTORY/31"
4340
+ '
4341
+
4342
+ test_expect_failure ' #31: GIT_DIR(rel), GIT_WORKTREE=root(rel) in subdir' '
4343
+ cat >31/sub/sub/expected <<EOF &&
4344
+ setup: git_dir: $TRASH_DIRECTORY/31.git
4345
+ setup: worktree: $TRASH_DIRECTORY/31
4346
+ setup: cwd: $TRASH_DIRECTORY/31
4347
+ setup: prefix: sub/sub/
4348
+ EOF
4349
+ test_repo 31/sub/sub ../../.git ../..
4350
+ '
4351
+
4352
+ test_expect_failure ' #31: GIT_DIR, GIT_WORKTREE=root in subdir' '
4353
+ cat >31/sub/expected <<EOF &&
4354
+ setup: git_dir: $TRASH_DIRECTORY/31.git
4355
+ setup: worktree: $TRASH_DIRECTORY/31
4356
+ setup: cwd: $TRASH_DIRECTORY/31
4357
+ setup: prefix: sub/
4358
+ EOF
4359
+ test_repo 31/sub "$TRASH_DIRECTORY/31/.git" "$TRASH_DIRECTORY/31"
4360
+ '
4361
+
4362
+ test_expect_failure ' #31: GIT_DIR, GIT_WORKTREE=root(rel) in subdir' '
4363
+ cat >31/sub/sub/expected <<EOF &&
4364
+ setup: git_dir: $TRASH_DIRECTORY/31.git
4365
+ setup: worktree: $TRASH_DIRECTORY/31
4366
+ setup: cwd: $TRASH_DIRECTORY/31
4367
+ setup: prefix: sub/sub/
4368
+ EOF
4369
+ test_repo 31/sub/sub "$TRASH_DIRECTORY/31/.git" ../..
4370
+ '
4371
+
4372
+ test_expect_failure ' #31: GIT_DIR(rel), GIT_WORK_TREE=wt at root' '
4373
+ cat >31/expected <<EOF &&
4374
+ setup: git_dir: $TRASH_DIRECTORY/31.git
4375
+ setup: worktree: $TRASH_DIRECTORY/31/wt
4376
+ setup: cwd: $TRASH_DIRECTORY/31
4377
+ setup: prefix: (null)
4378
+ EOF
4379
+ test_repo 31 .git "$TRASH_DIRECTORY/31/wt"
4380
+ '
4381
+
4382
+ test_expect_failure ' #31: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) at root' '
4383
+ cat >31/expected <<EOF &&
4384
+ setup: git_dir: $TRASH_DIRECTORY/31.git
4385
+ setup: worktree: $TRASH_DIRECTORY/31/wt
4386
+ setup: cwd: $TRASH_DIRECTORY/31
4387
+ setup: prefix: (null)
4388
+ EOF
4389
+ test_repo 31 .git wt
4390
+ '
4391
+
4392
+ test_expect_failure ' #31: GIT_DIR, GIT_WORK_TREE=wt(rel) at root' '
4393
+ cat >31/expected <<EOF &&
4394
+ setup: git_dir: $TRASH_DIRECTORY/31.git
4395
+ setup: worktree: $TRASH_DIRECTORY/31/wt
4396
+ setup: cwd: $TRASH_DIRECTORY/31
4397
+ setup: prefix: (null)
4398
+ EOF
4399
+ test_repo 31 "$TRASH_DIRECTORY/31/.git" wt
4400
+ '
4401
+
4402
+ test_expect_failure ' #31: GIT_DIR, GIT_WORK_TREE=wt at root' '
4403
+ cat >31/expected <<EOF &&
4404
+ setup: git_dir: $TRASH_DIRECTORY/31.git
4405
+ setup: worktree: $TRASH_DIRECTORY/31/wt
4406
+ setup: cwd: $TRASH_DIRECTORY/31
4407
+ setup: prefix: (null)
4408
+ EOF
4409
+ test_repo 31 "$TRASH_DIRECTORY/31/.git" "$TRASH_DIRECTORY/31/wt"
4410
+ '
4411
+
4412
+ test_expect_failure ' #31: GIT_DIR(rel), GIT_WORK_TREE=wt in subdir' '
4413
+ cat >31/sub/sub/expected <<EOF &&
4414
+ setup: git_dir: $TRASH_DIRECTORY/31.git
4415
+ setup: worktree: $TRASH_DIRECTORY/31/wt
4416
+ setup: cwd: $TRASH_DIRECTORY/31/sub/sub
4417
+ setup: prefix: (null)
4418
+ EOF
4419
+ test_repo 31/sub/sub ../../.git "$TRASH_DIRECTORY/31/wt"
4420
+ '
4421
+
4422
+ test_expect_failure ' #31: GIT_DIR(rel), GIT_WORK_TREE=wt(rel) in subdir' '
4423
+ cat >31/sub/sub/expected <<EOF &&
4424
+ setup: git_dir: $TRASH_DIRECTORY/31.git
4425
+ setup: worktree: $TRASH_DIRECTORY/31/wt
4426
+ setup: cwd: $TRASH_DIRECTORY/31/sub/sub
4427
+ setup: prefix: (null)
4428
+ EOF
4429
+ test_repo 31/sub/sub ../../.git ../../wt
4430
+ '
4431
+
4432
+ test_expect_failure ' #31: GIT_DIR, GIT_WORK_TREE=wt(rel) in subdir' '
4433
+ cat >31/sub/sub/expected <<EOF &&
4434
+ setup: git_dir: $TRASH_DIRECTORY/31.git
4435
+ setup: worktree: $TRASH_DIRECTORY/31/wt
4436
+ setup: cwd: $TRASH_DIRECTORY/31/sub/sub
4437
+ setup: prefix: (null)
4438
+ EOF
4439
+ test_repo 31/sub/sub "$TRASH_DIRECTORY/31/.git" ../../wt
4440
+ '
4441
+
4442
+ test_expect_failure ' #31: GIT_DIR, GIT_WORK_TREE=wt in subdir' '
4443
+ cat >31/sub/sub/expected <<EOF &&
4444
+ setup: git_dir: $TRASH_DIRECTORY/31.git
4445
+ setup: worktree: $TRASH_DIRECTORY/31/wt
4446
+ setup: cwd: $TRASH_DIRECTORY/31/sub/sub
4447
+ setup: prefix: (null)
4448
+ EOF
4449
+ test_repo 31/sub/sub "$TRASH_DIRECTORY/31/.git" "$TRASH_DIRECTORY/31/wt"
4450
+ '
4451
+
4452
+ test_expect_failure ' #31: GIT_DIR(rel), GIT_WORK_TREE=.. at root' '
4453
+ cat >31/expected <<EOF &&
4454
+ setup: git_dir: $TRASH_DIRECTORY/31.git
4455
+ setup: worktree: $TRASH_DIRECTORY
4456
+ setup: cwd: $TRASH_DIRECTORY
4457
+ setup: prefix: 31/
4458
+ EOF
4459
+ test_repo 31 .git "$TRASH_DIRECTORY"
4460
+ '
4461
+
4462
+ test_expect_failure ' #31: GIT_DIR(rel), GIT_WORK_TREE=..(rel) at root' '
4463
+ cat >31/expected <<EOF &&
4464
+ setup: git_dir: $TRASH_DIRECTORY/31.git
4465
+ setup: worktree: $TRASH_DIRECTORY
4466
+ setup: cwd: $TRASH_DIRECTORY
4467
+ setup: prefix: 31/
4468
+ EOF
4469
+ test_repo 31 .git ..
4470
+ '
4471
+
4472
+ test_expect_failure ' #31: GIT_DIR, GIT_WORK_TREE=..(rel) at root' '
4473
+ cat >31/expected <<EOF &&
4474
+ setup: git_dir: $TRASH_DIRECTORY/31.git
4475
+ setup: worktree: $TRASH_DIRECTORY
4476
+ setup: cwd: $TRASH_DIRECTORY
4477
+ setup: prefix: 31/
4478
+ EOF
4479
+ test_repo 31 "$TRASH_DIRECTORY/31/.git" ..
4480
+ '
4481
+
4482
+ test_expect_failure ' #31: GIT_DIR, GIT_WORK_TREE=.. at root' '
4483
+ cat >31/expected <<EOF &&
4484
+ setup: git_dir: $TRASH_DIRECTORY/31.git
4485
+ setup: worktree: $TRASH_DIRECTORY
4486
+ setup: cwd: $TRASH_DIRECTORY
4487
+ setup: prefix: 31/
4488
+ EOF
4489
+ test_repo 31 "$TRASH_DIRECTORY/31/.git" "$TRASH_DIRECTORY"
4490
+ '
4491
+
4492
+ test_expect_failure ' #31: GIT_DIR(rel), GIT_WORK_TREE=.. in subdir' '
4493
+ cat >31/sub/sub/expected <<EOF &&
4494
+ setup: git_dir: $TRASH_DIRECTORY/31.git
4495
+ setup: worktree: $TRASH_DIRECTORY
4496
+ setup: cwd: $TRASH_DIRECTORY
4497
+ setup: prefix: 31/sub/sub/
4498
+ EOF
4499
+ test_repo 31/sub/sub ../../.git "$TRASH_DIRECTORY"
4500
+ '
4501
+
4502
+ test_expect_failure ' #31: GIT_DIR(rel), GIT_WORK_TREE=..(rel) in subdir' '
4503
+ cat >31/sub/sub/expected <<EOF &&
4504
+ setup: git_dir: $TRASH_DIRECTORY/31.git
4505
+ setup: worktree: $TRASH_DIRECTORY
4506
+ setup: cwd: $TRASH_DIRECTORY
4507
+ setup: prefix: 31/sub/sub/
4508
+ EOF
4509
+ test_repo 31/sub/sub ../../.git ../../..
4510
+ '
4511
+
4512
+ test_expect_failure ' #31: GIT_DIR, GIT_WORK_TREE=..(rel) in subdir' '
4513
+ cat >31/sub/sub/expected <<EOF &&
4514
+ setup: git_dir: $TRASH_DIRECTORY/31.git
4515
+ setup: worktree: $TRASH_DIRECTORY
4516
+ setup: cwd: $TRASH_DIRECTORY
4517
+ setup: prefix: 31/sub/sub/
4518
+ EOF
4519
+ test_repo 31/sub/sub "$TRASH_DIRECTORY/31/.git" ../../../
4520
+ '
4521
+
4522
+ test_expect_failure ' #31: GIT_DIR, GIT_WORK_TREE=.. in subdir' '
4523
+ cat >31/sub/sub/expected <<EOF &&
4524
+ setup: git_dir: $TRASH_DIRECTORY/31.git
4525
+ setup: worktree: $TRASH_DIRECTORY
4526
+ setup: cwd: $TRASH_DIRECTORY
4527
+ setup: prefix: 31/sub/sub/
4528
+ EOF
4529
+ test_repo 31/sub/sub "$TRASH_DIRECTORY/31/.git" "$TRASH_DIRECTORY"
4530
+ '
4531
+
4263
4532
test_done
0 commit comments