1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-10-25 17:20:25 +02:00

36237: __git_objects: Complete HEAD:foo correctly in worktree subdir

This commit is contained in:
Daniel Shahaf 2015-08-19 21:17:50 +00:00
parent a4c41fff12
commit 663fa4092f
2 changed files with 16 additions and 2 deletions

View file

@ -5740,7 +5740,7 @@ __git_tree_ishs () {
__git_objects () {
compset -P '*:'
if [[ -n $IPREFIX ]]; then
__git_tree_files "$PREFIX" "${IPREFIX%:}"
__git_tree_files --root-relative "$PREFIX" "${IPREFIX%:}"
else
_alternative \
'revisions::__git_revisions' \
@ -5985,12 +5985,23 @@ __git_changed_files () {
'changed-in-working-tree-files::__git_changed-in-working-tree_files'
}
# __git_tree_files [--root-relative] FSPATH TREEISH [TREEISH...] [COMPADD OPTIONS]
#
# Complete [presently: a single level of] repository files under FSPATH.
# FSPATH is interpreted as a directory path within each TREEISH.
# FSPATH is relative to cwd, unless --root-relative is specified, in
# which case it is relative to the repository root.
(( $+functions[__git_tree_files] )) ||
__git_tree_files () {
local multi_parts_opts
local tree Path
integer at_least_one_tree_added
local -a tree_files compadd_opts
local -a extra_args
if [[ $1 == --root-relative ]]; then
extra_args+=(--full-tree)
fi
zparseopts -D -E -a compadd_opts V: J: 1 2 n f X: M: P: S: r: R: q F:
@ -5998,7 +6009,7 @@ __git_tree_files () {
shift
(( at_least_one_tree_added = 0 ))
for tree in $*; do
tree_files+=(${(ps:\0:)"$(_call_program tree-files git ls-tree --name-only -z $tree $Path 2>/dev/null)"})
tree_files+=(${(ps:\0:)"$(_call_program tree-files git ls-tree $extra_args --name-only -z $tree $Path 2>/dev/null)"})
__git_command_successful $pipestatus && (( at_least_one_tree_added = 1 ))
done