Commit aa1012e7f8157f51362577deb7610ee2b4bd29e0

Authored by Shrikant Sharat
1 parent 8f0e534f19

Fix #4. Updated files being placed in pwd.

When running `antigen-update` and there are changes to be pulled, the changed
files are being placed in the current directory, where `antigen-update` is run.
This is because of not setting the `--work-tree` for the `git pull` command.

Showing 1 changed file with 1 additions and 1 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 # antigen-bundle <url> [<loc>=/] 10 # antigen-bundle <url> [<loc>=/]
11 antigen-bundle () { 11 antigen-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://* && $url != /* ]]; then 45 if [[ $url != git://* && $url != https://* && $url != /* ]]; 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 -antigen-ensure-repo "$url"
54 54
55 -antigen-load "$url" "$loc" "$btype" 55 -antigen-load "$url" "$loc" "$btype"
56 56
57 } 57 }
58 58
59 antigen-bundles () { 59 antigen-bundles () {
60 # Bulk add many bundles at one go. Empty lines and lines starting with a `#` 60 # Bulk add many bundles at one go. Empty lines and lines starting with a `#`
61 # are ignored. Everything else is given to `antigen-bundle` as is, no 61 # are ignored. Everything else is given to `antigen-bundle` as is, no
62 # quoting rules applied. 62 # quoting rules applied.
63 63
64 local line 64 local line
65 65
66 grep -v '^$\|^#' | while read line; do 66 grep -v '^$\|^#' | while read line; do
67 # Using `eval` so that we can use the shell-style quoting in each line 67 # Using `eval` so that we can use the shell-style quoting in each line
68 # piped to `antigen-bundles`. 68 # piped to `antigen-bundles`.
69 eval "antigen-bundle $line" 69 eval "antigen-bundle $line"
70 done 70 done
71 } 71 }
72 72
73 antigen-update () { 73 antigen-update () {
74 # Update your bundles, i.e., `git pull` in all the plugin repos. 74 # Update your bundles, i.e., `git pull` in all the plugin repos.
75 -antigen-echo-record | awk '{print $1}' | sort -u | while read url; do 75 -antigen-echo-record | awk '{print $1}' | sort -u | while read url; do
76 -antigen-ensure-repo --update "$url" 76 -antigen-ensure-repo --update "$url"
77 done 77 done
78 } 78 }
79 79
80 -antigen-get-clone-dir () { 80 -antigen-get-clone-dir () {
81 # Takes a repo url and gives out the path that this url needs to be cloned 81 # Takes a repo url and gives out the path that this url needs to be cloned
82 # to. Doesn't actually clone anything. 82 # to. Doesn't actually clone anything.
83 # TODO: Memoize? 83 # TODO: Memoize?
84 echo -n $ADOTDIR/repos/ 84 echo -n $ADOTDIR/repos/
85 echo "$1" | sed \ 85 echo "$1" | sed \
86 -e 's/\.git$//' \ 86 -e 's/\.git$//' \
87 -e 's./.-SLASH-.g' \ 87 -e 's./.-SLASH-.g' \
88 -e 's.:.-COLON-.g' 88 -e 's.:.-COLON-.g'
89 } 89 }
90 90
91 -antigen-get-clone-url () { 91 -antigen-get-clone-url () {
92 # Takes a repo's clone dir and gives out the repo's original url that was 92 # Takes a repo's clone dir and gives out the repo's original url that was
93 # used to create the given directory path. 93 # used to create the given directory path.
94 # TODO: Memoize? 94 # TODO: Memoize?
95 echo "$1" | sed \ 95 echo "$1" | sed \
96 -e "s:^$ADOTDIR/repos/::" \ 96 -e "s:^$ADOTDIR/repos/::" \
97 -e 's/$/.git/' \ 97 -e 's/$/.git/' \
98 -e 's.-SLASH-./.g' \ 98 -e 's.-SLASH-./.g' \
99 -e 's.-COLON-.:.g' 99 -e 's.-COLON-.:.g'
100 } 100 }
101 101
102 -antigen-ensure-repo () { 102 -antigen-ensure-repo () {
103 103
104 local update=false 104 local update=false
105 if [[ $1 == --update ]]; then 105 if [[ $1 == --update ]]; then
106 update=true 106 update=true
107 shift 107 shift
108 fi 108 fi
109 109
110 local url="$1" 110 local url="$1"
111 local clone_dir="$(-antigen-get-clone-dir $url)" 111 local clone_dir="$(-antigen-get-clone-dir $url)"
112 112
113 if [[ ! -d $clone_dir ]]; then 113 if [[ ! -d $clone_dir ]]; then
114 git clone "$url" "$clone_dir" 114 git clone "$url" "$clone_dir"
115 elif $update; then 115 elif $update; then
116 git --git-dir "$clone_dir/.git" pull 116 git --git-dir "$clone_dir/.git" --work-tree "$clone_dir" pull
117 fi 117 fi
118 118
119 } 119 }
120 120
121 -antigen-load () { 121 -antigen-load () {
122 122
123 local url="$1" 123 local url="$1"
124 local location="$(-antigen-get-clone-dir "$url")/$2" 124 local location="$(-antigen-get-clone-dir "$url")/$2"
125 local btype="$3" 125 local btype="$3"
126 126
127 if [[ $btype == theme ]]; then 127 if [[ $btype == theme ]]; then
128 128
129 # Of course, if its a theme, the location would point to the script 129 # Of course, if its a theme, the location would point to the script
130 # file. 130 # file.
131 source "$location" 131 source "$location"
132 132
133 else 133 else
134 134
135 # Source the plugin script 135 # Source the plugin script
136 # FIXME: I don't know. Looks very very ugly. Needs a better 136 # FIXME: I don't know. Looks very very ugly. Needs a better
137 # implementation once tests are ready. 137 # implementation once tests are ready.
138 local script_loc="$(ls "$location" | grep -m1 '.plugin.zsh$')" 138 local script_loc="$(ls "$location" | grep -m1 '.plugin.zsh$')"
139 if [[ -f $script_loc ]]; then 139 if [[ -f $script_loc ]]; then
140 # If we have a `*.plugin.zsh`, source it. 140 # If we have a `*.plugin.zsh`, source it.
141 source "$script_loc" 141 source "$script_loc"
142 elif [[ ! -z "$(ls "$location" | grep -m1 '.zsh$')" ]]; then 142 elif [[ ! -z "$(ls "$location" | grep -m1 '.zsh$')" ]]; then
143 # If there is no `*.plugin.zsh` file, source *all* the `*.zsh` 143 # If there is no `*.plugin.zsh` file, source *all* the `*.zsh`
144 # files. 144 # files.
145 for script ($location/*.zsh) source "$script" 145 for script ($location/*.zsh) source "$script"
146 fi 146 fi
147 147
148 # Add to $fpath, for completion(s) 148 # Add to $fpath, for completion(s)
149 fpath=($location $fpath) 149 fpath=($location $fpath)
150 150
151 fi 151 fi
152 152
153 } 153 }
154 154
155 antigen-cleanup () { 155 antigen-cleanup () {
156 156
157 if [[ ! -d "$ADOTDIR/repos" || -z "$(ls "$ADOTDIR/repos/")" ]]; then 157 if [[ ! -d "$ADOTDIR/repos" || -z "$(ls "$ADOTDIR/repos/")" ]]; then
158 echo "You don't have any bundles." 158 echo "You don't have any bundles."
159 return 0 159 return 0
160 fi 160 fi
161 161
162 # Find directores in ADOTDIR/repos, that are not in the bundles record. 162 # Find directores in ADOTDIR/repos, that are not in the bundles record.
163 local unused_clones="$(comm -13 \ 163 local unused_clones="$(comm -13 \
164 <(-antigen-echo-record | awk '{print $1}' | sort -u) \ 164 <(-antigen-echo-record | awk '{print $1}' | sort -u) \
165 <(ls "$ADOTDIR/repos" | while read line; do 165 <(ls "$ADOTDIR/repos" | while read line; do
166 -antigen-get-clone-url "$line" 166 -antigen-get-clone-url "$line"
167 done))" 167 done))"
168 168
169 if [[ -z $unused_clones ]]; then 169 if [[ -z $unused_clones ]]; then
170 echo "You don't have any unidentified bundles." 170 echo "You don't have any unidentified bundles."
171 return 0 171 return 0
172 fi 172 fi
173 173
174 echo 'You have clones for the following repos, but are not used.' 174 echo 'You have clones for the following repos, but are not used.'
175 echo "$unused_clones" | sed 's/^/ /' 175 echo "$unused_clones" | sed 's/^/ /'
176 176
177 echo -n '\nDelete them all? [y/N] ' 177 echo -n '\nDelete them all? [y/N] '
178 if read -q; then 178 if read -q; then
179 echo 179 echo
180 echo 180 echo
181 echo "$unused_clones" | while read url; do 181 echo "$unused_clones" | while read url; do
182 echo -n "Deleting clone for $url..." 182 echo -n "Deleting clone for $url..."
183 rm -rf "$(-antigen-get-clone-dir $url)" 183 rm -rf "$(-antigen-get-clone-dir $url)"
184 echo ' done.' 184 echo ' done.'
185 done 185 done
186 else 186 else
187 echo 187 echo
188 echo Nothing deleted. 188 echo Nothing deleted.
189 fi 189 fi
190 } 190 }
191 191
192 antigen-lib () { 192 antigen-lib () {
193 antigen-bundle --loc=lib 193 antigen-bundle --loc=lib
194 } 194 }
195 195
196 antigen-theme () { 196 antigen-theme () {
197 local name="${1:-robbyrussell}" 197 local name="${1:-robbyrussell}"
198 antigen-bundle --loc=themes/$name.zsh-theme --btype=theme 198 antigen-bundle --loc=themes/$name.zsh-theme --btype=theme
199 } 199 }
200 200
201 antigen-apply () { 201 antigen-apply () {
202 # Initialize completion. 202 # Initialize completion.
203 # TODO: Only load completions if there are any changes to the bundle 203 # TODO: Only load completions if there are any changes to the bundle
204 # repositories. 204 # repositories.
205 compinit -i 205 compinit -i
206 } 206 }
207 207
208 antigen-list () { 208 antigen-list () {
209 # List all currently installed bundles 209 # List all currently installed bundles
210 if [[ -z "$_ANTIGEN_BUNDLE_RECORD" ]]; then 210 if [[ -z "$_ANTIGEN_BUNDLE_RECORD" ]]; then
211 echo "You don't have any bundles." >&2 211 echo "You don't have any bundles." >&2
212 return 1 212 return 1
213 else 213 else
214 -antigen-echo-record 214 -antigen-echo-record
215 fi 215 fi
216 } 216 }
217 217
218 # Echo the bundle specs as in the record. The first line is not echoed since it 218 # Echo the bundle specs as in the record. The first line is not echoed since it
219 # is a blank line. 219 # is a blank line.
220 -antigen-echo-record () { 220 -antigen-echo-record () {
221 echo "$_ANTIGEN_BUNDLE_RECORD" | sed -n '1!p' 221 echo "$_ANTIGEN_BUNDLE_RECORD" | sed -n '1!p'
222 } 222 }
223 223
224 -antigen-env-setup () { 224 -antigen-env-setup () {
225 # Pre-startup initializations 225 # Pre-startup initializations
226 -set-default ANTIGEN_DEFAULT_REPO_URL \ 226 -set-default ANTIGEN_DEFAULT_REPO_URL \
227 https://github.com/robbyrussell/oh-my-zsh.git 227 https://github.com/robbyrussell/oh-my-zsh.git
228 -set-default ADOTDIR $HOME/.antigen 228 -set-default ADOTDIR $HOME/.antigen
229 229
230 # Load the compinit module 230 # Load the compinit module
231 autoload -U compinit 231 autoload -U compinit
232 232
233 # Without the following, `compdef` function is not defined. 233 # Without the following, `compdef` function is not defined.
234 compinit -i 234 compinit -i
235 } 235 }
236 236
237 # Same as `export $1=$2`, but will only happen if the name specified by `$1` is 237 # Same as `export $1=$2`, but will only happen if the name specified by `$1` is
238 # not already set. 238 # not already set.
239 -set-default () { 239 -set-default () {
240 local arg_name="$1" 240 local arg_name="$1"
241 local arg_value="$2" 241 local arg_value="$2"
242 eval "test -z \"\$$arg_name\" && export $arg_name='$arg_value'" 242 eval "test -z \"\$$arg_name\" && export $arg_name='$arg_value'"
243 } 243 }
244 244
245 -antigen-env-setup 245 -antigen-env-setup
246 246