1#autoload 2 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 18 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] 31 32 if [ $archive ]; then 33 _description -V categories expl "${library:-}categories in $archive" 34 compadd "$expl[@]" $suffix `$ARCHCMD ${library:-}categories $archive` 35 fi 36 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 44} 45 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 64} 65 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 85} 86 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 103} 104 105_arch_namespace "$@" 106