Commit 158407151359c11692021103dac66626a851aded

Authored by Shrikant Sharat
1 parent aa510273db

Refactoring of private functions.

Private functions should all be prefixed with `-bundle-`.

Showing 1 changed file with 17 additions and 18 deletions Inline Diff

1 #!/bin/zsh 1 #!/bin/zsh
2 2
3 # Each line in this string has the following entries separated by a space 3 # Each line in this string has the following entries separated by a space
4 # character. 4 # character.
5 # <repo-url>, <plugin-location>, <bundle-type> 5 # <repo-url>, <plugin-location>, <bundle-type>
6 # FIXME: Is not kept local by zsh! 6 # FIXME: Is not kept local by zsh!
7 local _ANTIGEN_BUNDLE_RECORD="" 7 local _ANTIGEN_BUNDLE_RECORD=""
8 8
9 # Syntaxes 9 # Syntaxes
10 # bundle <url> [<loc>=/] 10 # bundle <url> [<loc>=/]
11 bundle () { 11 bundle () {
12 12
13 # Bundle spec arguments' default values. 13 # Bundle spec arguments' default values.
14 local url="$ANTIGEN_DEFAULT_REPO_URL" 14 local url="$ANTIGEN_DEFAULT_REPO_URL"
15 local loc=/ 15 local loc=/
16 local btype=plugin 16 local btype=plugin
17 17
18 # Set spec values based on the positional arguments. 18 # Set spec values based on the positional arguments.
19 local position_args='url loc' 19 local position_args='url loc'
20 local i=1 20 local i=1
21 while ! [[ -z $1 || $1 == --*=* ]]; do 21 while ! [[ -z $1 || $1 == --*=* ]]; do
22 local arg_name="$(echo "$position_args" | cut -d\ -f$i)" 22 local arg_name="$(echo "$position_args" | cut -d\ -f$i)"
23 local arg_value="$1" 23 local arg_value="$1"
24 eval "local $arg_name='$arg_value'" 24 eval "local $arg_name='$arg_value'"
25 shift 25 shift
26 i=$(($i + 1)) 26 i=$(($i + 1))
27 done 27 done
28 28
29 # Check if url is just the plugin name. Super short syntax. 29 # Check if url is just the plugin name. Super short syntax.
30 if [[ "$url" != */* ]]; then 30 if [[ "$url" != */* ]]; then
31 loc="plugins/$url" 31 loc="plugins/$url"
32 url="$ANTIGEN_DEFAULT_REPO_URL" 32 url="$ANTIGEN_DEFAULT_REPO_URL"
33 fi 33 fi
34 34
35 # Set spec values from keyword arguments, if any. The remaining arguments 35 # Set spec values from keyword arguments, if any. The remaining arguments
36 # are all assumed to be keyword arguments. 36 # are all assumed to be keyword arguments.
37 while [[ $1 == --*=* ]]; do 37 while [[ $1 == --*=* ]]; do
38 local arg_name="$(echo "$1" | cut -d= -f1 | sed 's/^--//')" 38 local arg_name="$(echo "$1" | cut -d= -f1 | sed 's/^--//')"
39 local arg_value="$(echo "$1" | cut -d= -f2)" 39 local arg_value="$(echo "$1" | cut -d= -f2)"
40 eval "local $arg_name='$arg_value'" 40 eval "local $arg_name='$arg_value'"
41 shift 41 shift
42 done 42 done
43 43
44 # Resolve the url. 44 # Resolve the url.
45 if [[ $url != git://* && $url != https://* ]]; then 45 if [[ $url != git://* && $url != https://* ]]; then
46 url="${url%.git}" 46 url="${url%.git}"
47 url="https://github.com/$url.git" 47 url="https://github.com/$url.git"
48 fi 48 fi
49 49
50 # Add it to the record. 50 # Add it to the record.
51 _ANTIGEN_BUNDLE_RECORD="$_ANTIGEN_BUNDLE_RECORD\n$url $loc $btype" 51 _ANTIGEN_BUNDLE_RECORD="$_ANTIGEN_BUNDLE_RECORD\n$url $loc $btype"
52 52
53 -antigen-ensure-repo "$url" 53 -bundle-ensure-repo "$url"
54 54
55 bundle-load "$url" "$loc" "$btype" 55 -bundle-load "$url" "$loc" "$btype"
56 56
57 } 57 }
58 58
59 -antigen-get-clone-dir () { 59 bundle-update () {
60 # Update your bundles, i.e., `git pull` in all the plugin repos.
61 -bundle-echo-record | awk '{print $1}' | sort -u | while read url; do
62 -bundle-ensure-repo --update "$url"
63 done
64 }
65
66 -bundle-get-clone-dir () {
60 # Takes a repo url and gives out the path that this url needs to be cloned 67 # Takes a repo url and gives out the path that this url needs to be cloned
61 # to. Doesn't actually clone anything. 68 # to. Doesn't actually clone anything.
62 # TODO: Memoize? 69 # TODO: Memoize?
63 echo -n $ADOTDIR/repos/ 70 echo -n $ADOTDIR/repos/
64 echo "$1" | sed \ 71 echo "$1" | sed \
65 -e 's/\.git$//' \ 72 -e 's/\.git$//' \
66 -e 's./.-SLASH-.g' \ 73 -e 's./.-SLASH-.g' \
67 -e 's.:.-COLON-.g' 74 -e 's.:.-COLON-.g'
68 } 75 }
69 76
70 -antigen-get-clone-url () { 77 -bundle-get-clone-url () {
71 # Takes a repo's clone dir and gives out the repo's original url that was 78 # Takes a repo's clone dir and gives out the repo's original url that was
72 # used to create the given directory path. 79 # used to create the given directory path.
73 # TODO: Memoize? 80 # TODO: Memoize?
74 echo "$1" | sed \ 81 echo "$1" | sed \
75 -e "s:^$ADOTDIR/repos/::" \ 82 -e "s:^$ADOTDIR/repos/::" \
76 -e 's/$/.git/' \ 83 -e 's/$/.git/' \
77 -e 's.-SLASH-./.g' \ 84 -e 's.-SLASH-./.g' \
78 -e 's.-COLON-.:.g' 85 -e 's.-COLON-.:.g'
79 } 86 }
80 87
81 -antigen-ensure-repo () { 88 -bundle-ensure-repo () {
82 89
83 local update=false 90 local update=false
84 if [[ $1 == --update ]]; then 91 if [[ $1 == --update ]]; then
85 update=true 92 update=true
86 shift 93 shift
87 fi 94 fi
88 95
89 local url="$1" 96 local url="$1"
90 local clone_dir="$(-antigen-get-clone-dir $url)" 97 local clone_dir="$(-bundle-get-clone-dir $url)"
91 98
92 if [[ ! -d $clone_dir ]]; then 99 if [[ ! -d $clone_dir ]]; then
93 git clone "$url" "$clone_dir" 100 git clone "$url" "$clone_dir"
94 elif $update; then 101 elif $update; then
95 git --git-dir "$clone_dir/.git" pull 102 git --git-dir "$clone_dir/.git" pull
96 fi 103 fi
97 104
98 } 105 }
99 106
100 bundle-update () { 107 -bundle-load () {
101 # Update your bundles, i.e., `git pull` in all the plugin repos.
102 -bundle-echo-record | awk '{print $1}' | sort -u | while read url; do
103 -antigen-ensure-repo --update "$url"
104 done
105 }
106
107 bundle-load () {
108 108
109 local url="$1" 109 local url="$1"
110 local location="$(-antigen-get-clone-dir "$url")/$2" 110 local location="$(-bundle-get-clone-dir "$url")/$2"
111 local btype="$3" 111 local btype="$3"
112 112
113 if [[ $btype == theme ]]; then 113 if [[ $btype == theme ]]; then
114 114
115 # Of course, if its a theme, the location would point to the script 115 # Of course, if its a theme, the location would point to the script
116 # file. 116 # file.
117 source "$location" 117 source "$location"
118 118
119 else 119 else
120 120
121 # Source the plugin script 121 # Source the plugin script
122 # FIXME: I don't know. Looks very very ugly. Needs a better 122 # FIXME: I don't know. Looks very very ugly. Needs a better
123 # implementation once tests are ready. 123 # implementation once tests are ready.
124 local script_loc="$(ls "$location" | grep -m1 '.plugin.zsh$')" 124 local script_loc="$(ls "$location" | grep -m1 '.plugin.zsh$')"
125 if [[ -f $script_loc ]]; then 125 if [[ -f $script_loc ]]; then
126 # If we have a `*.plugin.zsh`, source it. 126 # If we have a `*.plugin.zsh`, source it.
127 source "$script_loc" 127 source "$script_loc"
128 elif [[ ! -z "$(ls "$location" | grep -m1 '.zsh$')" ]]; then 128 elif [[ ! -z "$(ls "$location" | grep -m1 '.zsh$')" ]]; then
129 # If there is no `*.plugin.zsh` file, source *all* the `*.zsh` 129 # If there is no `*.plugin.zsh` file, source *all* the `*.zsh`
130 # files. 130 # files.
131 for script ($location/*.zsh) source "$script" 131 for script ($location/*.zsh) source "$script"
132 fi 132 fi
133 133
134 # Add to $fpath, for completion(s) 134 # Add to $fpath, for completion(s)
135 fpath=($location $fpath) 135 fpath=($location $fpath)
136 136
137 fi 137 fi
138 138
139 } 139 }
140 140
141 bundle-cleanup () { 141 bundle-cleanup () {
142 142
143 if [[ ! -d "$ADOTDIR/repos" || -z "$(ls "$ADOTDIR/repos/")" ]]; then 143 if [[ ! -d "$ADOTDIR/repos" || -z "$(ls "$ADOTDIR/repos/")" ]]; then
144 echo "You don't have any bundles." 144 echo "You don't have any bundles."
145 return 0 145 return 0
146 fi 146 fi
147 147
148 # Find directores in ADOTDIR/repos, that are not in the bundles record. 148 # Find directores in ADOTDIR/repos, that are not in the bundles record.
149 local unused_clones="$(comm -13 \ 149 local unused_clones="$(comm -13 \
150 <(-bundle-echo-record | awk '{print $1}' | sort -u) \ 150 <(-bundle-echo-record | awk '{print $1}' | sort -u) \
151 <(ls "$ADOTDIR/repos" | while read line; do 151 <(ls "$ADOTDIR/repos" | while read line; do
152 -antigen-get-clone-url "$line" 152 -bundle-get-clone-url "$line"
153 done))" 153 done))"
154 154
155 if [[ -z $unused_clones ]]; then 155 if [[ -z $unused_clones ]]; then
156 echo "You don't have any unidentified bundles." 156 echo "You don't have any unidentified bundles."
157 return 0 157 return 0
158 fi 158 fi
159 159
160 echo 'You have clones for the following repos, but are not used.' 160 echo 'You have clones for the following repos, but are not used.'
161 echo "$unused_clones" | sed 's/^/ /' 161 echo "$unused_clones" | sed 's/^/ /'
162 162
163 echo -n '\nDelete them all? [y/N] ' 163 echo -n '\nDelete them all? [y/N] '
164 if read -q; then 164 if read -q; then
165 echo 165 echo
166 echo 166 echo
167 echo "$unused_clones" | while read url; do 167 echo "$unused_clones" | while read url; do
168 echo -n "Deleting clone for $url..." 168 echo -n "Deleting clone for $url..."
169 rm -rf "$(-antigen-get-clone-dir $url)" 169 rm -rf "$(-bundle-get-clone-dir $url)"
170 echo ' done.' 170 echo ' done.'
171 done 171 done
172 else 172 else
173 echo 173 echo
174 echo Nothing deleted. 174 echo Nothing deleted.
175 fi 175 fi
176 } 176 }
177 177
178 bundle-lib () { 178 bundle-lib () {
179 bundle --loc=lib 179 bundle --loc=lib
180 } 180 }
181 181
182 bundle-theme () { 182 bundle-theme () {
183 local url="$ANTIGEN_DEFAULT_REPO_URL"
184 local name="${1:-robbyrussell}" 183 local name="${1:-robbyrussell}"
185 bundle --loc=themes/$name.zsh-theme --btype=theme 184 bundle --loc=themes/$name.zsh-theme --btype=theme
186 } 185 }
187 186
188 bundle-apply () { 187 bundle-apply () {
189 # Initialize completion. 188 # Initialize completion.
190 # TODO: Only load completions if there are any changes to the bundle 189 # TODO: Only load completions if there are any changes to the bundle
191 # repositories. 190 # repositories.
192 compinit -i 191 compinit -i
193 } 192 }
194 193
195 bundle-list () { 194 bundle-list () {
196 # List all currently installed bundles 195 # List all currently installed bundles
197 if [[ -z "$_ANTIGEN_BUNDLE_RECORD" ]]; then 196 if [[ -z "$_ANTIGEN_BUNDLE_RECORD" ]]; then
198 echo "You don't have any bundles." >&2 197 echo "You don't have any bundles." >&2
199 return 1 198 return 1
200 else 199 else
201 -bundle-echo-record | awk '{print $1 " " $2 " " $3}' 200 -bundle-echo-record | awk '{print $1 " " $2 " " $3}'
202 fi 201 fi
203 } 202 }
204 203
205 # Echo the bundle specs as in the record. The first line is not echoed since it 204 # Echo the bundle specs as in the record. The first line is not echoed since it
206 # is a blank line. 205 # is a blank line.
207 -bundle-echo-record () { 206 -bundle-echo-record () {
208 echo "$_ANTIGEN_BUNDLE_RECORD" | sed -n '1!p' 207 echo "$_ANTIGEN_BUNDLE_RECORD" | sed -n '1!p'
209 } 208 }
210 209
211 -bundle-env-setup () { 210 -bundle-env-setup () {
212 # Pre-startup initializations 211 # Pre-startup initializations
213 -set-default ANTIGEN_DEFAULT_REPO_URL \ 212 -set-default ANTIGEN_DEFAULT_REPO_URL \
214 https://github.com/robbyrussell/oh-my-zsh.git 213 https://github.com/robbyrussell/oh-my-zsh.git
215 -set-default ADOTDIR $HOME/.antigen 214 -set-default ADOTDIR $HOME/.antigen
216 215
217 # Load the compinit module 216 # Load the compinit module
218 autoload -U compinit 217 autoload -U compinit
219 218
220 # Without the following, `compdef` function is not defined. 219 # Without the following, `compdef` function is not defined.
221 compinit -i 220 compinit -i
222 } 221 }
223 222
224 # Same as `export $1=$2`, but will only happen if the name specified by `$1` is 223 # Same as `export $1=$2`, but will only happen if the name specified by `$1` is
225 # not already set. 224 # not already set.
226 -set-default () { 225 -set-default () {