@@ -4260,4 +4260,273 @@ test_expect_failure '#30: at root' '
42604260 )
42614261'
42624262
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+
42634532test_done
0 commit comments