1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
|
#compdef dcut
# TODO: dcut supports two ways to be called:
# * dcut HOST COMMAND ...
# * dcut COMMAND ...
# So ideally, if the first argument is completed, both commands and hosts should
# be offered. If host is given, the second argument should be completed as
# command and if not, it should be completed as command specific option.
function _dput_hosts() {
local expl
if ( [[ ${+_dput_cfhosts} -eq 0 ]] || _cache_invalid dputhosts ) && ! _retrieve_cache dputhosts; then
local cmd
if _pick_variant dputng="usage: dput" dput -H ; then
cmd=(dirt hosts)
else
cmd=(dput -H)
fi
_dput_cfhosts=(${${(M)${(f)"$($cmd)"}:#*=>*}/ =>*/})
_store_cache dputhosts _dput_cfhosts
fi
_wanted dputhosts expl 'target host' compadd -a _dput_cfhosts
}
function _dcut_commands() {
local -a cmds
if _pick_variant dcutng="usage: dcut" dcut -v ; then
cmds=(
dm:'manage Debian Maintainer permissions'
break-the-archive:'break the archive'
reschedule:'reschedule a deferred upload'
cancel:'cancel a deferred upload'
rm:'remove a file from the upload queue'
upload:'upload a command file'
)
else
cmds=(
rm:'remove a file from the upload queue'
cancel:'cancel a deferred upload'
reschedule:'reschedule a deferred upload'
)
fi
_describe -t commands command cmds
}
function _dcut() {
local -a all_opts dcut_opts dcut_ng_opts
local state line context
local -A opt_args
local curcontext="${curcontext}"
all_opts=(
'(-c --config)'{-c,--config=}'[specify config file]:config file:_files'
'(-h --help)'{-h,--help}'[show help message and exit]'
'(-m --maintainer)'{-m,--maintainer=}'[use maintainer for upload field and GPG key selection]:maintainer address'
'(-k --keyid)'{-k,--keyid}'[use key id for signing]:keyid'
'(-O --output)'{-O,--output=}'[write command file to file instead of uploading]:output file:_files'
'(-P --passive)'{-P,--passive}'[use passive FTP for uploads]'
'(-v --version)'{-v,--version}'[show version information]'
': :_dcut_commands'
)
dcut_opts=(
'(-d --debug)'{-d,--debug}'[debug mode]'
'(-s --simulate)'{-s,--simulate}'[simulate an upload only]'
'(-i --input)'{-i,--input=}'[create commands file to remove every file listed in the changes file]:changes file:_files -g"*.changes(-.)"'
'(-U --upload)'{-U,--upload=}'[upload commands file]:commands file:_files'
'(--host 1)'{--host=}'[upload to host if it is named like a command]:host:_dput_hosts'
'*:: :->dcut_command_arguments'
)
dcut_ng_opts=(
'*'{-d,--debug}'[enable debug messages, repeat twice to increase the verbosity level]'
'*'{-s,--simulate}'[simulate an upload only, repeat twice to increase level of simulation]'
'*:: :->dcut_ng_command_arguments'
)
if _pick_variant dcutng="usage: dcut" dcut -v ; then
_arguments -C \
"$all_opts[@]" "$dcut_ng_opts[@]" && return
else
_arguments -C \
"$all_opts[@]" "$dcut_opts[@]" && return
fi
case $state in
(dcut_command_arguments)
# arguments to dcut commands
local -a opts
case ${line[1]} in
(cancel)
# dcut cancel arguments
opts=(
'1::changes file:_files -g"*.changes(-.)"'
)
;;
(reschedule)
# dcut reschedule arguments
opts=(
'1::changes file:_files -g"*.changes(-.)"'
'2::new delayed queue:(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)'
)
;;
(rm)
# dcut rm arguments
opts=(
'--searchdirs[search in all directories for the given files]'
'1::file to be deleted:_files'
)
;;
esac
_arguments "$opts[@]" && return
;;
(dcut_ng_command_arguments)
# arguments to dput-ng's dcut commands
local -a opts
case ${line[1]} in
(cancel)
# dcut cancel arguments
opts=(
'(-f --filename)'{-f,--filename}'[.changes file name of the upload to be cancelled]:file name:_files -g"*.changes(-.)"'
)
;;
(dm)
# dcut dm arguments
opts=(
'--uid[full name and address or GPG fingerprint of the Debian Maintainer]'
'*--allow[grant permission to upload a source package]:source package'
'*--deny[remove permission to upload a source package]:source package'
)
;;
(reschedule)
# dcut reschedule arguments
opts=(
'(-f --filename)'{-f,--filename}'[.changes file name to be rescheduled]:file name:_files -g"*.changes(-.)"'
'(-d --days)'{-d,--days}'[new delayed queue]:days:(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)'
)
;;
(rm)
# dcut rm arguments
opts=(
'*'{-f,--filename}'[file name to be removed]:file name:_files'
'--searchdirs[search in all directories for the given files]'
)
;;
(upload)
# dcut upload arguments
opts=(
'-f --filename)'{-f,--filename}'[file to be uploaded]:file name:_files'
)
;;
esac
_arguments "$opts[@]" && return
;;
esac
}
_dcut "$@"
|