[PATCH 03/11] completion: add test highlighting subpar git switch --track completion
- From
Jacob Keller <jacob.e.keller@intel.com>
- Date
- Apr 25, 2020, 02:20 UTC
- Message-ID
- <20200425022045.1089291-4-jacob.e.keller@intel.com>
- In-Reply-To
- <20200425022045.1089291-1-jacob.e.keller@intel.com>
From: Jacob Keller <jacob.keller@gmail.com>
If git switch is called with --track, it will attempts to DWIM into creating a local tracking branch that tracks the provided remote branch. It seems reasonable that, to support this behavior, we should only complete remote branches in the form "<remote>/<branch>".
Indeed, current completion is not just sub-par, but could almost be described as entirely useless.
$git switch --track <TAB>
will only report *local* branch names. Indeed a new test case highlights this quite well:
--- expected 2020-04-25 00:25:34.424965326 +0000 +++ out_sorted 2020-04-25 00:25:34.441965370 +0000 @@ -1,2 +1,2 @@ -other/branch-in-other -other/master-in-other +master +matching-branch not ok 100 - git switch - with --track, complete only remote branches # TODO known breakage
Understanding exactly what causes this is not that simple.
First we enable DWIM output by default. Then, if "--track", "--no-track", or "--no-guess" is enabled on the command line, we disable DWIM. This makes sense, because --track should not include the default "DWIM" remote branch names.
Following this, there is a check for "--detach". If "--detach" is *not* present, then we set only_local_ref=y. this is done because we would like to avoid printing remote references. This immediately seems wrong because --track should allow completing remote references.
Finally, if only_local_ref is 'y', and the track_opt for DWIM logic is disabled, we complete only local branches. This occurs because --track disabled track_opt, and not providing --detach sets only_local_ref to 'y'.
Fixing this correctly is not trivial, so it is left to a follow up change.
Signed-off-by: Jacob Keller <jacob.keller@gmail.com> --- t/t9902-completion.sh | 10 ++++++++++ 1 file changed, 10 insertions(+)
diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh index af4661cbcc73..002223160058 100755 --- a/t/t9902-completion.sh +++ b/t/t9902-completion.sh @@ -1271,6 +1271,16 @@ test_expect_success 'git switch - with --detach, complete all references' ' EOF ' +# TODO: Since --track on its own will perform a DWIM to extract the local +# branch name, we should complete only the remote branches with their remote +# name. +test_expect_failure 'git switch - with --track, complete only remote branches' ' + test_completion "git switch --track " <<-\EOF + other/branch-in-other Z + other/master-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
-- 2.25.2