Thread (18 messages) flat view 18 messages, 3 authors, 4h ago
HOTtoday

Revision v2 of 3 in this series.

Revisions (3)
  1. v1 [diff vs current]
  2. v2 current
  3. v3 [diff vs current]

[PATCH v2 0/3] completion of 'git [-C <dir>] checkout'

From: Junio C Hamano <hidden>
Date: 2026-08-12 16:48:52

Continuing from the previous 'git [-C <dir>] diff' series, these two
patches correct completion for 'git checkout [-C <dir>] path<TAB>',
but without falling back to untracked paths, as "checkout paths out
of the index" is by definition about paths that appear in the index.

This has been rebuilt on the v6 iteration of the 'complete-diff'
topic to give the tests a more structured and logical organization.

Additionally, [PATCH 3/3] is new.  It teaches the completion
machinery to complete untracked paths in the working tree, which may
be of limited use, as it is unlikely that a file tracked on another
branch (and thus capable of being restored with 'git checkout
another-branch path') would be lying around untracked in the working
tree to begin with.

 1/3: completion: no-op refactoring of checkout completion
 2/3: completion: complete tracked paths for "git checkout"
 3/3: completion: 'git checkout' completes untracked paths as a last
        resort

 contrib/completion/git-completion.bash | 88 ++++++++++++++------------
 t/t9902-completion.sh                  | 56 ++++++++++++++++
 2 files changed, 105 insertions(+), 39 deletions(-)

Range-diff against v1:
1:  f35017f5c9 = 1:  d3b022ac73 completion: no-op refactoring of checkout completion
2:  20d57f0336 ! 2:  85019fbf97 completion: complete tracked paths for "git checkout"
    @@ contrib/completion/git-completion.bash: _git_checkout ()
      	fi
     +
     +	if [ ${#COMPREPLY[@]} -eq 0 ]; then
    -+		__git_complete_index_file
    ++		__git_complete_index_file ""
     +	fi
      }
      
    @@ t/t9902-completion.sh: test_expect_success 'git -C <path> checkout uses the righ
      '
      
     +test_expect_success 'git checkout completes tracked paths when no refs match' '
    -+	# file1 and file2 are tracked but ufile is not
    ++	# file1 and file2 are tracked but file3 is not
     +	# there is no ref that begins with f
     +	test_completion "git checkout f" <<-\EOF &&
     +	file1
    @@ t/t9902-completion.sh: test_expect_success 'git -C <path> checkout uses the righ
     +	EOF
     +'
     +
    -+test_expect_success 'git -C <path> checkout completes tracked paths in specified repo' '
    ++test_expect_success 'git -C <path> checkout completes paths in specified repo' '
    ++	# otherfile is tracked, oops is not
    ++	# lostfile is tracked but lost
     +	test_when_finished "rm -rf repo-for-checkout" &&
     +	git init repo-for-checkout &&
     +	echo content >repo-for-checkout/otherfile &&
    ++	echo content >repo-for-checkout/lostfile &&
     +	git -C repo-for-checkout add otherfile &&
    ++	git -C repo-for-checkout add lostfile &&
     +	git -C repo-for-checkout commit -m otherfile &&
    ++	echo untracked >repo-for-checkout/oops &&
    ++	rm -f repo-for-checkout/lostfile &&
     +	test_completion "git -C repo-for-checkout checkout o" <<-\EOF &&
     +	otherfile
     +	EOF
    -+	test_completion "git -C repo-for-checkout checkout -- o" <<-\EOF
    ++	test_completion "git -C repo-for-checkout checkout -- o" <<-\EOF &&
     +	otherfile
     +	EOF
    ++	test_completion "git -C repo-for-checkout checkout l" <<-\EOF &&
    ++	lostfile
    ++	EOF
    ++	test_completion "git -C repo-for-checkout checkout -- l" <<-\EOF
    ++	lostfile
    ++	EOF
     +'
     +
      test_expect_success 'git diff completes tracked paths when no refs match' '
-:  ---------- > 3:  56aade8759 completion: 'git checkout' completes untracked paths as a last resort
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help