forked from canonical/charmcraft
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcompletion.bash
More file actions
121 lines (114 loc) · 3.47 KB
/
Copy pathcompletion.bash
File metadata and controls
121 lines (114 loc) · 3.47 KB
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
# -*- mode: sh; sh-shell: bash; -*-
# Copyright 2020 Canonical Ltd.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# For further info, check https://github.com/canonical/charmcraft
_charmcraft()
{
local cur prev words cword cmd cmds
cmds=(
build
create-lib
fetch-lib
help init
list-lib
login
logout
names
pack
publish-lib
register
register-bundle
release
resource-revisions
resources
revisions
status
upload
upload-resource
version
whoami
)
_init_completion || return
# only offer long options, as they should be self-explanatory (and
# it's not like it's more typing for the user)
globals=(--help --verbose --quiet --project-dir)
# if user just wrote --project-dir, only offer directories
if [ "$prev" = "--project-dir" ] || [ "$prev" = "-p" ]; then
_filedir -d
return
fi
# check if any of the words is a command: if yes, offer the options for that
# command (and the global ones), else offer the commands and global options
local w c
for w in "${words[@]}"; do
for c in "${cmds[@]}"; do
if [ "$c" = "$w" ]; then
cmd="$c"
break
fi
done
if [ "$cmd" ]; then
break
fi
done
if [ -z "$cmd" ]; then
# no command yet! show global options and the commands
COMPREPLY=( $(compgen -W "${globals[*]} ${cmds[*]}" -- "$cur") )
return
fi
# offer the options for the given command (and global ones, always available)
case "$cmd" in
build)
case "$prev" in
-r|--requirement)
_filedir txt
;;
-e|--entrypoint)
_filedir py
;;
-f|--from)
_filedir -d
;;
*)
COMPREPLY=( $(compgen -W "${globals[*]} --from --entrypoint --requirement" -- "$cur") )
;;
esac
;;
release)
COMPREPLY=( $(compgen -W "${globals[*]} --revision --channel --resource" -- "$cur") )
;;
init)
COMPREPLY=( $(compgen -W "${globals[*]} --name --author --series --force" -- "$cur") )
;;
upload)
COMPREPLY=( $(compgen -W "${globals[*]} --release" -- "$cur") )
;;
upload-resource)
case "$prev" in
--filepath)
_filedir
;;
*)
COMPREPLY=( $(compgen -W "${globals[*]} --filepath" -- "$cur") )
;;
esac
;;
*)
# by default just the global options
COMPREPLY=( $(compgen -W "${globals[*]}" -- "$cur") )
;;
esac
}
complete -F _charmcraft charmcraft