42 lines
1.5 KiB
Bash
42 lines
1.5 KiB
Bash
#compdef git-ls-ignored
|
|
#description List files which exist and are ignored by this repository.
|
|
|
|
# Offer the paths the script would actually list, so the candidates match its
|
|
# rules rather than the --exclude-standard set used by zsh's own
|
|
# __git_ignored_other_files. _multi_parts descends one component at a time, so
|
|
# a directory holding ignored files completes as a way to narrow the listing.
|
|
__git-ls-ignored_files() {
|
|
local common_dir expl
|
|
local -a excludes files
|
|
|
|
if (( $+opt_args[-g] + $+opt_args[--global] )); then
|
|
excludes=(--exclude-standard)
|
|
else
|
|
common_dir=$(_call_program common-dir git rev-parse --git-common-dir 2>/dev/null)
|
|
[[ -n $common_dir ]] || return 1
|
|
[[ $common_dir == /* ]] || common_dir=$PWD/$common_dir
|
|
excludes=(--exclude-per-directory=.gitignore)
|
|
[[ -f $common_dir/info/exclude ]] &&
|
|
excludes+=(--exclude-from=$common_dir/info/exclude)
|
|
fi
|
|
|
|
files=(${(0)"$(_call_program ignored-files git ls-files -z --others --ignored \
|
|
${(q)excludes} 2>/dev/null)"})
|
|
(( $#files )) || return 1
|
|
|
|
_wanted ignored-files expl 'ignored file' _multi_parts -f - / files
|
|
}
|
|
|
|
_git-ls-ignored() {
|
|
_arguments -s -S \
|
|
'(-d --directory)'{-d,--directory}'[list an ignored directory by name instead of its contents]' \
|
|
'(-g --global)'{-g,--global}'[also apply the global core.excludesfile]' \
|
|
'(-z)-z[terminate entries with NUL instead of newline]' \
|
|
'(- *)'{-h,--help}'[show usage information]' \
|
|
'*:pathspec:__git-ls-ignored_files'
|
|
}
|
|
|
|
_git-ls-ignored "$@"
|
|
|
|
# vim: ft=zsh
|