]> git.ipfire.org Git - thirdparty/git.git/blobdiff - t/t9902-completion.sh
Merge branch 'js/default-branch-name-tests-final-stretch'
[thirdparty/git.git] / t / t9902-completion.sh
index 50bf93dd81f42e152e7ded26ebb7644d2bb0022d..fb67262fc8fca55bb6a336064f18cd5e93ce593d 100755 (executable)
@@ -139,7 +139,7 @@ fi
 test_expect_success 'setup for __git_find_repo_path/__gitdir tests' '
        mkdir -p subdir/subsubdir &&
        mkdir -p non-repo &&
-       git init otherrepo
+       git init -b main otherrepo
 '
 
 test_expect_success '__git_find_repo_path - from command line (through $__git_dir)' '
@@ -617,12 +617,13 @@ test_expect_success '__git_is_configured_remote' '
 
 test_expect_success 'setup for ref completion' '
        git commit --allow-empty -m initial &&
+       git branch -M main &&
        git branch matching-branch &&
        git tag matching-tag &&
        (
                cd otherrepo &&
                git commit --allow-empty -m initial &&
-               git branch -m master master-in-other &&
+               git branch -m main main-in-other &&
                git branch branch-in-other &&
                git tag tag-in-other
        ) &&
@@ -635,10 +636,10 @@ test_expect_success 'setup for ref completion' '
 test_expect_success '__git_refs - simple' '
        cat >expected <<-EOF &&
        HEAD
-       master
+       main
        matching-branch
        other/branch-in-other
