##// END OF EJS Templates
bash_completion: use correct command for listing shelves...
Sean Farley -
r20128:56108ee1 default
parent child Browse files
Show More
@@ -1,613 +1,613 b''
1 # bash completion for the Mercurial distributed SCM -*- sh -*-
1 # bash completion for the Mercurial distributed SCM -*- sh -*-
2
2
3 # Docs:
3 # Docs:
4 #
4 #
5 # If you source this file from your .bashrc, bash should be able to
5 # If you source this file from your .bashrc, bash should be able to
6 # complete a command line that uses hg with all the available commands
6 # complete a command line that uses hg with all the available commands
7 # and options and sometimes even arguments.
7 # and options and sometimes even arguments.
8 #
8 #
9 # Mercurial allows you to define additional commands through extensions.
9 # Mercurial allows you to define additional commands through extensions.
10 # Bash should be able to automatically figure out the name of these new
10 # Bash should be able to automatically figure out the name of these new
11 # commands and their options. See below for how to define _hg_opt_foo
11 # commands and their options. See below for how to define _hg_opt_foo
12 # and _hg_cmd_foo functions to fine-tune the completion for option and
12 # and _hg_cmd_foo functions to fine-tune the completion for option and
13 # non-option arguments, respectively.
13 # non-option arguments, respectively.
14 #
14 #
15 #
15 #
16 # Notes about completion for specific commands:
16 # Notes about completion for specific commands:
17 #
17 #
18 # - the completion function for the email command from the patchbomb
18 # - the completion function for the email command from the patchbomb
19 # extension will try to call _hg_emails to get a list of e-mail
19 # extension will try to call _hg_emails to get a list of e-mail
20 # addresses. It's up to the user to define this function. For
20 # addresses. It's up to the user to define this function. For
21 # example, put the addresses of the lists that you usually patchbomb
21 # example, put the addresses of the lists that you usually patchbomb
22 # in ~/.patchbomb-to and the addresses that you usually use to send
22 # in ~/.patchbomb-to and the addresses that you usually use to send
23 # the patchbombs in ~/.patchbomb-from and use something like this:
23 # the patchbombs in ~/.patchbomb-from and use something like this:
24 #
24 #
25 # _hg_emails()
25 # _hg_emails()
26 # {
26 # {
27 # if [ -r ~/.patchbomb-$1 ]; then
27 # if [ -r ~/.patchbomb-$1 ]; then
28 # cat ~/.patchbomb-$1
28 # cat ~/.patchbomb-$1
29 # fi
29 # fi
30 # }
30 # }
31 #
31 #
32 #
32 #
33 # Writing completion functions for additional commands:
33 # Writing completion functions for additional commands:
34 #
34 #
35 # If it exists, the function _hg_cmd_foo will be called without
35 # If it exists, the function _hg_cmd_foo will be called without
36 # arguments to generate the completion candidates for the hg command
36 # arguments to generate the completion candidates for the hg command
37 # "foo". If the command receives some arguments that aren't options
37 # "foo". If the command receives some arguments that aren't options
38 # even though they start with a "-", you can define a function called
38 # even though they start with a "-", you can define a function called
39 # _hg_opt_foo to generate the completion candidates. If _hg_opt_foo
39 # _hg_opt_foo to generate the completion candidates. If _hg_opt_foo
40 # doesn't return 0, regular completion for options is attempted.
40 # doesn't return 0, regular completion for options is attempted.
41 #
41 #
42 # In addition to the regular completion variables provided by bash,
42 # In addition to the regular completion variables provided by bash,
43 # the following variables are also set:
43 # the following variables are also set:
44 # - $hg - the hg program being used (e.g. /usr/bin/hg)
44 # - $hg - the hg program being used (e.g. /usr/bin/hg)
45 # - $cmd - the name of the hg command being completed
45 # - $cmd - the name of the hg command being completed
46 # - $cmd_index - the index of $cmd in $COMP_WORDS
46 # - $cmd_index - the index of $cmd in $COMP_WORDS
47 # - $cur - the current argument being completed
47 # - $cur - the current argument being completed
48 # - $prev - the argument before $cur
48 # - $prev - the argument before $cur
49 # - $global_args - "|"-separated list of global options that accept
49 # - $global_args - "|"-separated list of global options that accept
50 # an argument (e.g. '--cwd|-R|--repository')
50 # an argument (e.g. '--cwd|-R|--repository')
51 # - $canonical - 1 if we canonicalized $cmd before calling the function
51 # - $canonical - 1 if we canonicalized $cmd before calling the function
52 # 0 otherwise
52 # 0 otherwise
53 #
53 #
54
54
55 shopt -s extglob
55 shopt -s extglob
56
56
57 _hg_cmd()
57 _hg_cmd()
58 {
58 {
59 HGPLAIN=1 "$hg" "$@" 2>/dev/null
59 HGPLAIN=1 "$hg" "$@" 2>/dev/null
60 }
60 }
61
61
62 _hg_commands()
62 _hg_commands()
63 {
63 {
64 local commands
64 local commands
65 commands="$(HGPLAINEXCEPT=alias _hg_cmd debugcomplete "$cur")" || commands=""
65 commands="$(HGPLAINEXCEPT=alias _hg_cmd debugcomplete "$cur")" || commands=""
66 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$commands' -- "$cur"))
66 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$commands' -- "$cur"))
67 }
67 }
68
68
69 _hg_paths()
69 _hg_paths()
70 {
70 {
71 local paths="$(_hg_cmd paths -q)"
71 local paths="$(_hg_cmd paths -q)"
72 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$paths' -- "$cur"))
72 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$paths' -- "$cur"))
73 }
73 }
74
74
75 _hg_repos()
75 _hg_repos()
76 {
76 {
77 local i
77 local i
78 for i in $(compgen -d -- "$cur"); do
78 for i in $(compgen -d -- "$cur"); do
79 test ! -d "$i"/.hg || COMPREPLY=(${COMPREPLY[@]:-} "$i")
79 test ! -d "$i"/.hg || COMPREPLY=(${COMPREPLY[@]:-} "$i")
80 done
80 done
81 }
81 }
82
82
83 _hg_debugpathcomplete()
83 _hg_debugpathcomplete()
84 {
84 {
85 local files="$(_hg_cmd debugpathcomplete $1 "$cur")"
85 local files="$(_hg_cmd debugpathcomplete $1 "$cur")"
86 local IFS=$'\n'
86 local IFS=$'\n'
87 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$files' -- "$cur"))
87 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$files' -- "$cur"))
88 }
88 }
89
89
90 _hg_status()
90 _hg_status()
91 {
91 {
92 local files="$(_hg_cmd status -n$1 "glob:$cur**")"
92 local files="$(_hg_cmd status -n$1 "glob:$cur**")"
93 local IFS=$'\n'
93 local IFS=$'\n'
94 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$files' -- "$cur"))
94 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$files' -- "$cur"))
95 }
95 }
96
96
97 _hg_bookmarks()
97 _hg_bookmarks()
98 {
98 {
99 local bookmarks="$(_hg_cmd bookmarks -q)"
99 local bookmarks="$(_hg_cmd bookmarks -q)"
100 local IFS=$'\n'
100 local IFS=$'\n'
101 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$bookmarks' -- "$cur"))
101 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$bookmarks' -- "$cur"))
102 }
102 }
103
103
104 _hg_labels()
104 _hg_labels()
105 {
105 {
106 local labels="$(_hg_cmd debuglabelcomplete "$cur")"
106 local labels="$(_hg_cmd debuglabelcomplete "$cur")"
107 local IFS=$'\n'
107 local IFS=$'\n'
108 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$labels' -- "$cur"))
108 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$labels' -- "$cur"))
109 }
109 }
110
110
111 # this is "kind of" ugly...
111 # this is "kind of" ugly...
112 _hg_count_non_option()
112 _hg_count_non_option()
113 {
113 {
114 local i count=0
114 local i count=0
115 local filters="$1"
115 local filters="$1"
116
116
117 for ((i=1; $i<=$COMP_CWORD; i++)); do
117 for ((i=1; $i<=$COMP_CWORD; i++)); do
118 if [[ "${COMP_WORDS[i]}" != -* ]]; then
118 if [[ "${COMP_WORDS[i]}" != -* ]]; then
119 if [[ ${COMP_WORDS[i-1]} == @($filters|$global_args) ]]; then
119 if [[ ${COMP_WORDS[i-1]} == @($filters|$global_args) ]]; then
120 continue
120 continue
121 fi
121 fi
122 count=$(($count + 1))
122 count=$(($count + 1))
123 fi
123 fi
124 done
124 done
125
125
126 echo $(($count - 1))
126 echo $(($count - 1))
127 }
127 }
128
128
129 _hg_fix_wordlist()
129 _hg_fix_wordlist()
130 {
130 {
131 local LASTCHAR=' '
131 local LASTCHAR=' '
132 if [ ${#COMPREPLY[@]} = 1 ]; then
132 if [ ${#COMPREPLY[@]} = 1 ]; then
133 [ -d "$COMPREPLY" ] && LASTCHAR=/
133 [ -d "$COMPREPLY" ] && LASTCHAR=/
134 COMPREPLY=$(printf %q%s "$COMPREPLY" "$LASTCHAR")
134 COMPREPLY=$(printf %q%s "$COMPREPLY" "$LASTCHAR")
135 else
135 else
136 for ((i=0; i < ${#COMPREPLY[@]}; i++)); do
136 for ((i=0; i < ${#COMPREPLY[@]}; i++)); do
137 [ -d "${COMPREPLY[$i]}" ] && COMPREPLY[$i]=${COMPREPLY[$i]}/
137 [ -d "${COMPREPLY[$i]}" ] && COMPREPLY[$i]=${COMPREPLY[$i]}/
138 done
138 done
139 fi
139 fi
140 }
140 }
141
141
142 _hg()
142 _hg()
143 {
143 {
144 local cur prev cmd cmd_index opts i aliashg
144 local cur prev cmd cmd_index opts i aliashg
145 # global options that receive an argument
145 # global options that receive an argument
146 local global_args='--cwd|-R|--repository'
146 local global_args='--cwd|-R|--repository'
147 local hg="$1"
147 local hg="$1"
148 local canonical=0
148 local canonical=0
149
149
150 aliashg=$(alias $hg 2>/dev/null)
150 aliashg=$(alias $hg 2>/dev/null)
151 if [[ -n "$aliashg" ]]; then
151 if [[ -n "$aliashg" ]]; then
152 aliashg=${aliashg#"alias $hg='"}
152 aliashg=${aliashg#"alias $hg='"}
153 aliashg=${aliashg%"'"}
153 aliashg=${aliashg%"'"}
154 hg=$aliashg
154 hg=$aliashg
155 fi
155 fi
156
156
157 COMPREPLY=()
157 COMPREPLY=()
158 cur="$2"
158 cur="$2"
159 prev="$3"
159 prev="$3"
160
160
161 # searching for the command
161 # searching for the command
162 # (first non-option argument that doesn't follow a global option that
162 # (first non-option argument that doesn't follow a global option that
163 # receives an argument)
163 # receives an argument)
164 for ((i=1; $i<=$COMP_CWORD; i++)); do
164 for ((i=1; $i<=$COMP_CWORD; i++)); do
165 if [[ ${COMP_WORDS[i]} != -* ]]; then
165 if [[ ${COMP_WORDS[i]} != -* ]]; then
166 if [[ ${COMP_WORDS[i-1]} != @($global_args) ]]; then
166 if [[ ${COMP_WORDS[i-1]} != @($global_args) ]]; then
167 cmd="${COMP_WORDS[i]}"
167 cmd="${COMP_WORDS[i]}"
168 cmd_index=$i
168 cmd_index=$i
169 break
169 break
170 fi
170 fi
171 fi
171 fi
172 done
172 done
173
173
174 if [[ "$cur" == -* ]]; then
174 if [[ "$cur" == -* ]]; then
175 if [ "$(type -t "_hg_opt_$cmd")" = function ] && "_hg_opt_$cmd"; then
175 if [ "$(type -t "_hg_opt_$cmd")" = function ] && "_hg_opt_$cmd"; then
176 _hg_fix_wordlist
176 _hg_fix_wordlist
177 return
177 return
178 fi
178 fi
179
179
180 opts=$(_hg_cmd debugcomplete --options "$cmd")
180 opts=$(_hg_cmd debugcomplete --options "$cmd")
181
181
182 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$opts' -- "$cur"))
182 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$opts' -- "$cur"))
183 _hg_fix_wordlist
183 _hg_fix_wordlist
184 return
184 return
185 fi
185 fi
186
186
187 # global options
187 # global options
188 case "$prev" in
188 case "$prev" in
189 -R|--repository)
189 -R|--repository)
190 _hg_paths
190 _hg_paths
191 _hg_repos
191 _hg_repos
192 _hg_fix_wordlist
192 _hg_fix_wordlist
193 return
193 return
194 ;;
194 ;;
195 --cwd)
195 --cwd)
196 # Stick with default bash completion
196 # Stick with default bash completion
197 _hg_fix_wordlist
197 _hg_fix_wordlist
198 return
198 return
199 ;;
199 ;;
200 esac
200 esac
201
201
202 if [ -z "$cmd" ] || [ $COMP_CWORD -eq $i ]; then
202 if [ -z "$cmd" ] || [ $COMP_CWORD -eq $i ]; then
203 _hg_commands
203 _hg_commands
204 _hg_fix_wordlist
204 _hg_fix_wordlist
205 return
205 return
206 fi
206 fi
207
207
208 # try to generate completion candidates for whatever command the user typed
208 # try to generate completion candidates for whatever command the user typed
209 local help
209 local help
210 if _hg_command_specific; then
210 if _hg_command_specific; then
211 _hg_fix_wordlist
211 _hg_fix_wordlist
212 return
212 return
213 fi
213 fi
214
214
215 # canonicalize the command name and try again
215 # canonicalize the command name and try again
216 help=$(_hg_cmd help "$cmd")
216 help=$(_hg_cmd help "$cmd")
217 if [ $? -ne 0 ]; then
217 if [ $? -ne 0 ]; then
218 # Probably either the command doesn't exist or it's ambiguous
218 # Probably either the command doesn't exist or it's ambiguous
219 return
219 return
220 fi
220 fi
221 cmd=${help#hg }
221 cmd=${help#hg }
222 cmd=${cmd%%[$' \n']*}
222 cmd=${cmd%%[$' \n']*}
223 canonical=1
223 canonical=1
224 _hg_command_specific
224 _hg_command_specific
225 _hg_fix_wordlist
225 _hg_fix_wordlist
226 }
226 }
227
227
228 _hg_command_specific()
228 _hg_command_specific()
229 {
229 {
230 if [ "$(type -t "_hg_cmd_$cmd")" = function ]; then
230 if [ "$(type -t "_hg_cmd_$cmd")" = function ]; then
231 "_hg_cmd_$cmd"
231 "_hg_cmd_$cmd"
232 return 0
232 return 0
233 fi
233 fi
234
234
235 if [ "$cmd" != status ] && [ "$prev" = -r ] || [ "$prev" == --rev ]; then
235 if [ "$cmd" != status ] && [ "$prev" = -r ] || [ "$prev" == --rev ]; then
236 if [ $canonical = 1 ]; then
236 if [ $canonical = 1 ]; then
237 _hg_labels
237 _hg_labels
238 return 0
238 return 0
239 elif [[ status != "$cmd"* ]]; then
239 elif [[ status != "$cmd"* ]]; then
240 _hg_labels
240 _hg_labels
241 return 0
241 return 0
242 else
242 else
243 return 1
243 return 1
244 fi
244 fi
245 fi
245 fi
246
246
247 local aliascmd=$(_hg_cmd showconfig alias.$cmd | awk '{print $1}')
247 local aliascmd=$(_hg_cmd showconfig alias.$cmd | awk '{print $1}')
248 [ -n "$aliascmd" ] && cmd=$aliascmd
248 [ -n "$aliascmd" ] && cmd=$aliascmd
249
249
250 case "$cmd" in
250 case "$cmd" in
251 help)
251 help)
252 _hg_commands
252 _hg_commands
253 ;;
253 ;;
254 export)
254 export)
255 if _hg_ext_mq_patchlist qapplied && [ "${COMPREPLY[*]}" ]; then
255 if _hg_ext_mq_patchlist qapplied && [ "${COMPREPLY[*]}" ]; then
256 return 0
256 return 0
257 fi
257 fi
258 _hg_labels
258 _hg_labels
259 ;;
259 ;;
260 manifest|update|up|checkout|co)
260 manifest|update|up|checkout|co)
261 _hg_labels
261 _hg_labels
262 ;;
262 ;;
263 pull|push|outgoing|incoming)
263 pull|push|outgoing|incoming)
264 _hg_paths
264 _hg_paths
265 _hg_repos
265 _hg_repos
266 ;;
266 ;;
267 paths)
267 paths)
268 _hg_paths
268 _hg_paths
269 ;;
269 ;;
270 add)
270 add)
271 _hg_status "u"
271 _hg_status "u"
272 ;;
272 ;;
273 merge)
273 merge)
274 _hg_labels
274 _hg_labels
275 ;;
275 ;;
276 commit|ci|record)
276 commit|ci|record)
277 _hg_status "mar"
277 _hg_status "mar"
278 ;;
278 ;;
279 remove|rm)
279 remove|rm)
280 _hg_debugpathcomplete -n
280 _hg_debugpathcomplete -n
281 ;;
281 ;;
282 forget)
282 forget)
283 _hg_debugpathcomplete -fa
283 _hg_debugpathcomplete -fa
284 ;;
284 ;;
285 diff)
285 diff)
286 _hg_status "mar"
286 _hg_status "mar"
287 ;;
287 ;;
288 revert)
288 revert)
289 _hg_debugpathcomplete
289 _hg_debugpathcomplete
290 ;;
290 ;;
291 clone)
291 clone)
292 local count=$(_hg_count_non_option)
292 local count=$(_hg_count_non_option)
293 if [ $count = 1 ]; then
293 if [ $count = 1 ]; then
294 _hg_paths
294 _hg_paths
295 fi
295 fi
296 _hg_repos
296 _hg_repos
297 ;;
297 ;;
298 debugindex|debugindexdot)
298 debugindex|debugindexdot)
299 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -f -X "!*.i" -- "$cur"))
299 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -f -X "!*.i" -- "$cur"))
300 ;;
300 ;;
301 debugdata)
301 debugdata)
302 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -f -X "!*.d" -- "$cur"))
302 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -f -X "!*.d" -- "$cur"))
303 ;;
303 ;;
304 *)
304 *)
305 return 1
305 return 1
306 ;;
306 ;;
307 esac
307 esac
308
308
309 return 0
309 return 0
310 }
310 }
311
311
312 complete -o bashdefault -o default -o nospace -F _hg hg \
312 complete -o bashdefault -o default -o nospace -F _hg hg \
313 || complete -o default -o nospace -F _hg hg
313 || complete -o default -o nospace -F _hg hg
314
314
315
315
316 # Completion for commands provided by extensions
316 # Completion for commands provided by extensions
317
317
318 # bookmarks
318 # bookmarks
319 _hg_cmd_bookmarks()
319 _hg_cmd_bookmarks()
320 {
320 {
321 _hg_bookmarks
321 _hg_bookmarks
322 return
322 return
323 }
323 }
324
324
325 # mq
325 # mq
326 _hg_ext_mq_patchlist()
326 _hg_ext_mq_patchlist()
327 {
327 {
328 local patches
328 local patches
329 patches=$(_hg_cmd $1)
329 patches=$(_hg_cmd $1)
330 if [ $? -eq 0 ] && [ "$patches" ]; then
330 if [ $? -eq 0 ] && [ "$patches" ]; then
331 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$patches' -- "$cur"))
331 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$patches' -- "$cur"))
332 return 0
332 return 0
333 fi
333 fi
334 return 1
334 return 1
335 }
335 }
336
336
337 _hg_ext_mq_queues()
337 _hg_ext_mq_queues()
338 {
338 {
339 local root=$(_hg_cmd root)
339 local root=$(_hg_cmd root)
340 local n
340 local n
341 for n in $(cd "$root"/.hg && compgen -d -- "$cur"); do
341 for n in $(cd "$root"/.hg && compgen -d -- "$cur"); do
342 # I think we're usually not interested in the regular "patches" queue
342 # I think we're usually not interested in the regular "patches" queue
343 # so just filter it.
343 # so just filter it.
344 if [ "$n" != patches ] && [ -e "$root/.hg/$n/series" ]; then
344 if [ "$n" != patches ] && [ -e "$root/.hg/$n/series" ]; then
345 COMPREPLY=(${COMPREPLY[@]:-} "$n")
345 COMPREPLY=(${COMPREPLY[@]:-} "$n")
346 fi
346 fi
347 done
347 done
348 }
348 }
349
349
350 _hg_cmd_qpop()
350 _hg_cmd_qpop()
351 {
351 {
352 if [[ "$prev" = @(-n|--name) ]]; then
352 if [[ "$prev" = @(-n|--name) ]]; then
353 _hg_ext_mq_queues
353 _hg_ext_mq_queues
354 return
354 return
355 fi
355 fi
356 _hg_ext_mq_patchlist qapplied
356 _hg_ext_mq_patchlist qapplied
357 }
357 }
358
358
359 _hg_cmd_qpush()
359 _hg_cmd_qpush()
360 {
360 {
361 if [[ "$prev" = @(-n|--name) ]]; then
361 if [[ "$prev" = @(-n|--name) ]]; then
362 _hg_ext_mq_queues
362 _hg_ext_mq_queues
363 return
363 return
364 fi
364 fi
365 _hg_ext_mq_patchlist qunapplied
365 _hg_ext_mq_patchlist qunapplied
366 }
366 }
367
367
368 _hg_cmd_qgoto()
368 _hg_cmd_qgoto()
369 {
369 {
370 if [[ "$prev" = @(-n|--name) ]]; then
370 if [[ "$prev" = @(-n|--name) ]]; then
371 _hg_ext_mq_queues
371 _hg_ext_mq_queues
372 return
372 return
373 fi
373 fi
374 _hg_ext_mq_patchlist qseries
374 _hg_ext_mq_patchlist qseries
375 }
375 }
376
376
377 _hg_cmd_qdelete()
377 _hg_cmd_qdelete()
378 {
378 {
379 local qcmd=qunapplied
379 local qcmd=qunapplied
380 if [[ "$prev" = @(-r|--rev) ]]; then
380 if [[ "$prev" = @(-r|--rev) ]]; then
381 qcmd=qapplied
381 qcmd=qapplied
382 fi
382 fi
383 _hg_ext_mq_patchlist $qcmd
383 _hg_ext_mq_patchlist $qcmd
384 }
384 }
385
385
386 _hg_cmd_qfinish()
386 _hg_cmd_qfinish()
387 {
387 {
388 if [[ "$prev" = @(-a|--applied) ]]; then
388 if [[ "$prev" = @(-a|--applied) ]]; then
389 return
389 return
390 fi
390 fi
391 _hg_ext_mq_patchlist qapplied
391 _hg_ext_mq_patchlist qapplied
392 }
392 }
393
393
394 _hg_cmd_qsave()
394 _hg_cmd_qsave()
395 {
395 {
396 if [[ "$prev" = @(-n|--name) ]]; then
396 if [[ "$prev" = @(-n|--name) ]]; then
397 _hg_ext_mq_queues
397 _hg_ext_mq_queues
398 return
398 return
399 fi
399 fi
400 }
400 }
401
401
402 _hg_cmd_rebase() {
402 _hg_cmd_rebase() {
403 if [[ "$prev" = @(-s|--source|-d|--dest|-b|--base|-r|--rev) ]]; then
403 if [[ "$prev" = @(-s|--source|-d|--dest|-b|--base|-r|--rev) ]]; then
404 _hg_labels
404 _hg_labels
405 return
405 return
406 fi
406 fi
407 }
407 }
408
408
409 _hg_cmd_strip()
409 _hg_cmd_strip()
410 {
410 {
411 _hg_labels
411 _hg_labels
412 }
412 }
413
413
414 _hg_cmd_qcommit()
414 _hg_cmd_qcommit()
415 {
415 {
416 local root=$(_hg_cmd root)
416 local root=$(_hg_cmd root)
417 # this is run in a sub-shell, so we can't use _hg_status
417 # this is run in a sub-shell, so we can't use _hg_status
418 local files=$(cd "$root/.hg/patches" && _hg_cmd status -nmar)
418 local files=$(cd "$root/.hg/patches" && _hg_cmd status -nmar)
419 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$files' -- "$cur"))
419 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$files' -- "$cur"))
420 }
420 }
421
421
422 _hg_cmd_qfold()
422 _hg_cmd_qfold()
423 {
423 {
424 _hg_ext_mq_patchlist qunapplied
424 _hg_ext_mq_patchlist qunapplied
425 }
425 }
426
426
427 _hg_cmd_qrename()
427 _hg_cmd_qrename()
428 {
428 {
429 _hg_ext_mq_patchlist qseries
429 _hg_ext_mq_patchlist qseries
430 }
430 }
431
431
432 _hg_cmd_qheader()
432 _hg_cmd_qheader()
433 {
433 {
434 _hg_ext_mq_patchlist qseries
434 _hg_ext_mq_patchlist qseries
435 }
435 }
436
436
437 _hg_cmd_qclone()
437 _hg_cmd_qclone()
438 {
438 {
439 local count=$(_hg_count_non_option)
439 local count=$(_hg_count_non_option)
440 if [ $count = 1 ]; then
440 if [ $count = 1 ]; then
441 _hg_paths
441 _hg_paths
442 fi
442 fi
443 _hg_repos
443 _hg_repos
444 }
444 }
445
445
446 _hg_ext_mq_guards()
446 _hg_ext_mq_guards()
447 {
447 {
448 _hg_cmd qselect --series | sed -e 's/^.//'
448 _hg_cmd qselect --series | sed -e 's/^.//'
449 }
449 }
450
450
451 _hg_cmd_qselect()
451 _hg_cmd_qselect()
452 {
452 {
453 local guards=$(_hg_ext_mq_guards)
453 local guards=$(_hg_ext_mq_guards)
454 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$guards' -- "$cur"))
454 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$guards' -- "$cur"))
455 }
455 }
456
456
457 _hg_cmd_qguard()
457 _hg_cmd_qguard()
458 {
458 {
459 local prefix=''
459 local prefix=''
460
460
461 if [[ "$cur" == +* ]]; then
461 if [[ "$cur" == +* ]]; then
462 prefix=+
462 prefix=+
463 elif [[ "$cur" == -* ]]; then
463 elif [[ "$cur" == -* ]]; then
464 prefix=-
464 prefix=-
465 fi
465 fi
466 local ncur=${cur#[-+]}
466 local ncur=${cur#[-+]}
467
467
468 if ! [ "$prefix" ]; then
468 if ! [ "$prefix" ]; then
469 _hg_ext_mq_patchlist qseries
469 _hg_ext_mq_patchlist qseries
470 return
470 return
471 fi
471 fi
472
472
473 local guards=$(_hg_ext_mq_guards)
473 local guards=$(_hg_ext_mq_guards)
474 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -P $prefix -W '$guards' -- "$ncur"))
474 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -P $prefix -W '$guards' -- "$ncur"))
475 }
475 }
476
476
477 _hg_opt_qguard()
477 _hg_opt_qguard()
478 {
478 {
479 local i
479 local i
480 for ((i=cmd_index+1; i<=COMP_CWORD; i++)); do
480 for ((i=cmd_index+1; i<=COMP_CWORD; i++)); do
481 if [[ ${COMP_WORDS[i]} != -* ]]; then
481 if [[ ${COMP_WORDS[i]} != -* ]]; then
482 if [[ ${COMP_WORDS[i-1]} != @($global_args) ]]; then
482 if [[ ${COMP_WORDS[i-1]} != @($global_args) ]]; then
483 _hg_cmd_qguard
483 _hg_cmd_qguard
484 return 0
484 return 0
485 fi
485 fi
486 elif [ "${COMP_WORDS[i]}" = -- ]; then
486 elif [ "${COMP_WORDS[i]}" = -- ]; then
487 _hg_cmd_qguard
487 _hg_cmd_qguard
488 return 0
488 return 0
489 fi
489 fi
490 done
490 done
491 return 1
491 return 1
492 }
492 }
493
493
494 _hg_cmd_qqueue()
494 _hg_cmd_qqueue()
495 {
495 {
496 local q
496 local q
497 local queues
497 local queues
498 local opts="--list --create --rename --delete --purge"
498 local opts="--list --create --rename --delete --purge"
499
499
500 queues=$( _hg_cmd qqueue --quiet )
500 queues=$( _hg_cmd qqueue --quiet )
501
501
502 COMPREPLY=( $( compgen -W "${opts} ${queues}" "${cur}" ) )
502 COMPREPLY=( $( compgen -W "${opts} ${queues}" "${cur}" ) )
503 }
503 }
504
504
505
505
506 # hbisect
506 # hbisect
507 _hg_cmd_bisect()
507 _hg_cmd_bisect()
508 {
508 {
509 local i subcmd
509 local i subcmd
510
510
511 # find the sub-command
511 # find the sub-command
512 for ((i=cmd_index+1; i<=COMP_CWORD; i++)); do
512 for ((i=cmd_index+1; i<=COMP_CWORD; i++)); do
513 if [[ ${COMP_WORDS[i]} != -* ]]; then
513 if [[ ${COMP_WORDS[i]} != -* ]]; then
514 if [[ ${COMP_WORDS[i-1]} != @($global_args) ]]; then
514 if [[ ${COMP_WORDS[i-1]} != @($global_args) ]]; then
515 subcmd="${COMP_WORDS[i]}"
515 subcmd="${COMP_WORDS[i]}"
516 break
516 break
517 fi
517 fi
518 fi
518 fi
519 done
519 done
520
520
521 if [ -z "$subcmd" ] || [ $COMP_CWORD -eq $i ] || [ "$subcmd" = help ]; then
521 if [ -z "$subcmd" ] || [ $COMP_CWORD -eq $i ] || [ "$subcmd" = help ]; then
522 COMPREPLY=(${COMPREPLY[@]:-}
522 COMPREPLY=(${COMPREPLY[@]:-}
523 $(compgen -W 'bad good help init next reset' -- "$cur"))
523 $(compgen -W 'bad good help init next reset' -- "$cur"))
524 return
524 return
525 fi
525 fi
526
526
527 case "$subcmd" in
527 case "$subcmd" in
528 good|bad)
528 good|bad)
529 _hg_labels
529 _hg_labels
530 ;;
530 ;;
531 esac
531 esac
532
532
533 return
533 return
534 }
534 }
535
535
536
536
537 # patchbomb
537 # patchbomb
538 _hg_cmd_email()
538 _hg_cmd_email()
539 {
539 {
540 case "$prev" in
540 case "$prev" in
541 -c|--cc|-t|--to|-f|--from|--bcc)
541 -c|--cc|-t|--to|-f|--from|--bcc)
542 # we need an e-mail address. let the user provide a function
542 # we need an e-mail address. let the user provide a function
543 # to get them
543 # to get them
544 if [ "$(type -t _hg_emails)" = function ]; then
544 if [ "$(type -t _hg_emails)" = function ]; then
545 local arg=to
545 local arg=to
546 if [[ "$prev" == @(-f|--from) ]]; then
546 if [[ "$prev" == @(-f|--from) ]]; then
547 arg=from
547 arg=from
548 fi
548 fi
549 local addresses=$(_hg_emails $arg)
549 local addresses=$(_hg_emails $arg)
550 COMPREPLY=(${COMPREPLY[@]:-}
550 COMPREPLY=(${COMPREPLY[@]:-}
551 $(compgen -W '$addresses' -- "$cur"))
551 $(compgen -W '$addresses' -- "$cur"))
552 fi
552 fi
553 return
553 return
554 ;;
554 ;;
555 -m|--mbox)
555 -m|--mbox)
556 # fallback to standard filename completion
556 # fallback to standard filename completion
557 return
557 return
558 ;;
558 ;;
559 -s|--subject)
559 -s|--subject)
560 # free form string
560 # free form string
561 return
561 return
562 ;;
562 ;;
563 esac
563 esac
564
564
565 _hg_labels
565 _hg_labels
566 return
566 return
567 }
567 }
568
568
569
569
570 # gpg
570 # gpg
571 _hg_cmd_sign()
571 _hg_cmd_sign()
572 {
572 {
573 _hg_labels
573 _hg_labels
574 }
574 }
575
575
576
576
577 # transplant
577 # transplant
578 _hg_cmd_transplant()
578 _hg_cmd_transplant()
579 {
579 {
580 case "$prev" in
580 case "$prev" in
581 -s|--source)
581 -s|--source)
582 _hg_paths
582 _hg_paths
583 _hg_repos
583 _hg_repos
584 return
584 return
585 ;;
585 ;;
586 --filter)
586 --filter)
587 # standard filename completion
587 # standard filename completion
588 return
588 return
589 ;;
589 ;;
590 esac
590 esac
591
591
592 # all other transplant options values and command parameters are revisions
592 # all other transplant options values and command parameters are revisions
593 _hg_labels
593 _hg_labels
594 return
594 return
595 }
595 }
596
596
597 # shelve
597 # shelve
598 _hg_shelves()
598 _hg_shelves()
599 {
599 {
600 local shelves="$(_hg_cmd unshelve -l .)"
600 local shelves="$(_hg_cmd shelve -ql)"
601 local IFS=$'\n'
601 local IFS=$'\n'
602 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$shelves' -- "$cur"))
602 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$shelves' -- "$cur"))
603 }
603 }
604
604
605 _hg_cmd_shelve()
605 _hg_cmd_shelve()
606 {
606 {
607 _hg_status "mard"
607 _hg_status "mard"
608 }
608 }
609
609
610 _hg_cmd_unshelve()
610 _hg_cmd_unshelve()
611 {
611 {
612 _hg_shelves
612 _hg_shelves
613 }
613 }
General Comments 0
You need to be logged in to leave comments. Login now