diff options
Diffstat (limited to 't/t2400-worktree-add.sh')
-rwxr-xr-x | t/t2400-worktree-add.sh | 122 |
1 files changed, 86 insertions, 36 deletions
diff --git a/t/t2400-worktree-add.sh b/t/t2400-worktree-add.sh index e819ba741e..37ad79470f 100755 --- a/t/t2400-worktree-add.sh +++ b/t/t2400-worktree-add.sh @@ -2,6 +2,9 @@ test_description='test git worktree add' +GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main +export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME + . ./test-lib.sh . "$TEST_DIRECTORY"/lib-rebase.sh @@ -12,12 +15,12 @@ test_expect_success 'setup' ' test_expect_success '"add" an existing worktree' ' mkdir -p existing/subtree && - test_must_fail git worktree add --detach existing master + test_must_fail git worktree add --detach existing main ' test_expect_success '"add" an existing empty worktree' ' mkdir existing_empty && - git worktree add --detach existing_empty master + git worktree add --detach existing_empty main ' test_expect_success '"add" using shorthand - fails when no previous branch' ' @@ -29,7 +32,7 @@ test_expect_success '"add" using - shorthand' ' echo hello >myworld && git add myworld && git commit -m myworld && - git checkout master && + git checkout main && git worktree add short-hand - && echo refs/heads/newbranch >expect && git -C short-hand rev-parse --symbolic-full-name HEAD >actual && @@ -37,7 +40,7 @@ test_expect_success '"add" using - shorthand' ' ' test_expect_success '"add" refuses to checkout locked branch' ' - test_must_fail git worktree add zere master && + test_must_fail git worktree add zere main && ! test -d zere && ! test -d .git/worktrees/zere ' @@ -46,13 +49,13 @@ test_expect_success 'checking out paths not complaining about linked checkouts' ( cd existing_empty && echo dirty >>init.t && - git checkout master -- init.t + git checkout main -- init.t ) ' test_expect_success '"add" worktree' ' git rev-parse HEAD >expect && - git worktree add --detach here master && + git worktree add --detach here main && ( cd here && test_cmp ../init.t init.t && @@ -64,16 +67,30 @@ test_expect_success '"add" worktree' ' ' test_expect_success '"add" worktree with lock' ' - git rev-parse HEAD >expect && - git worktree add --detach --lock here-with-lock master && + git worktree add --detach --lock here-with-lock main && + test_when_finished "git worktree unlock here-with-lock || :" && test -f .git/worktrees/here-with-lock/locked ' +test_expect_success '"add" worktree with lock and reason' ' + lock_reason="why not" && + git worktree add --detach --lock --reason "$lock_reason" here-with-lock-reason main && + test_when_finished "git worktree unlock here-with-lock-reason || :" && + test -f .git/worktrees/here-with-lock-reason/locked && + echo "$lock_reason" >expect && + test_cmp expect .git/worktrees/here-with-lock-reason/locked +' + +test_expect_success '"add" worktree with reason but no lock' ' + test_must_fail git worktree add --detach --reason "why not" here-with-reason-only main && + test_path_is_missing .git/worktrees/here-with-reason-only/locked +' + test_expect_success '"add" worktree from a subdir' ' ( mkdir sub && cd sub && - git worktree add --detach here master && + git worktree add --detach here main && cd here && test_cmp ../../init.t init.t ) @@ -82,19 +99,19 @@ test_expect_success '"add" worktree from a subdir' ' test_expect_success '"add" from a linked checkout' ' ( cd here && - git worktree add --detach nested-here master && + git worktree add --detach nested-here main && cd nested-here && git fsck ) ' test_expect_success '"add" worktree creating new branch' ' - git worktree add -b newmaster there master && + git worktree add -b newmain there main && ( cd there && test_cmp ../init.t init.t && git symbolic-ref HEAD >actual && - echo refs/heads/newmaster >expect && + echo refs/heads/newmain >expect && test_cmp expect actual && git fsck ) @@ -103,7 +120,7 @@ test_expect_success '"add" worktree creating new branch' ' test_expect_success 'die the same branch is already checked out' ' ( cd here && - test_must_fail git checkout newmaster + test_must_fail git checkout newmain ) ' @@ -112,20 +129,20 @@ test_expect_success SYMLINKS 'die the same branch is already checked out (symlin ref=$(git -C there symbolic-ref HEAD) && rm "$head" && ln -s "$ref" "$head" && - test_must_fail git -C here checkout newmaster + test_must_fail git -C here checkout newmain ' test_expect_success 'not die the same branch is already checked out' ' ( cd here && - git worktree add --force anothernewmaster newmaster + git worktree add --force anothernewmain newmain ) ' test_expect_success 'not die on re-checking out current branch' ' ( cd there && - git checkout newmaster + git checkout newmain ) ' @@ -133,14 +150,14 @@ test_expect_success '"add" from a bare repo' ' ( git clone --bare . bare && cd bare && - git worktree add -b bare-master ../there2 master + git worktree add -b bare-main ../there2 main ) ' test_expect_success 'checkout from a bare repo without "add"' ' ( cd bare && - test_must_fail git checkout master + test_must_fail git checkout main ) ' @@ -148,7 +165,7 @@ test_expect_success '"add" default branch of a bare repo' ' ( git clone --bare . bare2 && cd bare2 && - git worktree add ../there3 master + git worktree add ../there3 main ) ' @@ -165,7 +182,7 @@ test_expect_success 'checkout with grafts' ' EOF git log --format=%s -2 >actual && test_cmp expected actual && - git worktree add --detach grafted master && + git worktree add --detach grafted main && git --git-dir=grafted/.git log --format=%s -2 >actual && test_cmp expected actual ' @@ -226,34 +243,34 @@ test_expect_success '"add" no auto-vivify with --detach and <branch> omitted' ' ' test_expect_success '"add" -b/-B mutually exclusive' ' - test_must_fail git worktree add -b poodle -B poodle bamboo master + test_must_fail git worktree add -b poodle -B poodle bamboo main ' test_expect_success '"add" -b/--detach mutually exclusive' ' - test_must_fail git worktree add -b poodle --detach bamboo master + test_must_fail git worktree add -b poodle --detach bamboo main ' test_expect_success '"add" -B/--detach mutually exclusive' ' - test_must_fail git worktree add -B poodle --detach bamboo master + test_must_fail git worktree add -B poodle --detach bamboo main ' test_expect_success '"add -B" fails if the branch is checked out' ' - git rev-parse newmaster >before && - test_must_fail git worktree add -B newmaster bamboo master && - git rev-parse newmaster >after && + git rev-parse newmain >before && + test_must_fail git worktree add -B newmain bamboo main && + git rev-parse newmain >after && test_cmp before after ' test_expect_success 'add -B' ' - git worktree add -B poodle bamboo2 master^ && + git worktree add -B poodle bamboo2 main^ && git -C bamboo2 symbolic-ref HEAD >actual && echo refs/heads/poodle >expected && test_cmp expected actual && - test_cmp_rev master^ poodle + test_cmp_rev main^ poodle ' test_expect_success 'add --quiet' ' - git worktree add --quiet another-worktree master 2>actual && + git worktree add --quiet another-worktree main 2>actual && test_must_be_empty actual ' @@ -348,24 +365,24 @@ test_branch_upstream () { test_expect_success '--track sets up tracking' ' test_when_finished rm -rf track && - git worktree add --track -b track track master && - test_branch_upstream track . master + git worktree add --track -b track track main && + test_branch_upstream track . main ' # setup remote repository $1 and repository $2 with $1 set up as -# remote. The remote has two branches, master and foo. +# remote. The remote has two branches, main and foo. setup_remote_repo () { git init $1 && ( cd $1 && - test_commit $1_master && + test_commit $1_main && git checkout -b foo && test_commit upstream_foo ) && git init $2 && ( cd $2 && - test_commit $2_master && + test_commit $2_main && git remote add $1 ../$1 && git config remote.$1.fetch \ "refs/heads/*:refs/remotes/$1/*" && @@ -438,7 +455,7 @@ test_expect_success 'git worktree add does not match remote' ' cd foo && test_must_fail git config "branch.foo.remote" && test_must_fail git config "branch.foo.merge" && - ! test_cmp_rev refs/remotes/repo_a/foo refs/heads/foo + test_cmp_rev ! refs/remotes/repo_a/foo refs/heads/foo ) ' @@ -483,7 +500,7 @@ test_expect_success 'git worktree --no-guess-remote option overrides config' ' cd foo && test_must_fail git config "branch.foo.remote" && test_must_fail git config "branch.foo.merge" && - ! test_cmp_rev refs/remotes/repo_a/foo refs/heads/foo + test_cmp_rev ! refs/remotes/repo_a/foo refs/heads/foo ) ' @@ -570,6 +587,15 @@ test_expect_success '"add" an existing locked but missing worktree' ' git worktree add --force --force --detach gnoo ' +test_expect_success '"add" not tripped up by magic worktree matching"' ' + # if worktree "sub1/bar" exists, "git worktree add bar" in distinct + # directory `sub2` should not mistakenly complain that `bar` is an + # already-registered worktree + mkdir sub1 sub2 && + git -C sub1 --git-dir=../.git worktree add --detach bozo && + git -C sub2 --git-dir=../.git worktree add --detach bozo +' + test_expect_success FUNNYNAMES 'sanitize generated worktree name' ' git worktree add --detach ". weird*..?.lock.lock" && test -d .git/worktrees/---weird-.- @@ -587,4 +613,28 @@ test_expect_success '"add" should not fail because of another bad worktree' ' ) ' +test_expect_success '"add" with uninitialized submodule, with submodule.recurse unset' ' + test_create_repo submodule && + test_commit -C submodule first && + test_create_repo project && + git -C project submodule add ../submodule && + git -C project add submodule && + test_tick && + git -C project commit -m add_sub && + git clone project project-clone && + git -C project-clone worktree add ../project-2 +' +test_expect_success '"add" with uninitialized submodule, with submodule.recurse set' ' + git -C project-clone -c submodule.recurse worktree add ../project-3 +' + +test_expect_success '"add" with initialized submodule, with submodule.recurse unset' ' + git -C project-clone submodule update --init && + git -C project-clone worktree add ../project-4 +' + +test_expect_success '"add" with initialized submodule, with submodule.recurse set' ' + git -C project-clone -c submodule.recurse worktree add ../project-5 +' + test_done |