-       other/master-in-other
+       other/main-in-other
        matching-tag
        EOF
        (
@@ -650,10 +651,10 @@ test_expect_success '__git_refs - simple' '
 
 test_expect_success '__git_refs - full refs' '
        cat >expected <<-EOF &&
-       refs/heads/master
+       refs/heads/main
        refs/heads/matching-branch
        refs/remotes/other/branch-in-other
-       refs/remotes/other/master-in-other
+       refs/remotes/other/main-in-other
        refs/tags/matching-tag
        EOF
        (
@@ -667,7 +668,7 @@ test_expect_success '__git_refs - repo given on the command line' '
        cat >expected <<-EOF &&
        HEAD
        branch-in-other
-       master-in-other
+       main-in-other
        tag-in-other
        EOF
        (
@@ -682,7 +683,7 @@ test_expect_success '__git_refs - remote on local file system' '
        cat >expected <<-EOF &&
        HEAD
        branch-in-other
-       master-in-other
+       main-in-other
        tag-in-other
        EOF
        (
@@ -695,7 +696,7 @@ test_expect_success '__git_refs - remote on local file system' '
 test_expect_success '__git_refs - remote on local file system - full refs' '
        cat >expected <<-EOF &&
        refs/heads/branch-in-other
-       refs/heads/master-in-other
+       refs/heads/main-in-other
        refs/tags/tag-in-other
        EOF
        (
@@ -709,7 +710,7 @@ test_expect_success '__git_refs - configured remote' '
        cat >expected <<-EOF &&
        HEAD
        branch-in-other
-       master-in-other
+       main-in-other
        EOF
        (
                cur= &&
@@ -722,7 +723,7 @@ test_expect_success '__git_refs - configured remote - full refs' '
        cat >expected <<-EOF &&
        HEAD
        refs/heads/branch-in-other
-       refs/heads/master-in-other
+       refs/heads/main-in-other
        refs/tags/tag-in-other
        EOF
        (
@@ -736,7 +737,7 @@ test_expect_success '__git_refs - configured remote - repo given on the command
        cat >expected <<-EOF &&
        HEAD
        branch-in-other
-       master-in-other
+       main-in-other
        EOF
        (
                cd thirdrepo &&
@@ -751,7 +752,7 @@ test_expect_success '__git_refs - configured remote - full refs - repo given on
        cat >expected <<-EOF &&
        HEAD
        refs/heads/branch-in-other
-       refs/heads/master-in-other
+       refs/heads/main-in-other
        refs/tags/tag-in-other
        EOF
        (
@@ -767,7 +768,7 @@ test_expect_success '__git_refs - configured remote - remote name matches a dire
        cat >expected <<-EOF &&
        HEAD
        branch-in-other
-       master-in-other
+       main-in-other
        EOF
        mkdir other &&
        test_when_finished "rm -rf other" &&
@@ -782,7 +783,7 @@ test_expect_success '__git_refs - URL remote' '
        cat >expected <<-EOF &&
        HEAD
        branch-in-other
-       master-in-other
+       main-in-other
        tag-in-other
        EOF
        (
@@ -796,7 +797,7 @@ test_expect_success '__git_refs - URL remote - full refs' '
        cat >expected <<-EOF &&
        HEAD
        refs/heads/branch-in-other
-       refs/heads/master-in-other
+       refs/heads/main-in-other
        refs/tags/tag-in-other
        EOF
        (
@@ -852,23 +853,23 @@ test_expect_success '__git_refs - not in a git repository' '
 test_expect_success '__git_refs - unique remote branches for git checkout DWIMery' '
        cat >expected <<-EOF &&
        HEAD
-       master
+       main
        matching-branch
        other/ambiguous
        other/branch-in-other
-       other/master-in-other
+       other/main-in-other
        remote/ambiguous
        remote/branch-in-remote
        matching-tag
        branch-in-other
        branch-in-remote
-       master-in-other
+       main-in-other
        EOF
        for remote_ref in refs/remotes/other/ambiguous \
                refs/remotes/remote/ambiguous \
                refs/remotes/remote/branch-in-remote
        do
-               git update-ref $remote_ref master &&
+               git update-ref $remote_ref main &&
                test_when_finished "git update-ref -d $remote_ref"
        done &&
        (
@@ -881,10 +882,10 @@ test_expect_success '__git_refs - unique remote branches for git checkout DWIMer
 test_expect_success '__git_refs - after --opt=' '
        cat >expected <<-EOF &&
        HEAD
-       master
+       main
        matching-branch
        other/branch-in-other
-       other/master-in-other
+       other/main-in-other
        matching-tag
        EOF
        (
@@ -896,10 +897,10 @@ test_expect_success '__git_refs - after --opt=' '
 
 test_expect_success '__git_refs - after --opt= - full refs' '
        cat >expected <<-EOF &&
-       refs/heads/master
+       refs/heads/main
        refs/heads/matching-branch
        refs/remotes/other/branch-in-other
-       refs/remotes/other/master-in-other
+       refs/remotes/other/main-in-other
        refs/tags/matching-tag
        EOF
        (
@@ -909,13 +910,13 @@ test_expect_success '__git_refs - after --opt= - full refs' '
        test_cmp expected "$actual"
 '
 
-test_expect_success '__git refs - exluding refs' '
+test_expect_success '__git refs - excluding refs' '
        cat >expected <<-EOF &&
        ^HEAD
-       ^master
+       ^main
        ^matching-branch
        ^other/branch-in-other
-       ^other/master-in-other
+       ^other/main-in-other
        ^matching-tag
        EOF
        (
@@ -925,12 +926,12 @@ test_expect_success '__git refs - exluding refs' '
        test_cmp expected "$actual"
 '
 
-test_expect_success '__git refs - exluding full refs' '
+test_expect_success '__git refs - excluding full refs' '
        cat >expected <<-EOF &&
-       ^refs/heads/master
+       ^refs/heads/main
        ^refs/heads/matching-branch
        ^refs/remotes/other/branch-in-other
-       ^refs/remotes/other/master-in-other
+       ^refs/remotes/other/main-in-other
        ^refs/tags/matching-tag
        EOF
        (
@@ -951,17 +952,17 @@ test_expect_success 'setup for filtering matching refs' '
 test_expect_success '__git_refs - do not filter refs unless told so' '
        cat >expected <<-EOF &&
        HEAD
-       master
+       main
        matching-branch
        matching/branch
        other/branch-in-other
-       other/master-in-other
+       other/main-in-other
        other/matching/branch-in-other
        matching-tag
        matching/tag
        EOF
        (
-               cur=master &&
+               cur=main &&
                __git_refs >"$actual"
        ) &&
        test_cmp expected "$actual"
@@ -995,7 +996,7 @@ test_expect_success '__git_refs - only matching refs - full refs' '
 
 test_expect_success '__git_refs - only matching refs - remote on local file system' '
        cat >expected <<-EOF &&
-       master-in-other
+       main-in-other
        matching/branch-in-other
        EOF
        (
@@ -1007,7 +1008,7 @@ test_expect_success '__git_refs - only matching refs - remote on local file syst
 
 test_expect_success '__git_refs - only matching refs - configured remote' '
        cat >expected <<-EOF &&
-       master-in-other
+       main-in-other
        matching/branch-in-other
        EOF
        (
@@ -1019,7 +1020,7 @@ test_expect_success '__git_refs - only matching refs - configured remote' '
 
 test_expect_success '__git_refs - only matching refs - remote - full refs' '
        cat >expected <<-EOF &&
-       refs/heads/master-in-other
+       refs/heads/main-in-other
        refs/heads/matching/branch-in-other
        EOF
        (
@@ -1041,7 +1042,7 @@ test_expect_success '__git_refs - only matching refs - checkout DWIMery' '
                refs/remotes/remote/ambiguous \
                refs/remotes/remote/branch-in-remote
        do
-               git update-ref $remote_ref master &&
+               git update-ref $remote_ref main &&
                test_when_finished "git update-ref -d $remote_ref"
        done &&
        (
@@ -1058,9 +1059,9 @@ test_expect_success 'teardown after filtering matching refs' '
        git -C otherrepo branch -D matching/branch-in-other
 '
 
-test_expect_success PREPARE_FOR_MAIN_BRANCH '__git_refs - for-each-ref format specifiers in prefix' '
+test_expect_success '__git_refs - for-each-ref format specifiers in prefix' '
        cat >expected <<-EOF &&
-       evil-%%-%42-%(refname)..master
+       evil-%%-%42-%(refname)..main
        EOF
        (
                cur="evil-%%-%42-%(refname)..mai" &&
@@ -1072,10 +1073,10 @@ test_expect_success PREPARE_FOR_MAIN_BRANCH '__git_refs - for-each-ref format sp
 test_expect_success '__git_complete_refs - simple' '
        sed -e "s/Z$//" >expected <<-EOF &&
        HEAD Z
-       master Z
+       main Z
        matching-branch Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        matching-tag Z
        EOF
        (
@@ -1103,7 +1104,7 @@ test_expect_success '__git_complete_refs - remote' '
        sed -e "s/Z$//" >expected <<-EOF &&
        HEAD Z
        branch-in-other Z
-       master-in-other Z
+       main-in-other Z
        EOF
        (
                cur= &&
@@ -1116,13 +1117,13 @@ test_expect_success '__git_complete_refs - remote' '
 test_expect_success '__git_complete_refs - track' '
        sed -e "s/Z$//" >expected <<-EOF &&
        HEAD Z
-       master Z
+       main Z
        matching-branch Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        matching-tag Z
        branch-in-other Z
-       master-in-other Z
+       main-in-other Z
        EOF
        (
                cur= &&
@@ -1161,10 +1162,10 @@ test_expect_success '__git_complete_refs - prefix' '
 test_expect_success '__git_complete_refs - suffix' '
        cat >expected <<-EOF &&
        HEAD.
-       master.
+       main.
        matching-branch.
        other/branch-in-other.
-       other/master-in-other.
+       other/main-in-other.
        matching-tag.
        EOF
        (
@@ -1179,7 +1180,7 @@ test_expect_success '__git_complete_fetch_refspecs - simple' '
        sed -e "s/Z$//" >expected <<-EOF &&
        HEAD:HEAD Z
        branch-in-other:branch-in-other Z
-       master-in-other:master-in-other Z
+       main-in-other:main-in-other Z
        EOF
        (
                cur= &&
@@ -1205,7 +1206,7 @@ test_expect_success '__git_complete_fetch_refspecs - prefix' '
        sed -e "s/Z$//" >expected <<-EOF &&
        +HEAD:HEAD Z
        +branch-in-other:branch-in-other Z
-       +master-in-other:master-in-other Z
+       +main-in-other:main-in-other Z
        EOF
        (
                cur="+" &&
@@ -1218,7 +1219,7 @@ test_expect_success '__git_complete_fetch_refspecs - prefix' '
 test_expect_success '__git_complete_fetch_refspecs - fully qualified' '
        sed -e "s/Z$//" >expected <<-EOF &&
        refs/heads/branch-in-other:refs/heads/branch-in-other Z
-       refs/heads/master-in-other:refs/heads/master-in-other Z
+       refs/heads/main-in-other:refs/heads/main-in-other Z
        refs/tags/tag-in-other:refs/tags/tag-in-other Z
        EOF
        (
@@ -1232,7 +1233,7 @@ test_expect_success '__git_complete_fetch_refspecs - fully qualified' '
 test_expect_success '__git_complete_fetch_refspecs - fully qualified & prefix' '
        sed -e "s/Z$//" >expected <<-EOF &&
        +refs/heads/branch-in-other:refs/heads/branch-in-other Z
-       +refs/heads/master-in-other:refs/heads/master-in-other Z
+       +refs/heads/main-in-other:refs/heads/main-in-other Z
        +refs/tags/tag-in-other:refs/tags/tag-in-other Z
        EOF
        (
@@ -1246,8 +1247,8 @@ test_expect_success '__git_complete_fetch_refspecs - fully qualified & prefix' '
 test_expect_success 'git switch - with no options, complete local branches and unique remote branch names for DWIM logic' '
        test_completion "git switch " <<-\EOF
        branch-in-other Z
-       master Z
-       master-in-other Z
+       main Z
+       main-in-other Z
        matching-branch Z
        EOF
 '
@@ -1256,25 +1257,25 @@ test_expect_success 'git checkout - completes refs and unique remote branches fo
        test_completion "git checkout " <<-\EOF
        HEAD Z
        branch-in-other Z
-       master Z
-       master-in-other Z
+       main Z
+       main-in-other Z
        matching-branch Z
        matching-tag Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
 test_expect_success 'git switch - with --no-guess, complete only local branches' '
        test_completion "git switch --no-guess " <<-\EOF
-       master Z
+       main Z
        matching-branch Z
        EOF
 '
 
 test_expect_success 'git switch - with GIT_COMPLETION_CHECKOUT_NO_GUESS=1, complete only local branches' '
        GIT_COMPLETION_CHECKOUT_NO_GUESS=1 test_completion "git switch " <<-\EOF
-       master Z
+       main Z
        matching-branch Z
        EOF
 '
@@ -1282,8 +1283,8 @@ test_expect_success 'git switch - with GIT_COMPLETION_CHECKOUT_NO_GUESS=1, compl
 test_expect_success 'git switch - --guess overrides GIT_COMPLETION_CHECKOUT_NO_GUESS=1, complete local branches and unique remote names for DWIM logic' '
        GIT_COMPLETION_CHECKOUT_NO_GUESS=1 test_completion "git switch --guess " <<-\EOF
        branch-in-other Z
-       master Z
-       master-in-other Z
+       main Z
+       main-in-other Z
        matching-branch Z
        EOF
 '
@@ -1291,15 +1292,15 @@ test_expect_success 'git switch - --guess overrides GIT_COMPLETION_CHECKOUT_NO_G
 test_expect_success 'git switch - a later --guess overrides previous --no-guess, complete local and remote unique branches for DWIM' '
        test_completion "git switch --no-guess --guess " <<-\EOF
        branch-in-other Z
-       master Z
-       master-in-other Z
+       main Z
+       main-in-other Z
        matching-branch Z
        EOF
 '
 
 test_expect_success 'git switch - a later --no-guess overrides previous --guess, complete only local branches' '
        test_completion "git switch --guess --no-guess " <<-\EOF
-       master Z
+       main Z
        matching-branch Z
        EOF
 '
@@ -1307,11 +1308,11 @@ test_expect_success 'git switch - a later --no-guess overrides previous --guess,
 test_expect_success 'git checkout - with GIT_COMPLETION_NO_GUESS=1 only completes refs' '
        GIT_COMPLETION_CHECKOUT_NO_GUESS=1 test_completion "git checkout " <<-\EOF
        HEAD Z
-       master Z
+       main Z
        matching-branch Z
        matching-tag Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
@@ -1319,23 +1320,23 @@ test_expect_success 'git checkout - --guess overrides GIT_COMPLETION_NO_GUESS=1,
        GIT_COMPLETION_CHECKOUT_NO_GUESS=1 test_completion "git checkout --guess " <<-\EOF
        HEAD Z
        branch-in-other Z
-       master Z
-       master-in-other Z
+       main Z
+       main-in-other Z
        matching-branch Z
        matching-tag Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
 test_expect_success 'git checkout - with --no-guess, only completes refs' '
        test_completion "git checkout --no-guess " <<-\EOF
        HEAD Z
-       master Z
+       main Z
        matching-branch Z
        matching-tag Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
@@ -1343,23 +1344,23 @@ test_expect_success 'git checkout - a later --guess overrides previous --no-gues
        test_completion "git checkout --no-guess --guess " <<-\EOF
        HEAD Z
        branch-in-other Z
-       master Z
-       master-in-other Z
+       main Z
+       main-in-other Z
        matching-branch Z
        matching-tag Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
 test_expect_success 'git checkout - a later --no-guess overrides previous --guess, complete only refs' '
        test_completion "git checkout --guess --no-guess " <<-\EOF
        HEAD Z
-       master Z
+       main Z
        matching-branch Z
        matching-tag Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
@@ -1367,11 +1368,11 @@ test_expect_success 'git checkout - with checkout.guess = false, only completes
        test_config checkout.guess false &&
        test_completion "git checkout " <<-\EOF
        HEAD Z
-       master Z
+       main Z
        matching-branch Z
        matching-tag Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
@@ -1380,12 +1381,12 @@ test_expect_success 'git checkout - with checkout.guess = true, completes refs a
        test_completion "git checkout " <<-\EOF
        HEAD Z
        branch-in-other Z
-       master Z
-       master-in-other Z
+       main Z
+       main-in-other Z
        matching-branch Z
        matching-tag Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
@@ -1394,12 +1395,12 @@ test_expect_success 'git checkout - a later --guess overrides previous checkout.
        test_completion "git checkout --guess " <<-\EOF
        HEAD Z
        branch-in-other Z
-       master Z
-       master-in-other Z
+       main Z
+       main-in-other Z
        matching-branch Z
        matching-tag Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
@@ -1407,75 +1408,75 @@ test_expect_success 'git checkout - a later --no-guess overrides previous checko
        test_config checkout.guess true &&
        test_completion "git checkout --no-guess " <<-\EOF
        HEAD Z
-       master Z
+       main Z
        matching-branch Z
        matching-tag Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
 test_expect_success 'git switch - with --detach, complete all references' '
        test_completion "git switch --detach " <<-\EOF
        HEAD Z
-       master Z
+       main Z
        matching-branch Z
        matching-tag Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
 test_expect_success 'git checkout - with --detach, complete only references' '
        test_completion "git checkout --detach " <<-\EOF
        HEAD Z
-       master Z
+       main Z
        matching-branch Z
        matching-tag Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
 test_expect_success 'git switch - with -d, complete all references' '
        test_completion "git switch -d " <<-\EOF
        HEAD Z
-       master Z
+       main Z
        matching-branch Z
        matching-tag Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
 test_expect_success 'git checkout - with -d, complete only references' '
        test_completion "git checkout -d " <<-\EOF
        HEAD Z
-       master Z
+       main Z
        matching-branch Z
        matching-tag Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
 test_expect_success 'git switch - with --track, complete only remote branches' '
        test_completion "git switch --track " <<-\EOF
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
 test_expect_success 'git checkout - with --track, complete only remote branches' '
        test_completion "git checkout --track " <<-\EOF
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
 test_expect_success 'git switch - with --no-track, complete only local branch names' '
        test_completion "git switch --no-track " <<-\EOF
-       master Z
+       main Z
        matching-branch Z
        EOF
 '
@@ -1483,151 +1484,151 @@ test_expect_success 'git switch - with --no-track, complete only local branch na
 test_expect_success 'git checkout - with --no-track, complete only local references' '
        test_completion "git checkout --no-track " <<-\EOF
        HEAD Z
-       master Z
+       main Z
        matching-branch Z
        matching-tag Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
 test_expect_success 'git switch - with -c, complete all references' '
        test_completion "git switch -c new-branch " <<-\EOF
        HEAD Z
-       master Z
+       main Z
        matching-branch Z
        matching-tag Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
 test_expect_success 'git switch - with -C, complete all references' '
        test_completion "git switch -C new-branch " <<-\EOF
        HEAD Z
-       master Z
+       main Z
        matching-branch Z
        matching-tag Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
 test_expect_success 'git switch - with -c and --track, complete all references' '
        test_completion "git switch -c new-branch --track " <<-EOF
        HEAD Z
-       master Z
+       main Z
        matching-branch Z
        matching-tag Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
 test_expect_success 'git switch - with -C and --track, complete all references' '
        test_completion "git switch -C new-branch --track " <<-EOF
        HEAD Z
-       master Z
+       main Z
        matching-branch Z
        matching-tag Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
 test_expect_success 'git switch - with -c and --no-track, complete all references' '
        test_completion "git switch -c new-branch --no-track " <<-\EOF
        HEAD Z
-       master Z
+       main Z
        matching-branch Z
        matching-tag Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
 test_expect_success 'git switch - with -C and --no-track, complete all references' '
        test_completion "git switch -C new-branch --no-track " <<-\EOF
        HEAD Z
-       master Z
+       main Z
        matching-branch Z
        matching-tag Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
 test_expect_success 'git checkout - with -b, complete all references' '
        test_completion "git checkout -b new-branch " <<-\EOF
        HEAD Z
-       master Z
+       main Z
        matching-branch Z
        matching-tag Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
 test_expect_success 'git checkout - with -B, complete all references' '
        test_completion "git checkout -B new-branch " <<-\EOF
        HEAD Z
-       master Z
+       main Z
        matching-branch Z
        matching-tag Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
 test_expect_success 'git checkout - with -b and --track, complete all references' '
        test_completion "git checkout -b new-branch --track " <<-EOF
        HEAD Z
-       master Z
+       main Z
        matching-branch Z
        matching-tag Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
 test_expect_success 'git checkout - with -B and --track, complete all references' '
        test_completion "git checkout -B new-branch --track " <<-EOF
        HEAD Z
-       master Z
+       main Z
        matching-branch Z
        matching-tag Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
 test_expect_success 'git checkout - with -b and --no-track, complete all references' '
        test_completion "git checkout -b new-branch --no-track " <<-\EOF
        HEAD Z
-       master Z
+       main Z
        matching-branch Z
        matching-tag Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
 test_expect_success 'git checkout - with -B and --no-track, complete all references' '
        test_completion "git checkout -B new-branch --no-track " <<-\EOF
        HEAD Z
-       master Z
+       main Z
        matching-branch Z
        matching-tag Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
 test_expect_success 'git switch - for -c, complete local branches and unique remote branches' '
        test_completion "git switch -c " <<-\EOF
        branch-in-other Z
-       master Z
-       master-in-other Z
+       main Z
+       main-in-other Z
        matching-branch Z
        EOF
 '
@@ -1635,36 +1636,36 @@ test_expect_success 'git switch - for -c, complete local branches and unique rem
 test_expect_success 'git switch - for -C, complete local branches and unique remote branches' '
        test_completion "git switch -C " <<-\EOF
        branch-in-other Z
-       master Z
-       master-in-other Z
+       main Z
+       main-in-other Z
        matching-branch Z
        EOF
 '
 
 test_expect_success 'git switch - for -c with --no-guess, complete local branches only' '
        test_completion "git switch --no-guess -c " <<-\EOF
-       master Z
+       main Z
        matching-branch Z
        EOF
 '
 
 test_expect_success 'git switch - for -C with --no-guess, complete local branches only' '
        test_completion "git switch --no-guess -C " <<-\EOF
-       master Z
+       main Z
        matching-branch Z
        EOF
 '
 
 test_expect_success 'git switch - for -c with --no-track, complete local branches only' '
        test_completion "git switch --no-track -c " <<-\EOF
-       master Z
+       main Z
        matching-branch Z
        EOF
 '
 
 test_expect_success 'git switch - for -C with --no-track, complete local branches only' '
        test_completion "git switch --no-track -C " <<-\EOF
-       master Z
+       main Z
        matching-branch Z
        EOF
 '
@@ -1672,8 +1673,8 @@ test_expect_success 'git switch - for -C with --no-track, complete local branche
 test_expect_success 'git checkout - for -b, complete local branches and unique remote branches' '
        test_completion "git checkout -b " <<-\EOF
        branch-in-other Z
-       master Z
-       master-in-other Z
+       main Z
+       main-in-other Z
        matching-branch Z
        EOF
 '
@@ -1681,36 +1682,36 @@ test_expect_success 'git checkout - for -b, complete local branches and unique r
 test_expect_success 'git checkout - for -B, complete local branches and unique remote branches' '
        test_completion "git checkout -B " <<-\EOF
        branch-in-other Z
-       master Z
-       master-in-other Z
+       main Z
+       main-in-other Z
        matching-branch Z
        EOF
 '
 
 test_expect_success 'git checkout - for -b with --no-guess, complete local branches only' '
        test_completion "git checkout --no-guess -b " <<-\EOF
-       master Z
+       main Z
        matching-branch Z
        EOF
 '
 
 test_expect_success 'git checkout - for -B with --no-guess, complete local branches only' '
        test_completion "git checkout --no-guess -B " <<-\EOF
-       master Z
+       main Z
        matching-branch Z
        EOF
 '
 
 test_expect_success 'git checkout - for -b with --no-track, complete local branches only' '
        test_completion "git checkout --no-track -b " <<-\EOF
-       master Z
+       main Z
        matching-branch Z
        EOF
 '
 
 test_expect_success 'git checkout - for -B with --no-track, complete local branches only' '
        test_completion "git checkout --no-track -B " <<-\EOF
-       master Z
+       main Z
        matching-branch Z
        EOF
 '
@@ -1718,14 +1719,14 @@ test_expect_success 'git checkout - for -B with --no-track, complete local branc
 test_expect_success 'git switch - with --orphan completes local branch names and unique remote branch names' '
        test_completion "git switch --orphan " <<-\EOF
        branch-in-other Z
-       master Z
-       master-in-other Z
+       main Z
+       main-in-other Z
        matching-branch Z
        EOF
 '
 
 test_expect_success 'git switch - --orphan with branch already provided completes nothing else' '
-       test_completion "git switch --orphan master " <<-\EOF
+       test_completion "git switch --orphan main " <<-\EOF
 
        EOF
 '
@@ -1733,20 +1734,20 @@ test_expect_success 'git switch - --orphan with branch already provided complete
 test_expect_success 'git checkout - with --orphan completes local branch names and unique remote branch names' '
        test_completion "git checkout --orphan " <<-\EOF
        branch-in-other Z
-       master Z
-       master-in-other Z
+       main Z
+       main-in-other Z
        matching-branch Z
        EOF
 '
 
 test_expect_success 'git checkout - --orphan with branch already provided completes local refs for a start-point' '
-       test_completion "git checkout --orphan master " <<-\EOF
+       test_completion "git checkout --orphan main " <<-\EOF
        HEAD Z
-       master Z
+       main Z
        matching-branch Z
        matching-tag Z
        other/branch-in-other Z
-       other/master-in-other Z
+       other/main-in-other Z
        EOF
 '
 
@@ -2070,7 +2071,7 @@ test_expect_success 'setup for integration tests' '
 
 test_expect_success 'checkout completes ref names' '
        test_completion "git checkout m" <<-\EOF
-       master Z
+       main Z
        mybranch Z
        mytag Z
        EOF
@@ -2084,7 +2085,7 @@ test_expect_success 'git -C <path> checkout uses the right repo' '
 
 test_expect_success 'show completes all refs' '
        test_completion "git show m" <<-\EOF
-       master Z
+       main Z
        mybranch Z
        mytag Z
        EOF
@@ -2121,7 +2122,7 @@ test_expect_success PERL 'send-email' '
        --cover-from-description=Z
        --cover-letter Z
        EOF
-       test_completion "git send-email ma" "master "
+       test_completion "git send-email ma" "main "
 '
 
 test_expect_success 'complete files' '
@@ -2198,10 +2199,29 @@ test_expect_success 'complete files' '
        test_completion "git add mom" "momified"
 '
 
+test_expect_success "simple alias" '
+       test_config alias.co checkout &&
+       test_completion "git co m" <<-\EOF
+       main Z
+       mybranch Z
+       mytag Z
+       EOF
+'
+
+test_expect_success "recursive alias" '
+       test_config alias.co checkout &&
+       test_config alias.cod "co --detached" &&
+       test_completion "git cod m" <<-\EOF
+       main Z
+       mybranch Z
+       mytag Z
+       EOF
+'
+
 test_expect_success "completion uses <cmd> completion for alias: !sh -c 'git <cmd> ...'" '
        test_config alias.co "!sh -c '"'"'git checkout ...'"'"'" &&
        test_completion "git co m" <<-\EOF
-       master Z
+       main Z
        mybranch Z
        mytag Z
        EOF
@@ -2210,7 +2230,7 @@ test_expect_success "completion uses <cmd> completion for alias: !sh -c 'git <cm
 test_expect_success 'completion uses <cmd> completion for alias: !f () { VAR=val git <cmd> ... }' '
        test_config alias.co "!f () { VAR=val git checkout ... ; } f" &&
        test_completion "git co m" <<-\EOF
-       master Z
+       main Z
        mybranch Z
        mytag Z
        EOF
@@ -2219,7 +2239,7 @@ test_expect_success 'completion uses <cmd> completion for alias: !f () { VAR=val
 test_expect_success 'completion used <cmd> completion for alias: !f() { : git <cmd> ; ... }' '
        test_config alias.co "!f() { : git checkout ; if ... } f" &&
        test_completion "git co m" <<-\EOF
-       master Z
+       main Z
        mybranch Z
        mytag Z
        EOF
@@ -2250,7 +2270,7 @@ for flag in -d --delete
 do
        test_expect_success "__git_complete_remote_or_refspec - push $flag other" '
                sed -e "s/Z$//" >expected <<-EOF &&
-               master-in-other Z
+               main-in-other Z
                EOF
                (
                        words=(git push '$flag' other ma) &&
@@ -2263,7 +2283,7 @@ do
 
        test_expect_failure "__git_complete_remote_or_refspec - push other $flag" '
                sed -e "s/Z$//" >expected <<-EOF &&
-               master-in-other Z
+               main-in-other Z
                EOF
                (
                        words=(git push other '$flag' ma) &&
@@ -2363,4 +2383,24 @@ test_expect_success 'sourcing the completion script clears cached --options' '
        verbose test -z "$__gitcomp_builtin_notes_edit"
 '
 
+test_expect_success '__git_complete' '
+       unset -f __git_wrap__git_main &&
+
+       __git_complete foo __git_main &&
+       __git_have_func __git_wrap__git_main &&
+       unset -f __git_wrap__git_main &&
+
+       __git_complete gf _git_fetch &&
+       __git_have_func __git_wrap_git_fetch &&
+
+       __git_complete foo git &&
+       __git_have_func __git_wrap__git_main &&
+       unset -f __git_wrap__git_main &&
+
+       __git_complete gd git_diff &&
+       __git_have_func __git_wrap_git_diff &&
+
+       test_must_fail __git_complete ga missing
+'
+
 test_done