26763: fix problem on failed cd -s to relative path
[zsh.git] / Completion / Unix / Type / _arch_namespace
blob171293887e7cc9846eaeb01978347c80b1305dc2
1 #autoload
3 _arch_namespace () { #double as arch_namespace_categories
4   local ARCHCMD="$1"
5   shift
6 # takes an integer argument specifying how many components:
7 # 1: category
8 # 2: branch
9 # 3: version
10 # 4: revision
11   local suffix expl archive=`$ARCHCMD my-default-archive 2> /dev/null`
12   local trailing_dashes=0
13   [[ -n $argv[(r)--trailing-dashes] ]] && trailing_dashes=1
14   local library
15   [[ -n $argv[(r)--library] ]] && library='library-';
16   local exclude_library_revisions=0
17   [[ -n $argv[(r)--exclude-library-revisions] ]] && exclude_library_revisions=1
19   if [ $1 -gt 1 ] || (( trailing_dashes )); then
20     suffix=(-q -S --)
21   fi
22   if [[ $PREFIX = */* ]]; then
23     compset -P '*/'
24     archive=${IPREFIX%/*}
25     _description -V categories expl "${library:-}categories in $archive"
26     compadd $suffix "$expl[@]" `$ARCHCMD ${library:-}categories $archive`
27   elif [ -z $IPREFIX ]; then
28     local index=$(( words[(i)-A] + 1 ))
29     (( index < CURRENT )) || index=$(( words[(i)--archive] + 1 ))
30     (( index < CURRENT )) && archive=$words[$index]
32     if [ $archive ]; then
33       _description -V categories expl "${library:-}categories in $archive"
34       compadd "$expl[@]" $suffix `$ARCHCMD ${library:-}categories $archive`
35     fi
37     _arch_archives "$ARCHCMD" -S / ${library:+--library}
38   fi
39   if [ $archive ] && [ $1 -gt 1 ] && [[ $PREFIX != *@* ]] \
40      && [[ $PREFIX = *--* ]]; then
41   #this match could be better
42     _arch_namespace_branches "$ARCHCMD" $(($1 - 1))
43   fi
46 (( $+functions[_arch_namespace_branches] )) ||
47 _arch_namespace_branches () {
48   local ARCHCMD="$1"
49   shift
50   local suffix expl
51   if [ $1 -gt 1 ] || (( $trailing_dashes )); then
52     suffix=(-q -S --)
53   fi
54   if [[ $IPREFIX != *-- ]]; then
55     compset -P 1 '*--'
56     local category=${IPREFIX%--}
57     _description -V branches expl "${library:-}branches"
58     compadd $suffix "$expl[@]" \
59       ${${(@)$($ARCHCMD ${library:-}branches $category)}##*--}
60   fi
61   if [ $1 -gt 1 ] && [[ $IPREFIX = *-- ]] && [[ $PREFIX = *--* ]]; then
62     _arch_namespace_versions "${ARCHCMD}" $(($1 - 1))
63   fi
66 (( $+functions[_arch_namespace_versions] )) ||
67 _arch_namespace_versions () {
68   local ARCHCMD="$1"
69   shift
70   local suffix expl
71   if [ $1 -gt 1 ]; then
72     suffix=(-q -S --)
73   fi
74   if [[ $IPREFIX != *--*-- ]] || [[ $IPREFIX != */*--*-- ]]; then
75     compset -P 1 '*--'
76     local branch=${IPREFIX%--}
77     _description -V versions expl "${library:-}versions"
78     compadd $suffix "$expl[@]" \
79       ${${(@)$($ARCHCMD ${library:-}versions $branch)}##*--}
80   fi
81   if [ $1 -gt 1 ] && [[ $IPREFIX = *--*-- ]] && ([[ $IPREFIX = */*--*-- ]] \
82     || [[ $PREFIX != */* ]]) && [[ $PREFIX = *--* ]]; then
83     _arch_namespace_revisions "${ARCHCMD}"
84   fi
87 (( $+functions[_arch_namespace_revisions] )) ||
88 _arch_namespace_revisions () {
89   local ARCHCMD="$1"
90   local expl
91   if [[ $IPREFIX != *--*--*-- ]] || [[ $IPREFIX != */*--*--*-- ]]; then
92     compset -P 1 '*--'
93     local version=${IPREFIX%--}
94     _description -V revisions expl "${library:-}revisions"
95     local completions c
96     completions=(
97       ${${(@)$($ARCHCMD ${library:-}revisions $version)}##*--}
98     )
99     (( exclude_library_revisions )) && \
100         foreach c ($($ARCHCMD library-revisions $version)); do completions[(r)$c]=(); done
101     compadd "$expl[@]" -a completions
102   fi
105 _arch_namespace "$@"