browserify_rb 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2284 @@
1
+ # Node Version Manager
2
+ # Implemented as a POSIX-compliant function
3
+ # Should work on sh, dash, bash, ksh, zsh
4
+ # To use source this file from your bash profile
5
+ #
6
+ # Implemented by Tim Caswell <tim@creationix.com>
7
+ # with much bash help from Matthew Ranney
8
+
9
+ { # this ensures the entire script is downloaded #
10
+
11
+ NVM_SCRIPT_SOURCE="$_"
12
+
13
+ nvm_has() {
14
+ type "$1" > /dev/null 2>&1
15
+ }
16
+
17
+ nvm_is_alias() {
18
+ # this is intentionally not "command alias" so it works in zsh.
19
+ \alias "$1" > /dev/null 2>&1
20
+ }
21
+
22
+ nvm_get_latest() {
23
+ local NVM_LATEST_URL
24
+ if nvm_has "curl"; then
25
+ NVM_LATEST_URL="$(curl -q -w "%{url_effective}\n" -L -s -S http://latest.nvm.sh -o /dev/null)"
26
+ elif nvm_has "wget"; then
27
+ NVM_LATEST_URL="$(wget http://latest.nvm.sh --server-response -O /dev/null 2>&1 | command awk '/^ Location: /{DEST=$2} END{ print DEST }')"
28
+ else
29
+ >&2 echo 'nvm needs curl or wget to proceed.'
30
+ return 1
31
+ fi
32
+ if [ "_$NVM_LATEST_URL" = "_" ]; then
33
+ >&2 echo "http://latest.nvm.sh did not redirect to the latest release on Github"
34
+ return 2
35
+ else
36
+ echo "$NVM_LATEST_URL" | command awk -F '/' '{print $NF}'
37
+ fi
38
+ }
39
+
40
+ nvm_download() {
41
+ if nvm_has "curl"; then
42
+ curl -q $*
43
+ elif nvm_has "wget"; then
44
+ # Emulate curl with wget
45
+ ARGS=$(echo "$*" | command sed -e 's/--progress-bar /--progress=bar /' \
46
+ -e 's/-L //' \
47
+ -e 's/-I /--server-response /' \
48
+ -e 's/-s /-q /' \
49
+ -e 's/-o /-O /' \
50
+ -e 's/-C - /-c /')
51
+ eval wget $ARGS
52
+ fi
53
+ }
54
+
55
+ nvm_has_system_node() {
56
+ [ "$(nvm deactivate >/dev/null 2>&1 && command -v node)" != '' ]
57
+ }
58
+
59
+ nvm_has_system_iojs() {
60
+ [ "$(nvm deactivate >/dev/null 2>&1 && command -v iojs)" != '' ]
61
+ }
62
+
63
+ nvm_print_npm_version() {
64
+ if nvm_has "npm"; then
65
+ echo " (npm v$(npm --version 2>/dev/null))"
66
+ fi
67
+ }
68
+
69
+ # Make zsh glob matching behave same as bash
70
+ # This fixes the "zsh: no matches found" errors
71
+ if nvm_has "unsetopt"; then
72
+ unsetopt nomatch 2>/dev/null
73
+ NVM_CD_FLAGS="-q"
74
+ fi
75
+
76
+ # Auto detect the NVM_DIR when not set
77
+ if [ -z "$NVM_DIR" ]; then
78
+ if [ -n "$BASH_SOURCE" ]; then
79
+ NVM_SCRIPT_SOURCE="${BASH_SOURCE[0]}"
80
+ fi
81
+ NVM_DIR="$(cd $NVM_CD_FLAGS "$(dirname "${NVM_SCRIPT_SOURCE:-$0}")" > /dev/null && \pwd)"
82
+ export NVM_DIR
83
+ fi
84
+ unset NVM_SCRIPT_SOURCE 2> /dev/null
85
+
86
+
87
+ # Setup mirror location if not already set
88
+ if [ -z "$NVM_NODEJS_ORG_MIRROR" ]; then
89
+ export NVM_NODEJS_ORG_MIRROR="https://nodejs.org/dist"
90
+ fi
91
+
92
+ if [ -z "$NVM_IOJS_ORG_MIRROR" ]; then
93
+ export NVM_IOJS_ORG_MIRROR="https://iojs.org/dist"
94
+ fi
95
+
96
+ nvm_tree_contains_path() {
97
+ local tree
98
+ tree="$1"
99
+ local node_path
100
+ node_path="$2"
101
+
102
+ if [ "@$tree@" = "@@" ] || [ "@$node_path@" = "@@" ]; then
103
+ >&2 echo "both the tree and the node path are required"
104
+ return 2
105
+ fi
106
+
107
+ local pathdir
108
+ pathdir=$(dirname "$node_path")
109
+ while [ "$pathdir" != "" ] && [ "$pathdir" != "." ] && [ "$pathdir" != "/" ] && [ "$pathdir" != "$tree" ]; do
110
+ pathdir=$(dirname "$pathdir")
111
+ done
112
+ [ "$pathdir" = "$tree" ]
113
+ }
114
+
115
+ # Traverse up in directory tree to find containing folder
116
+ nvm_find_up() {
117
+ local path
118
+ path=$PWD
119
+ while [ "$path" != "" ] && [ ! -f "$path/$1" ]; do
120
+ path=${path%/*}
121
+ done
122
+ echo "$path"
123
+ }
124
+
125
+
126
+ nvm_find_nvmrc() {
127
+ local dir
128
+ dir="$(nvm_find_up '.nvmrc')"
129
+ if [ -e "$dir/.nvmrc" ]; then
130
+ echo "$dir/.nvmrc"
131
+ fi
132
+ }
133
+
134
+ # Obtain nvm version from rc file
135
+ nvm_rc_version() {
136
+ export NVM_RC_VERSION=''
137
+ local NVMRC_PATH
138
+ NVMRC_PATH="$(nvm_find_nvmrc)"
139
+ if [ -e "$NVMRC_PATH" ]; then
140
+ read -r NVM_RC_VERSION < "$NVMRC_PATH"
141
+ echo "Found '$NVMRC_PATH' with version <$NVM_RC_VERSION>"
142
+ else
143
+ >&2 echo "No .nvmrc file found"
144
+ return 1
145
+ fi
146
+ }
147
+
148
+ nvm_version_greater() {
149
+ local LHS
150
+ LHS="$(nvm_normalize_version "$1")"
151
+ local RHS
152
+ RHS="$(nvm_normalize_version "$2")"
153
+ [ "$LHS" -gt "$RHS" ];
154
+ }
155
+
156
+ nvm_version_greater_than_or_equal_to() {
157
+ local LHS
158
+ LHS="$(nvm_normalize_version "$1")"
159
+ local RHS
160
+ RHS="$(nvm_normalize_version "$2")"
161
+ [ "$LHS" -ge "$RHS" ];
162
+ }
163
+
164
+ nvm_version_dir() {
165
+ local NVM_WHICH_DIR
166
+ NVM_WHICH_DIR="$1"
167
+ if [ -z "$NVM_WHICH_DIR" ] || [ "_$NVM_WHICH_DIR" = "_new" ]; then
168
+ echo "$NVM_DIR/versions/node"
169
+ elif [ "_$NVM_WHICH_DIR" = "_iojs" ]; then
170
+ echo "$NVM_DIR/versions/io.js"
171
+ elif [ "_$NVM_WHICH_DIR" = "_old" ]; then
172
+ echo "$NVM_DIR"
173
+ else
174
+ echo "unknown version dir" >&2
175
+ return 3
176
+ fi
177
+ }
178
+
179
+ nvm_alias_path() {
180
+ echo "$(nvm_version_dir old)/alias"
181
+ }
182
+
183
+ nvm_version_path() {
184
+ local VERSION
185
+ VERSION="$1"
186
+ if [ -z "$VERSION" ]; then
187
+ echo "version is required" >&2
188
+ return 3
189
+ elif nvm_is_iojs_version "$VERSION"; then
190
+ echo "$(nvm_version_dir iojs)/$(nvm_strip_iojs_prefix "$VERSION")"
191
+ elif nvm_version_greater 0.12.0 "$VERSION"; then
192
+ echo "$(nvm_version_dir old)/$VERSION"
193
+ else
194
+ echo "$(nvm_version_dir new)/$VERSION"
195
+ fi
196
+ }
197
+
198
+ nvm_ensure_version_installed() {
199
+ local PROVIDED_VERSION
200
+ PROVIDED_VERSION="$1"
201
+ local LOCAL_VERSION
202
+ local EXIT_CODE
203
+ LOCAL_VERSION="$(nvm_version "$PROVIDED_VERSION")"
204
+ EXIT_CODE="$?"
205
+ local NVM_VERSION_DIR
206
+ if [ "_$EXIT_CODE" = "_0" ]; then
207
+ NVM_VERSION_DIR="$(nvm_version_path "$LOCAL_VERSION")"
208
+ fi
209
+ if [ "_$EXIT_CODE" != "_0" ] || [ ! -d "$NVM_VERSION_DIR" ]; then
210
+ VERSION="$(nvm_resolve_alias "$PROVIDED_VERSION")"
211
+ if [ $? -eq 0 ]; then
212
+ echo "N/A: version \"$PROVIDED_VERSION -> $VERSION\" is not yet installed" >&2
213
+ else
214
+ local PREFIXED_VERSION
215
+ PREFIXED_VERSION="$(nvm_ensure_version_prefix "$PROVIDED_VERSION")"
216
+ echo "N/A: version \"${PREFIXED_VERSION:-$PROVIDED_VERSION}\" is not yet installed" >&2
217
+ fi
218
+ return 1
219
+ fi
220
+ }
221
+
222
+ # Expand a version using the version cache
223
+ nvm_version() {
224
+ local PATTERN
225
+ PATTERN="$1"
226
+ local VERSION
227
+ # The default version is the current one
228
+ if [ -z "$PATTERN" ]; then
229
+ PATTERN='current'
230
+ fi
231
+
232
+ if [ "$PATTERN" = "current" ]; then
233
+ nvm_ls_current
234
+ return $?
235
+ fi
236
+
237
+ local NVM_NODE_PREFIX
238
+ NVM_NODE_PREFIX="$(nvm_node_prefix)"
239
+ case "_$PATTERN" in
240
+ "_$NVM_NODE_PREFIX" | "_$NVM_NODE_PREFIX-")
241
+ PATTERN="stable"
242
+ ;;
243
+ esac
244
+ VERSION="$(nvm_ls "$PATTERN" | command tail -n1)"
245
+ if [ -z "$VERSION" ] || [ "_$VERSION" = "_N/A" ]; then
246
+ echo "N/A"
247
+ return 3;
248
+ else
249
+ echo "$VERSION"
250
+ fi
251
+ }
252
+
253
+ nvm_remote_version() {
254
+ local PATTERN
255
+ PATTERN="$1"
256
+ local VERSION
257
+ if nvm_validate_implicit_alias "$PATTERN" 2> /dev/null ; then
258
+ case "_$PATTERN" in
259
+ "_$(nvm_iojs_prefix)")
260
+ VERSION="$(nvm_ls_remote_iojs | command tail -n1)"
261
+ ;;
262
+ *)
263
+ VERSION="$(nvm_ls_remote "$PATTERN")"
264
+ ;;
265
+ esac
266
+ else
267
+ VERSION="$(nvm_remote_versions "$PATTERN" | command tail -n1)"
268
+ fi
269
+ echo "$VERSION"
270
+ if [ "_$VERSION" = '_N/A' ]; then
271
+ return 3
272
+ fi
273
+ }
274
+
275
+ nvm_remote_versions() {
276
+ local NVM_IOJS_PREFIX
277
+ NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
278
+ local PATTERN
279
+ PATTERN="$1"
280
+ case "_$PATTERN" in
281
+ "_$NVM_IOJS_PREFIX" | "_io.js")
282
+ VERSIONS="$(nvm_ls_remote_iojs)"
283
+ ;;
284
+ "_$(nvm_node_prefix)")
285
+ VERSIONS="$(nvm_ls_remote)"
286
+ ;;
287
+ *)
288
+ if nvm_validate_implicit_alias "$PATTERN" 2> /dev/null ; then
289
+ echo >&2 "Implicit aliases are not supported in nvm_remote_versions."
290
+ return 1
291
+ fi
292
+ VERSIONS="$(echo "$(nvm_ls_remote "$PATTERN")
293
+ $(nvm_ls_remote_iojs "$PATTERN")" | command grep -v "N/A" | command sed '/^$/d')"
294
+ ;;
295
+ esac
296
+
297
+ if [ -z "$VERSIONS" ]; then
298
+ echo "N/A"
299
+ return 3
300
+ else
301
+ echo "$VERSIONS"
302
+ fi
303
+ }
304
+
305
+ nvm_is_valid_version() {
306
+ if nvm_validate_implicit_alias "$1" 2> /dev/null; then
307
+ return 0
308
+ fi
309
+ case "$1" in
310
+ "$(nvm_iojs_prefix)" | \
311
+ "$(nvm_node_prefix)")
312
+ return 0
313
+ ;;
314
+ *)
315
+ local VERSION
316
+ VERSION="$(nvm_strip_iojs_prefix "$1")"
317
+ nvm_version_greater "$VERSION"
318
+ ;;
319
+ esac
320
+ }
321
+
322
+ nvm_normalize_version() {
323
+ echo "${1#v}" | command awk -F. '{ printf("%d%06d%06d\n", $1,$2,$3); }'
324
+ }
325
+
326
+ nvm_ensure_version_prefix() {
327
+ local NVM_VERSION
328
+ NVM_VERSION="$(nvm_strip_iojs_prefix "$1" | command sed -e 's/^\([0-9]\)/v\1/g')"
329
+ if nvm_is_iojs_version "$1"; then
330
+ nvm_add_iojs_prefix "$NVM_VERSION"
331
+ else
332
+ echo "$NVM_VERSION"
333
+ fi
334
+ }
335
+
336
+ nvm_format_version() {
337
+ local VERSION
338
+ VERSION="$(nvm_ensure_version_prefix "$1")"
339
+ if [ "_$(nvm_num_version_groups "$VERSION")" != "_3" ]; then
340
+ nvm_format_version "${VERSION%.}.0"
341
+ else
342
+ echo "$VERSION"
343
+ fi
344
+ }
345
+
346
+ nvm_num_version_groups() {
347
+ local VERSION
348
+ VERSION="$1"
349
+ VERSION="${VERSION#v}"
350
+ VERSION="${VERSION%.}"
351
+ if [ -z "$VERSION" ]; then
352
+ echo "0"
353
+ return
354
+ fi
355
+ local NVM_NUM_DOTS
356
+ NVM_NUM_DOTS=$(echo "$VERSION" | command sed -e 's/[^\.]//g')
357
+ local NVM_NUM_GROUPS
358
+ NVM_NUM_GROUPS=".$NVM_NUM_DOTS" # add extra dot, since it's (n - 1) dots at this point
359
+ echo "${#NVM_NUM_GROUPS}"
360
+ }
361
+
362
+ nvm_strip_path() {
363
+ echo "$1" | command sed \
364
+ -e "s#$NVM_DIR/[^/]*$2[^:]*:##g" \
365
+ -e "s#:$NVM_DIR/[^/]*$2[^:]*##g" \
366
+ -e "s#$NVM_DIR/[^/]*$2[^:]*##g" \
367
+ -e "s#$NVM_DIR/versions/[^/]*/[^/]*$2[^:]*:##g" \
368
+ -e "s#:$NVM_DIR/versions/[^/]*/[^/]*$2[^:]*##g" \
369
+ -e "s#$NVM_DIR/versions/[^/]*/[^/]*$2[^:]*##g"
370
+ }
371
+
372
+ nvm_prepend_path() {
373
+ if [ -z "$1" ]; then
374
+ echo "$2"
375
+ else
376
+ echo "$2:$1"
377
+ fi
378
+ }
379
+
380
+ nvm_binary_available() {
381
+ # binaries started with node 0.8.6
382
+ local FIRST_VERSION_WITH_BINARY
383
+ FIRST_VERSION_WITH_BINARY="0.8.6"
384
+ nvm_version_greater_than_or_equal_to "$(nvm_strip_iojs_prefix "$1")" "$FIRST_VERSION_WITH_BINARY"
385
+ }
386
+
387
+ nvm_alias() {
388
+ local ALIAS
389
+ ALIAS="$1"
390
+ if [ -z "$ALIAS" ]; then
391
+ echo >&2 'An alias is required.'
392
+ return 1
393
+ fi
394
+
395
+ local NVM_ALIAS_PATH
396
+ NVM_ALIAS_PATH="$(nvm_alias_path)/$ALIAS"
397
+ if [ ! -f "$NVM_ALIAS_PATH" ]; then
398
+ echo >&2 'Alias does not exist.'
399
+ return 2
400
+ fi
401
+
402
+ command cat "$NVM_ALIAS_PATH"
403
+ }
404
+
405
+ nvm_ls_current() {
406
+ local NVM_LS_CURRENT_NODE_PATH
407
+ NVM_LS_CURRENT_NODE_PATH="$(command which node 2> /dev/null)"
408
+ if [ $? -ne 0 ]; then
409
+ echo 'none'
410
+ elif nvm_tree_contains_path "$(nvm_version_dir iojs)" "$NVM_LS_CURRENT_NODE_PATH"; then
411
+ nvm_add_iojs_prefix "$(iojs --version 2>/dev/null)"
412
+ elif nvm_tree_contains_path "$NVM_DIR" "$NVM_LS_CURRENT_NODE_PATH"; then
413
+ local VERSION
414
+ VERSION="$(node --version 2>/dev/null)"
415
+ if [ "$VERSION" = "v0.6.21-pre" ]; then
416
+ echo "v0.6.21"
417
+ else
418
+ echo "$VERSION"
419
+ fi
420
+ else
421
+ echo 'system'
422
+ fi
423
+ }
424
+
425
+ nvm_resolve_alias() {
426
+ if [ -z "$1" ]; then
427
+ return 1
428
+ fi
429
+
430
+ local PATTERN
431
+ PATTERN="$1"
432
+
433
+ local ALIAS
434
+ ALIAS="$PATTERN"
435
+ local ALIAS_TEMP
436
+
437
+ local SEEN_ALIASES
438
+ SEEN_ALIASES="$ALIAS"
439
+ while true; do
440
+ ALIAS_TEMP="$(nvm_alias "$ALIAS" 2> /dev/null)"
441
+
442
+ if [ -z "$ALIAS_TEMP" ]; then
443
+ break
444
+ fi
445
+
446
+ if [ -n "$ALIAS_TEMP" ] \
447
+ && command printf "$SEEN_ALIASES" | command grep -e "^$ALIAS_TEMP$" > /dev/null; then
448
+ ALIAS="∞"
449
+ break
450
+ fi
451
+
452
+ SEEN_ALIASES="$SEEN_ALIASES\n$ALIAS_TEMP"
453
+ ALIAS="$ALIAS_TEMP"
454
+ done
455
+
456
+ if [ -n "$ALIAS" ] && [ "_$ALIAS" != "_$PATTERN" ]; then
457
+ local NVM_IOJS_PREFIX
458
+ NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
459
+ local NVM_NODE_PREFIX
460
+ NVM_NODE_PREFIX="$(nvm_node_prefix)"
461
+ case "_$ALIAS" in
462
+ "_∞" | \
463
+ "_$NVM_IOJS_PREFIX" | "_$NVM_IOJS_PREFIX-" | \
464
+ "_$NVM_NODE_PREFIX" )
465
+ echo "$ALIAS"
466
+ ;;
467
+ *)
468
+ nvm_ensure_version_prefix "$ALIAS"
469
+ ;;
470
+ esac
471
+ return 0
472
+ fi
473
+
474
+ if nvm_validate_implicit_alias "$PATTERN" 2> /dev/null ; then
475
+ local IMPLICIT
476
+ IMPLICIT="$(nvm_print_implicit_alias local "$PATTERN" 2> /dev/null)"
477
+ if [ -n "$IMPLICIT" ]; then
478
+ nvm_ensure_version_prefix "$IMPLICIT"
479
+ fi
480
+ fi
481
+
482
+ return 2
483
+ }
484
+
485
+ nvm_resolve_local_alias() {
486
+ if [ -z "$1" ]; then
487
+ return 1
488
+ fi
489
+
490
+ local VERSION
491
+ local EXIT_CODE
492
+ VERSION="$(nvm_resolve_alias "$1")"
493
+ EXIT_CODE=$?
494
+ if [ -z "$VERSION" ]; then
495
+ return $EXIT_CODE
496
+ fi
497
+ if [ "_$VERSION" != "_∞" ]; then
498
+ nvm_version "$VERSION"
499
+ else
500
+ echo "$VERSION"
501
+ fi
502
+ }
503
+
504
+ nvm_iojs_prefix() {
505
+ echo "iojs"
506
+ }
507
+ nvm_node_prefix() {
508
+ echo "node"
509
+ }
510
+
511
+ nvm_is_iojs_version() {
512
+ case "$1" in iojs-*) return 0 ;; esac
513
+ return 1
514
+ }
515
+
516
+ nvm_add_iojs_prefix() {
517
+ command echo "$(nvm_iojs_prefix)-$(nvm_ensure_version_prefix "$(nvm_strip_iojs_prefix "$1")")"
518
+ }
519
+
520
+ nvm_strip_iojs_prefix() {
521
+ local NVM_IOJS_PREFIX
522
+ NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
523
+ if [ "_$1" = "_$NVM_IOJS_PREFIX" ]; then
524
+ echo
525
+ else
526
+ echo "${1#"$NVM_IOJS_PREFIX"-}"
527
+ fi
528
+ }
529
+
530
+ nvm_ls() {
531
+ local PATTERN
532
+ PATTERN="$1"
533
+ local VERSIONS
534
+ VERSIONS=''
535
+ if [ "$PATTERN" = 'current' ]; then
536
+ nvm_ls_current
537
+ return
538
+ fi
539
+
540
+ local NVM_IOJS_PREFIX
541
+ NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
542
+ local NVM_NODE_PREFIX
543
+ NVM_NODE_PREFIX="$(nvm_node_prefix)"
544
+ local NVM_VERSION_DIR_IOJS
545
+ NVM_VERSION_DIR_IOJS="$(nvm_version_dir "$NVM_IOJS_PREFIX")"
546
+ local NVM_VERSION_DIR_NEW
547
+ NVM_VERSION_DIR_NEW="$(nvm_version_dir new)"
548
+ local NVM_VERSION_DIR_OLD
549
+ NVM_VERSION_DIR_OLD="$(nvm_version_dir old)"
550
+
551
+ case "$PATTERN" in
552
+ "$NVM_IOJS_PREFIX" | "$NVM_NODE_PREFIX" )
553
+ PATTERN="$PATTERN-"
554
+ ;;
555
+ *)
556
+ if nvm_resolve_local_alias "$PATTERN"; then
557
+ return
558
+ fi
559
+ PATTERN="$(nvm_ensure_version_prefix "$PATTERN")"
560
+ ;;
561
+ esac
562
+ if [ "_$PATTERN" = "_N/A" ]; then
563
+ return
564
+ fi
565
+ # If it looks like an explicit version, don't do anything funny
566
+ local NVM_PATTERN_STARTS_WITH_V
567
+ case $PATTERN in
568
+ v*) NVM_PATTERN_STARTS_WITH_V=true ;;
569
+ *) NVM_PATTERN_STARTS_WITH_V=false ;;
570
+ esac
571
+ if [ $NVM_PATTERN_STARTS_WITH_V = true ] && [ "_$(nvm_num_version_groups "$PATTERN")" = "_3" ]; then
572
+ if [ -d "$(nvm_version_path "$PATTERN")" ]; then
573
+ VERSIONS="$PATTERN"
574
+ elif [ -d "$(nvm_version_path "$(nvm_add_iojs_prefix "$PATTERN")")" ]; then
575
+ VERSIONS="$(nvm_add_iojs_prefix "$PATTERN")"
576
+ fi
577
+ else
578
+ case "$PATTERN" in
579
+ "$NVM_IOJS_PREFIX-" | "$NVM_NODE_PREFIX-" | "system") ;;
580
+ *)
581
+ local NUM_VERSION_GROUPS
582
+ NUM_VERSION_GROUPS="$(nvm_num_version_groups "$PATTERN")"
583
+ if [ "_$NUM_VERSION_GROUPS" = "_2" ] || [ "_$NUM_VERSION_GROUPS" = "_1" ]; then
584
+ PATTERN="${PATTERN%.}."
585
+ fi
586
+ ;;
587
+ esac
588
+
589
+ local ZHS_HAS_SHWORDSPLIT_UNSET
590
+ ZHS_HAS_SHWORDSPLIT_UNSET=1
591
+ if nvm_has "setopt"; then
592
+ ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | command grep shwordsplit > /dev/null ; echo $?)
593
+ setopt shwordsplit
594
+ fi
595
+
596
+ local NVM_DIRS_TO_SEARCH1
597
+ NVM_DIRS_TO_SEARCH1=''
598
+ local NVM_DIRS_TO_SEARCH2
599
+ NVM_DIRS_TO_SEARCH2=''
600
+ local NVM_DIRS_TO_SEARCH3
601
+ NVM_DIRS_TO_SEARCH3=''
602
+ local NVM_ADD_SYSTEM
603
+ NVM_ADD_SYSTEM=false
604
+ if nvm_is_iojs_version "$PATTERN"; then
605
+ NVM_DIRS_TO_SEARCH1="$NVM_VERSION_DIR_IOJS"
606
+ PATTERN="$(nvm_strip_iojs_prefix "$PATTERN")"
607
+ if nvm_has_system_iojs; then
608
+ NVM_ADD_SYSTEM=true
609
+ fi
610
+ elif [ "_$PATTERN" = "_$NVM_NODE_PREFIX-" ]; then
611
+ NVM_DIRS_TO_SEARCH1="$NVM_VERSION_DIR_OLD"
612
+ NVM_DIRS_TO_SEARCH2="$NVM_VERSION_DIR_NEW"
613
+ PATTERN=''
614
+ if nvm_has_system_node; then
615
+ NVM_ADD_SYSTEM=true
616
+ fi
617
+ else
618
+ NVM_DIRS_TO_SEARCH1="$NVM_VERSION_DIR_OLD"
619
+ NVM_DIRS_TO_SEARCH2="$NVM_VERSION_DIR_NEW"
620
+ NVM_DIRS_TO_SEARCH3="$NVM_VERSION_DIR_IOJS"
621
+ if nvm_has_system_iojs || nvm_has_system_node; then
622
+ NVM_ADD_SYSTEM=true
623
+ fi
624
+ fi
625
+
626
+ if ! [ -d "$NVM_DIRS_TO_SEARCH1" ]; then
627
+ NVM_DIRS_TO_SEARCH1=''
628
+ fi
629
+ if ! [ -d "$NVM_DIRS_TO_SEARCH2" ]; then
630
+ NVM_DIRS_TO_SEARCH2="$NVM_DIRS_TO_SEARCH1"
631
+ fi
632
+ if ! [ -d "$NVM_DIRS_TO_SEARCH3" ]; then
633
+ NVM_DIRS_TO_SEARCH3="$NVM_DIRS_TO_SEARCH2"
634
+ fi
635
+
636
+ if [ -z "$PATTERN" ]; then
637
+ PATTERN='v'
638
+ fi
639
+ if [ -n "$NVM_DIRS_TO_SEARCH1$NVM_DIRS_TO_SEARCH2$NVM_DIRS_TO_SEARCH3" ]; then
640
+ VERSIONS="$(command find "$NVM_DIRS_TO_SEARCH1" "$NVM_DIRS_TO_SEARCH2" "$NVM_DIRS_TO_SEARCH3" -maxdepth 1 -type d -name "$PATTERN*" \
641
+ | command sed "
642
+ s#$NVM_VERSION_DIR_IOJS/#$NVM_IOJS_PREFIX-#;
643
+ \#$NVM_VERSION_DIR_IOJS# d;
644
+ s#^$NVM_DIR/##;
645
+ \#^versions\$# d;
646
+ s#^versions/##;
647
+ s#^v#$NVM_NODE_PREFIX-v#;
648
+ s#^\($NVM_IOJS_PREFIX\)[-/]v#\1.v#;
649
+ s#^\($NVM_NODE_PREFIX\)[-/]v#\1.v#" \
650
+ | command sort -t. -u -k 2.2,2n -k 3,3n -k 4,4n \
651
+ | command sed "
652
+ s/^\($NVM_IOJS_PREFIX\)\./\1-/;
653
+ s/^$NVM_NODE_PREFIX\.//" \
654
+ )"
655
+ fi
656
+
657
+ if [ "$ZHS_HAS_SHWORDSPLIT_UNSET" -eq 1 ] && nvm_has "unsetopt"; then
658
+ unsetopt shwordsplit
659
+ fi
660
+ fi
661
+
662
+ if [ "$NVM_ADD_SYSTEM" = true ]; then
663
+ if [ -z "$PATTERN" ] || [ "_$PATTERN" = "_v" ]; then
664
+ VERSIONS="$VERSIONS$(command printf '\n%s' 'system')"
665
+ elif [ "$PATTERN" = 'system' ]; then
666
+ VERSIONS="$(command printf '%s' 'system')"
667
+ fi
668
+ fi
669
+
670
+ if [ -z "$VERSIONS" ]; then
671
+ echo "N/A"
672
+ return 3
673
+ fi
674
+
675
+ echo "$VERSIONS"
676
+ }
677
+
678
+ nvm_ls_remote() {
679
+ local PATTERN
680
+ PATTERN="$1"
681
+ if nvm_validate_implicit_alias "$PATTERN" 2> /dev/null ; then
682
+ PATTERN="$(nvm_ls_remote "$(nvm_print_implicit_alias remote "$PATTERN")" | command tail -n1)"
683
+ elif [ -n "$PATTERN" ]; then
684
+ PATTERN="$(nvm_ensure_version_prefix "$PATTERN")"
685
+ else
686
+ PATTERN=".*"
687
+ fi
688
+ nvm_ls_remote_index_tab node std "$NVM_NODEJS_ORG_MIRROR" "$PATTERN"
689
+ }
690
+
691
+ nvm_ls_remote_iojs() {
692
+ nvm_ls_remote_index_tab iojs std "$NVM_IOJS_ORG_MIRROR" "$1"
693
+ }
694
+
695
+ nvm_ls_remote_index_tab() {
696
+ if [ "$#" -lt 4 ]; then
697
+ echo "not enough arguments" >&2
698
+ return 5
699
+ fi
700
+ local TYPE
701
+ TYPE="$1"
702
+ local PREFIX
703
+ case "$TYPE-$2" in
704
+ iojs-std) PREFIX="$(nvm_iojs_prefix)-" ;;
705
+ node-std) PREFIX='' ;;
706
+ iojs-*)
707
+ echo "unknown type of io.js release" >&2
708
+ return 4
709
+ ;;
710
+ node-*)
711
+ echo "unknown type of node.js release" >&2
712
+ return 4
713
+ ;;
714
+ esac
715
+ local SORT_COMMAND
716
+ SORT_COMMAND='sort'
717
+ case "$TYPE" in
718
+ node) SORT_COMMAND='sort -t. -u -k 1.2,1n -k 2,2n -k 3,3n' ;;
719
+ esac
720
+ local MIRROR
721
+ MIRROR="$3"
722
+ local PATTERN
723
+ PATTERN="$4"
724
+ local VERSIONS
725
+ if [ -n "$PATTERN" ]; then
726
+ if [ "_$TYPE" = "_iojs" ]; then
727
+ PATTERN="$(nvm_ensure_version_prefix "$(nvm_strip_iojs_prefix "$PATTERN")")"
728
+ else
729
+ PATTERN="$(nvm_ensure_version_prefix "$PATTERN")"
730
+ fi
731
+ else
732
+ PATTERN=".*"
733
+ fi
734
+ ZHS_HAS_SHWORDSPLIT_UNSET=1
735
+ if nvm_has "setopt"; then
736
+ ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | command grep shwordsplit > /dev/null ; echo $?)
737
+ setopt shwordsplit
738
+ fi
739
+ VERSIONS="$(nvm_download -L -s "$MIRROR/index.tab" -o - \
740
+ | command sed "
741
+ 1d;
742
+ s/^/$PREFIX/;
743
+ s/[[:blank:]].*//" \
744
+ | command grep -w "$PATTERN" \
745
+ | $SORT_COMMAND)"
746
+ if [ "$ZHS_HAS_SHWORDSPLIT_UNSET" -eq 1 ] && nvm_has "unsetopt"; then
747
+ unsetopt shwordsplit
748
+ fi
749
+ if [ -z "$VERSIONS" ]; then
750
+ echo "N/A"
751
+ return 3
752
+ fi
753
+ echo "$VERSIONS"
754
+ }
755
+
756
+ nvm_checksum() {
757
+ local NVM_CHECKSUM
758
+ if nvm_has "sha1sum" && ! nvm_is_alias "sha1sum"; then
759
+ NVM_CHECKSUM="$(command sha1sum "$1" | command awk '{print $1}')"
760
+ elif nvm_has "sha1" && ! nvm_is_alias "sha1"; then
761
+ NVM_CHECKSUM="$(command sha1 -q "$1")"
762
+ elif nvm_has "shasum" && ! nvm_is_alias "shasum"; then
763
+ NVM_CHECKSUM="$(shasum "$1" | command awk '{print $1}')"
764
+ else
765
+ echo "Unaliased sha1sum, sha1, or shasum not found." >&2
766
+ return 2
767
+ fi
768
+
769
+ if [ "_$NVM_CHECKSUM" = "_$2" ]; then
770
+ return
771
+ elif [ -z "$2" ]; then
772
+ echo 'Checksums empty' #missing in raspberry pi binary
773
+ return
774
+ else
775
+ echo 'Checksums do not match.' >&2
776
+ return 1
777
+ fi
778
+ }
779
+
780
+ nvm_print_versions() {
781
+ local VERSION
782
+ local FORMAT
783
+ local NVM_CURRENT
784
+ NVM_CURRENT=$(nvm_ls_current)
785
+ echo "$1" | while read -r VERSION; do
786
+ if [ "_$VERSION" = "_$NVM_CURRENT" ]; then
787
+ FORMAT='\033[0;32m-> %12s\033[0m'
788
+ elif [ "$VERSION" = "system" ]; then
789
+ FORMAT='\033[0;33m%15s\033[0m'
790
+ elif [ -d "$(nvm_version_path "$VERSION" 2> /dev/null)" ]; then
791
+ FORMAT='\033[0;34m%15s\033[0m'
792
+ else
793
+ FORMAT='%15s'
794
+ fi
795
+ command printf "$FORMAT\n" "$VERSION"
796
+ done
797
+ }
798
+
799
+ nvm_validate_implicit_alias() {
800
+ local NVM_IOJS_PREFIX
801
+ NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
802
+ local NVM_NODE_PREFIX
803
+ NVM_NODE_PREFIX="$(nvm_node_prefix)"
804
+
805
+ case "$1" in
806
+ "stable" | "unstable" | "$NVM_IOJS_PREFIX" | "$NVM_NODE_PREFIX" )
807
+ return
808
+ ;;
809
+ *)
810
+ echo "Only implicit aliases 'stable', 'unstable', '$NVM_IOJS_PREFIX', and '$NVM_NODE_PREFIX' are supported." >&2
811
+ return 1
812
+ ;;
813
+ esac
814
+ }
815
+
816
+ nvm_print_implicit_alias() {
817
+ if [ "_$1" != "_local" ] && [ "_$1" != "_remote" ]; then
818
+ echo "nvm_print_implicit_alias must be specified with local or remote as the first argument." >&2
819
+ return 1
820
+ fi
821
+
822
+ local NVM_IMPLICIT
823
+ NVM_IMPLICIT="$2"
824
+ if ! nvm_validate_implicit_alias "$NVM_IMPLICIT"; then
825
+ return 2
826
+ fi
827
+
828
+ local ZHS_HAS_SHWORDSPLIT_UNSET
829
+
830
+ local NVM_IOJS_PREFIX
831
+ NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
832
+ local NVM_NODE_PREFIX
833
+ NVM_NODE_PREFIX="$(nvm_node_prefix)"
834
+ local NVM_COMMAND
835
+ local NVM_ADD_PREFIX_COMMAND
836
+ local LAST_TWO
837
+ case "$NVM_IMPLICIT" in
838
+ "$NVM_IOJS_PREFIX" | "$NVM_IOJS_RC_PREFIX")
839
+ NVM_COMMAND="nvm_ls_remote_iojs"
840
+ NVM_ADD_PREFIX_COMMAND="nvm_add_iojs_prefix"
841
+ if [ "_$1" = "_local" ]; then
842
+ NVM_COMMAND="nvm_ls $NVM_IMPLICIT"
843
+ fi
844
+
845
+ ZHS_HAS_SHWORDSPLIT_UNSET=1
846
+ if nvm_has "setopt"; then
847
+ ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | command grep shwordsplit > /dev/null ; echo $?)
848
+ setopt shwordsplit
849
+ fi
850
+
851
+ local NVM_IOJS_VERSION
852
+ local EXIT_CODE
853
+ NVM_IOJS_VERSION="$($NVM_COMMAND)"
854
+ EXIT_CODE="$?"
855
+ if [ "_$EXIT_CODE" = "_0" ]; then
856
+ NVM_IOJS_VERSION="$(echo "$NVM_IOJS_VERSION" | sed "s/^$NVM_IMPLICIT-//" | command grep -e '^v' | command cut -c2- | command cut -d . -f 1,2 | uniq | command tail -1)"
857
+ fi
858
+
859
+ if [ "$ZHS_HAS_SHWORDSPLIT_UNSET" -eq 1 ] && nvm_has "unsetopt"; then
860
+ unsetopt shwordsplit
861
+ fi
862
+
863
+ if [ "_$NVM_IOJS_VERSION" = "_N/A" ]; then
864
+ echo "N/A"
865
+ else
866
+ $NVM_ADD_PREFIX_COMMAND "$NVM_IOJS_VERSION"
867
+ fi
868
+ return $EXIT_CODE
869
+ ;;
870
+ "$NVM_NODE_PREFIX")
871
+ echo "stable"
872
+ return
873
+ ;;
874
+ *)
875
+ NVM_COMMAND="nvm_ls_remote"
876
+ if [ "_$1" = "_local" ]; then
877
+ NVM_COMMAND="nvm_ls node"
878
+ fi
879
+
880
+ ZHS_HAS_SHWORDSPLIT_UNSET=1
881
+ if nvm_has "setopt"; then
882
+ ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | command grep shwordsplit > /dev/null ; echo $?)
883
+ setopt shwordsplit
884
+ fi
885
+
886
+ LAST_TWO=$($NVM_COMMAND | command grep -e '^v' | command cut -c2- | command cut -d . -f 1,2 | uniq)
887
+
888
+ if [ "$ZHS_HAS_SHWORDSPLIT_UNSET" -eq 1 ] && nvm_has "unsetopt"; then
889
+ unsetopt shwordsplit
890
+ fi
891
+ ;;
892
+ esac
893
+ local MINOR
894
+ local STABLE
895
+ local UNSTABLE
896
+ local MOD
897
+ local NORMALIZED_VERSION
898
+
899
+ ZHS_HAS_SHWORDSPLIT_UNSET=1
900
+ if nvm_has "setopt"; then
901
+ ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | command grep shwordsplit > /dev/null ; echo $?)
902
+ setopt shwordsplit
903
+ fi
904
+ for MINOR in $LAST_TWO; do
905
+ NORMALIZED_VERSION="$(nvm_normalize_version "$MINOR")"
906
+ if [ "_0${NORMALIZED_VERSION#?}" != "_$NORMALIZED_VERSION" ]; then
907
+ STABLE="$MINOR"
908
+ else
909
+ MOD=$(expr "$NORMALIZED_VERSION" \/ 1000000 \% 2)
910
+ if [ "$MOD" -eq 0 ]; then
911
+ STABLE="$MINOR"
912
+ elif [ "$MOD" -eq 1 ]; then
913
+ UNSTABLE="$MINOR"
914
+ fi
915
+ fi
916
+ done
917
+ if [ "$ZHS_HAS_SHWORDSPLIT_UNSET" -eq 1 ] && nvm_has "unsetopt"; then
918
+ unsetopt shwordsplit
919
+ fi
920
+
921
+ if [ "_$2" = '_stable' ]; then
922
+ echo "${STABLE}"
923
+ elif [ "_$2" = '_unstable' ]; then
924
+ echo "${UNSTABLE}"
925
+ fi
926
+ }
927
+
928
+ nvm_get_os() {
929
+ local NVM_UNAME
930
+ NVM_UNAME="$(uname -a)"
931
+ local NVM_OS
932
+ case "$NVM_UNAME" in
933
+ Linux\ *) NVM_OS=linux ;;
934
+ Darwin\ *) NVM_OS=darwin ;;
935
+ SunOS\ *) NVM_OS=sunos ;;
936
+ FreeBSD\ *) NVM_OS=freebsd ;;
937
+ esac
938
+ echo "$NVM_OS"
939
+ }
940
+
941
+ nvm_get_arch() {
942
+ local HOST_ARCH
943
+ local NVM_OS
944
+ local EXIT_CODE
945
+
946
+ NVM_OS="$(nvm_get_os)"
947
+ # If the OS is SunOS, first try to use pkgsrc to guess
948
+ # the most appropriate arch. If it's not available, use
949
+ # isainfo to get the instruction set supported by the
950
+ # kernel.
951
+ if [ "_$NVM_OS" = "_sunos" ]; then
952
+ HOST_ARCH=$(pkg_info -Q MACHINE_ARCH pkg_install)
953
+ EXIT_CODE=$?
954
+ if [ $EXIT_CODE -ne 0 ]; then
955
+ HOST_ARCH=$(isainfo -n)
956
+ fi
957
+ else
958
+ HOST_ARCH="$(uname -m)"
959
+ fi
960
+
961
+ local NVM_ARCH
962
+ case "$HOST_ARCH" in
963
+ x86_64 | amd64) NVM_ARCH="x64" ;;
964
+ i*86) NVM_ARCH="x86" ;;
965
+ *) NVM_ARCH="$HOST_ARCH" ;;
966
+ esac
967
+ echo "$NVM_ARCH"
968
+ }
969
+
970
+ nvm_ensure_default_set() {
971
+ local VERSION
972
+ VERSION="$1"
973
+ if [ -z "$VERSION" ]; then
974
+ echo 'nvm_ensure_default_set: a version is required' >&2
975
+ return 1
976
+ fi
977
+ if nvm_alias default >/dev/null 2>&1; then
978
+ # default already set
979
+ return 0
980
+ fi
981
+ local OUTPUT
982
+ OUTPUT="$(nvm alias default "$VERSION")"
983
+ local EXIT_CODE
984
+ EXIT_CODE="$?"
985
+ echo "Creating default alias: $OUTPUT"
986
+ return $EXIT_CODE
987
+ }
988
+
989
+ nvm_is_merged_node_version() {
990
+ nvm_version_greater_than_or_equal_to "$1" v4.0.0
991
+ }
992
+
993
+ nvm_install_merged_node_binary() {
994
+ local NVM_NODE_TYPE
995
+ NVM_NODE_TYPE="$1"
996
+ local MIRROR
997
+ if [ "_$NVM_NODE_TYPE" = "_std" ]; then
998
+ MIRROR="$NVM_NODEJS_ORG_MIRROR"
999
+ else
1000
+ echo "unknown type of node.js release" >&2
1001
+ return 4
1002
+ fi
1003
+ local VERSION
1004
+ VERSION="$2"
1005
+ local REINSTALL_PACKAGES_FROM
1006
+ REINSTALL_PACKAGES_FROM="$3"
1007
+
1008
+ if ! nvm_is_merged_node_version "$VERSION" || nvm_is_iojs_version "$VERSION"; then
1009
+ echo 'nvm_install_merged_node_binary requires a node version v4.0 or greater.' >&2
1010
+ return 10
1011
+ fi
1012
+
1013
+ local VERSION_PATH
1014
+ VERSION_PATH="$(nvm_version_path "$VERSION")"
1015
+ local NVM_OS
1016
+ NVM_OS="$(nvm_get_os)"
1017
+ local t
1018
+ local url
1019
+ local sum
1020
+ local NODE_PREFIX
1021
+ local compression
1022
+ compression="gz"
1023
+ local tar_compression_flag
1024
+ tar_compression_flag="x"
1025
+ if nvm_supports_xz "$VERSION"; then
1026
+ compression="xz"
1027
+ tar_compression_flag="J"
1028
+ fi
1029
+ NODE_PREFIX="$(nvm_node_prefix)"
1030
+
1031
+ if [ -n "$NVM_OS" ]; then
1032
+ t="$VERSION-$NVM_OS-$(nvm_get_arch)"
1033
+ url="$MIRROR/$VERSION/$NODE_PREFIX-${t}.tar.${compression}"
1034
+ sum="$(nvm_download -L -s "$MIRROR/$VERSION/SHASUMS256.txt" -o - | command grep "${NODE_PREFIX}-${t}.tar.${compression}" | command awk '{print $1}')"
1035
+ local tmpdir
1036
+ tmpdir="$NVM_DIR/bin/node-${t}"
1037
+ local tmptarball
1038
+ tmptarball="$tmpdir/node-${t}.tar.${compression}"
1039
+ local NVM_INSTALL_ERRORED
1040
+ command mkdir -p "$tmpdir" && \
1041
+ echo "Downloading $url..." && \
1042
+ nvm_download -L -C - --progress-bar "$url" -o "$tmptarball" || \
1043
+ NVM_INSTALL_ERRORED=true
1044
+ if grep '404 Not Found' "$tmptarball" >/dev/null; then
1045
+ NVM_INSTALL_ERRORED=true
1046
+ echo >&2 "HTTP 404 at URL $url";
1047
+ fi
1048
+ if (
1049
+ [ "$NVM_INSTALL_ERRORED" != true ] && \
1050
+ echo "WARNING: checksums are currently disabled for node.js v4.0 and later" >&2 && \
1051
+ # nvm_checksum "$tmptarball" "$sum" && \
1052
+ command tar -x${tar_compression_flag}f "$tmptarball" -C "$tmpdir" --strip-components 1 && \
1053
+ command rm -f "$tmptarball" && \
1054
+ command mkdir -p "$VERSION_PATH" && \
1055
+ command mv "$tmpdir"/* "$VERSION_PATH"
1056
+ ); then
1057
+ return 0
1058
+ else
1059
+ echo >&2 "Binary download failed, trying source." >&2
1060
+ command rm -rf "$tmptarball" "$tmpdir"
1061
+ return 1
1062
+ fi
1063
+ fi
1064
+ return 2
1065
+ }
1066
+
1067
+ nvm_install_iojs_binary() {
1068
+ local NVM_IOJS_TYPE
1069
+ NVM_IOJS_TYPE="$1"
1070
+ local MIRROR
1071
+ if [ "_$NVM_IOJS_TYPE" = "_std" ]; then
1072
+ MIRROR="$NVM_IOJS_ORG_MIRROR"
1073
+ else
1074
+ echo "unknown type of io.js release" >&2
1075
+ return 4
1076
+ fi
1077
+ local PREFIXED_VERSION
1078
+ PREFIXED_VERSION="$2"
1079
+ local REINSTALL_PACKAGES_FROM
1080
+ REINSTALL_PACKAGES_FROM="$3"
1081
+
1082
+ if ! nvm_is_iojs_version "$PREFIXED_VERSION"; then
1083
+ echo 'nvm_install_iojs_binary requires an iojs-prefixed version.' >&2
1084
+ return 10
1085
+ fi
1086
+
1087
+ local VERSION
1088
+ VERSION="$(nvm_strip_iojs_prefix "$PREFIXED_VERSION")"
1089
+ local VERSION_PATH
1090
+ VERSION_PATH="$(nvm_version_path "$PREFIXED_VERSION")"
1091
+ local NVM_OS
1092
+ NVM_OS="$(nvm_get_os)"
1093
+ local t
1094
+ local url
1095
+ local sum
1096
+ local compression
1097
+ compression="gz"
1098
+ local tar_compression_flag
1099
+ tar_compression_flag="x"
1100
+ if nvm_supports_xz "$VERSION"; then
1101
+ compression="xz"
1102
+ tar_compression_flag="J"
1103
+ fi
1104
+
1105
+ if [ -n "$NVM_OS" ]; then
1106
+ if nvm_binary_available "$VERSION"; then
1107
+ t="$VERSION-$NVM_OS-$(nvm_get_arch)"
1108
+ url="$MIRROR/$VERSION/$(nvm_iojs_prefix)-${t}.tar.${compression}"
1109
+ sum="$(nvm_download -L -s "$MIRROR/$VERSION/SHASUMS256.txt" -o - | command grep "$(nvm_iojs_prefix)-${t}.tar.${compression}" | command awk '{print $1}')"
1110
+ local tmpdir
1111
+ tmpdir="$NVM_DIR/bin/iojs-${t}"
1112
+ local tmptarball
1113
+ tmptarball="$tmpdir/iojs-${t}.tar.${compression}"
1114
+ local NVM_INSTALL_ERRORED
1115
+ command mkdir -p "$tmpdir" && \
1116
+ echo "Downloading $url..." && \
1117
+ nvm_download -L -C - --progress-bar "$url" -o "$tmptarball" || \
1118
+ NVM_INSTALL_ERRORED=true
1119
+ if grep '404 Not Found' "$tmptarball" >/dev/null; then
1120
+ NVM_INSTALL_ERRORED=true
1121
+ echo >&2 "HTTP 404 at URL $url";
1122
+ fi
1123
+ if (
1124
+ [ "$NVM_INSTALL_ERRORED" != true ] && \
1125
+ echo "WARNING: checksums are currently disabled for io.js" >&2 && \
1126
+ # nvm_checksum "$tmptarball" "$sum" && \
1127
+ command tar -x${tar_compression_flag}f "$tmptarball" -C "$tmpdir" --strip-components 1 && \
1128
+ command rm -f "$tmptarball" && \
1129
+ command mkdir -p "$VERSION_PATH" && \
1130
+ command mv "$tmpdir"/* "$VERSION_PATH"
1131
+ ); then
1132
+ return 0
1133
+ else
1134
+ echo >&2 "Binary download failed, trying source." >&2
1135
+ command rm -rf "$tmptarball" "$tmpdir"
1136
+ return 1
1137
+ fi
1138
+ fi
1139
+ fi
1140
+ return 2
1141
+ }
1142
+
1143
+ nvm_install_node_binary() {
1144
+ local VERSION
1145
+ VERSION="$1"
1146
+ local REINSTALL_PACKAGES_FROM
1147
+ REINSTALL_PACKAGES_FROM="$2"
1148
+
1149
+ if nvm_is_iojs_version "$PREFIXED_VERSION"; then
1150
+ echo 'nvm_install_node_binary does not allow an iojs-prefixed version.' >&2
1151
+ return 10
1152
+ fi
1153
+
1154
+ local VERSION_PATH
1155
+ VERSION_PATH="$(nvm_version_path "$VERSION")"
1156
+ local NVM_OS
1157
+ NVM_OS="$(nvm_get_os)"
1158
+ local t
1159
+ local url
1160
+ local sum
1161
+
1162
+ if [ -n "$NVM_OS" ]; then
1163
+ if nvm_binary_available "$VERSION"; then
1164
+ local NVM_ARCH
1165
+ NVM_ARCH="$(nvm_get_arch)"
1166
+ if [ "_$NVM_ARCH" = '_armv6l' ] || [ "_$NVM_ARCH" = 'armv7l' ]; then
1167
+ NVM_ARCH="arm-pi"
1168
+ fi
1169
+ t="$VERSION-$NVM_OS-$NVM_ARCH"
1170
+ url="$NVM_NODEJS_ORG_MIRROR/$VERSION/node-${t}.tar.gz"
1171
+ sum=$(nvm_download -L -s "$NVM_NODEJS_ORG_MIRROR/$VERSION/SHASUMS.txt" -o - | command grep "node-${t}.tar.gz" | command awk '{print $1}')
1172
+ local tmpdir
1173
+ tmpdir="$NVM_DIR/bin/node-${t}"
1174
+ local tmptarball
1175
+ tmptarball="$tmpdir/node-${t}.tar.gz"
1176
+ local NVM_INSTALL_ERRORED
1177
+ command mkdir -p "$tmpdir" && \
1178
+ nvm_download -L -C - --progress-bar "$url" -o "$tmptarball" || \
1179
+ NVM_INSTALL_ERRORED=true
1180
+ if grep '404 Not Found' "$tmptarball" >/dev/null; then
1181
+ NVM_INSTALL_ERRORED=true
1182
+ echo >&2 "HTTP 404 at URL $url";
1183
+ fi
1184
+ if (
1185
+ [ "$NVM_INSTALL_ERRORED" != true ] && \
1186
+ nvm_checksum "$tmptarball" "$sum" && \
1187
+ command tar -xzf "$tmptarball" -C "$tmpdir" --strip-components 1 && \
1188
+ command rm -f "$tmptarball" && \
1189
+ command mkdir -p "$VERSION_PATH" && \
1190
+ command mv "$tmpdir"/* "$VERSION_PATH"
1191
+ ); then
1192
+ return 0
1193
+ else
1194
+ echo >&2 "Binary download failed, trying source."
1195
+ command rm -rf "$tmptarball" "$tmpdir"
1196
+ return 1
1197
+ fi
1198
+ fi
1199
+ fi
1200
+ return 2
1201
+ }
1202
+
1203
+ nvm_install_node_source() {
1204
+ local VERSION
1205
+ VERSION="$1"
1206
+ local ADDITIONAL_PARAMETERS
1207
+ ADDITIONAL_PARAMETERS="$2"
1208
+
1209
+ local NVM_ARCH
1210
+ NVM_ARCH="$(nvm_get_arch)"
1211
+ if [ "_$NVM_ARCH" = '_armv6l' ] || [ "_$NVM_ARCH" = '_armv7l' ]; then
1212
+ ADDITIONAL_PARAMETERS="--without-snapshot $ADDITIONAL_PARAMETERS"
1213
+ fi
1214
+
1215
+ if [ -n "$ADDITIONAL_PARAMETERS" ]; then
1216
+ echo "Additional options while compiling: $ADDITIONAL_PARAMETERS"
1217
+ fi
1218
+
1219
+ local VERSION_PATH
1220
+ VERSION_PATH="$(nvm_version_path "$VERSION")"
1221
+ local NVM_OS
1222
+ NVM_OS="$(nvm_get_os)"
1223
+
1224
+ local tarball
1225
+ tarball=''
1226
+ local sum
1227
+ sum=''
1228
+ local make
1229
+ make='make'
1230
+ if [ "_$NVM_OS" = "_freebsd" ]; then
1231
+ make='gmake'
1232
+ MAKE_CXX="CXX=c++"
1233
+ fi
1234
+ local tmpdir
1235
+ tmpdir="$NVM_DIR/src"
1236
+ local tmptarball
1237
+ tmptarball="$tmpdir/node-$VERSION.tar.gz"
1238
+
1239
+ if [ "$(nvm_download -L -s -I "$NVM_NODEJS_ORG_MIRROR/$VERSION/node-$VERSION.tar.gz" -o - 2>&1 | command grep '200 OK')" != '' ]; then
1240
+ tarball="$NVM_NODEJS_ORG_MIRROR/$VERSION/node-$VERSION.tar.gz"
1241
+ sum=$(nvm_download -L -s "$NVM_NODEJS_ORG_MIRROR/$VERSION/SHASUMS.txt" -o - | command grep "node-${VERSION}.tar.gz" | command awk '{print $1}')
1242
+ elif [ "$(nvm_download -L -s -I "$NVM_NODEJS_ORG_MIRROR/node-$VERSION.tar.gz" -o - | command grep '200 OK')" != '' ]; then
1243
+ tarball="$NVM_NODEJS_ORG_MIRROR/node-$VERSION.tar.gz"
1244
+ fi
1245
+
1246
+ if (
1247
+ [ -n "$tarball" ] && \
1248
+ command mkdir -p "$tmpdir" && \
1249
+ echo "Downloading $tarball..." && \
1250
+ nvm_download -L --progress-bar "$tarball" -o "$tmptarball" && \
1251
+ nvm_checksum "$tmptarball" "$sum" && \
1252
+ command tar -xzf "$tmptarball" -C "$tmpdir" && \
1253
+ cd "$tmpdir/node-$VERSION" && \
1254
+ ./configure --prefix="$VERSION_PATH" $ADDITIONAL_PARAMETERS && \
1255
+ $make $MAKE_CXX && \
1256
+ command rm -f "$VERSION_PATH" 2>/dev/null && \
1257
+ $make $MAKE_CXX install
1258
+ )
1259
+ then
1260
+ if ! nvm_has "npm" ; then
1261
+ echo "Installing npm..."
1262
+ if nvm_version_greater 0.2.0 "$VERSION"; then
1263
+ echo "npm requires node v0.2.3 or higher" >&2
1264
+ elif nvm_version_greater_than_or_equal_to "$VERSION" 0.2.0; then
1265
+ if nvm_version_greater 0.2.3 "$VERSION"; then
1266
+ echo "npm requires node v0.2.3 or higher" >&2
1267
+ else
1268
+ nvm_download -L https://npmjs.org/install.sh -o - | clean=yes npm_install=0.2.19 sh
1269
+ fi
1270
+ else
1271
+ nvm_download -L https://npmjs.org/install.sh -o - | clean=yes sh
1272
+ fi
1273
+ fi
1274
+ else
1275
+ echo "nvm: install $VERSION failed!" >&2
1276
+ return 1
1277
+ fi
1278
+
1279
+ return $?
1280
+ }
1281
+
1282
+ nvm_match_version() {
1283
+ local NVM_IOJS_PREFIX
1284
+ NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
1285
+ local PROVIDED_VERSION
1286
+ PROVIDED_VERSION="$1"
1287
+ case "_$PROVIDED_VERSION" in
1288
+ "_$NVM_IOJS_PREFIX" | "_io.js")
1289
+ nvm_version "$NVM_IOJS_PREFIX"
1290
+ ;;
1291
+ "_system")
1292
+ echo "system"
1293
+ ;;
1294
+ *)
1295
+ nvm_version "$PROVIDED_VERSION"
1296
+ ;;
1297
+ esac
1298
+ }
1299
+
1300
+ nvm_npm_global_modules() {
1301
+ local NPMLIST
1302
+ local VERSION
1303
+ VERSION="$1"
1304
+ if [ "_$VERSION" = "_system" ]; then
1305
+ NPMLIST=$(nvm use system > /dev/null && npm list -g --depth=0 2> /dev/null | command tail -n +2)
1306
+ else
1307
+ NPMLIST=$(nvm use "$VERSION" > /dev/null && npm list -g --depth=0 2> /dev/null | command tail -n +2)
1308
+ fi
1309
+
1310
+ local INSTALLS
1311
+ INSTALLS=$(echo "$NPMLIST" | command sed -e '/ -> / d' -e '/\(empty\)/ d' -e 's/^.* \(.*@[^ ]*\).*/\1/' -e '/^npm@[^ ]*.*$/ d' | command xargs)
1312
+
1313
+ local LINKS
1314
+ LINKS="$(echo "$NPMLIST" | command sed -n 's/.* -> \(.*\)/\1/ p')"
1315
+
1316
+ echo "$INSTALLS //// $LINKS"
1317
+ }
1318
+
1319
+ nvm_die_on_prefix() {
1320
+ local NVM_DELETE_PREFIX
1321
+ NVM_DELETE_PREFIX="$1"
1322
+ case "$NVM_DELETE_PREFIX" in
1323
+ 0|1) ;;
1324
+ *)
1325
+ echo >&2 'First argument "delete the prefix" must be zero or one'
1326
+ return 1
1327
+ ;;
1328
+ esac
1329
+ local NVM_COMMAND
1330
+ NVM_COMMAND="$2"
1331
+ if [ -z "$NVM_COMMAND" ]; then
1332
+ echo >&2 'Second argument "nvm command" must be nonempty'
1333
+ return 2
1334
+ fi
1335
+
1336
+ if [ -n "$PREFIX" ] && ! (nvm_tree_contains_path "$NVM_DIR" "$PREFIX" >/dev/null 2>&1); then
1337
+ nvm deactivate >/dev/null 2>&1
1338
+ echo >&2 "nvm is not compatible with the \"PREFIX\" environment variable: currently set to \"$PREFIX\""
1339
+ echo >&2 "Run \`unset PREFIX\` to unset it."
1340
+ return 3
1341
+ fi
1342
+
1343
+ if [ -n "$NPM_CONFIG_PREFIX" ] && ! (nvm_tree_contains_path "$NVM_DIR" "$NPM_CONFIG_PREFIX" >/dev/null 2>&1); then
1344
+ nvm deactivate >/dev/null 2>&1
1345
+ echo >&2 "nvm is not compatible with the \"NPM_CONFIG_PREFIX\" environment variable: currently set to \"$NPM_CONFIG_PREFIX\""
1346
+ echo >&2 "Run \`unset NPM_CONFIG_PREFIX\` to unset it."
1347
+ return 4
1348
+ fi
1349
+
1350
+ if ! nvm_has 'npm'; then
1351
+ return
1352
+ fi
1353
+
1354
+ local NVM_NPM_PREFIX
1355
+ NVM_NPM_PREFIX="$(NPM_CONFIG_LOGLEVEL=warn npm config get prefix)"
1356
+ if ! (nvm_tree_contains_path "$NVM_DIR" "$NVM_NPM_PREFIX" >/dev/null 2>&1); then
1357
+ if [ "_$NVM_DELETE_PREFIX" = "_1" ]; then
1358
+ NPM_CONFIG_LOGLEVEL=warn npm config delete prefix
1359
+ else
1360
+ nvm deactivate >/dev/null 2>&1
1361
+ echo >&2 "nvm is not compatible with the npm config \"prefix\" option: currently set to \"$NVM_NPM_PREFIX\""
1362
+ if nvm_has 'npm'; then
1363
+ echo >&2 "Run \`npm config delete prefix\` or \`$NVM_COMMAND\` to unset it."
1364
+ else
1365
+ echo >&2 "Run \`$NVM_COMMAND\` to unset it."
1366
+ fi
1367
+ return 10
1368
+ fi
1369
+ fi
1370
+ }
1371
+
1372
+ # Succeeds if $IOJS_VERSION represents an io.js version that has a
1373
+ # Solaris binary, fails otherwise.
1374
+ # Currently, only io.js 3.3.1 has a Solaris binary available, and it's the
1375
+ # latest io.js version available. The expectation is that any potential io.js
1376
+ # version later than v3.3.1 will also have Solaris binaries.
1377
+ iojs_version_has_solaris_binary() {
1378
+ local IOJS_VERSION
1379
+ IOJS_VERSION="$1"
1380
+ local STRIPPED_IOJS_VERSION
1381
+ STRIPPED_IOJS_VERSION="$(nvm_strip_iojs_prefix "$IOJS_VERSION")"
1382
+ if [ "_$STRIPPED_IOJS_VERSION" = "$IOJS_VERSION" ]; then
1383
+ return 1
1384
+ fi
1385
+
1386
+ # io.js started shipping Solaris binaries with io.js v3.3.1
1387
+ nvm_version_greater_than_or_equal_to "$STRIPPED_IOJS_VERSION" v3.3.1
1388
+ }
1389
+
1390
+ # Succeeds if $NODE_VERSION represents a node version that has a
1391
+ # Solaris binary, fails otherwise.
1392
+ # Currently, node versions starting from v0.8.6 have a Solaris binary
1393
+ # avaliable.
1394
+ node_version_has_solaris_binary() {
1395
+ local NODE_VERSION
1396
+ NODE_VERSION="$1"
1397
+ # Error out if $NODE_VERSION is actually an io.js version
1398
+ local STRIPPED_IOJS_VERSION
1399
+ STRIPPED_IOJS_VERSION="$(nvm_strip_iojs_prefix "$NODE_VERSION")"
1400
+ if [ "_$STRIPPED_IOJS_VERSION" != "_$NODE_VERSION" ]; then
1401
+ return 1
1402
+ fi
1403
+
1404
+ # node (unmerged) started shipping Solaris binaries with v0.8.6 and
1405
+ # node versions v1.0.0 or greater are not considered valid "unmerged" node
1406
+ # versions.
1407
+ nvm_version_greater_than_or_equal_to "$NODE_VERSION" v0.8.6 &&
1408
+ ! nvm_version_greater_than_or_equal_to "$NODE_VERSION" v1.0.0
1409
+ }
1410
+
1411
+ # Succeeds if $VERSION represents a version (node, io.js or merged) that has a
1412
+ # Solaris binary, fails otherwise.
1413
+ nvm_has_solaris_binary() {
1414
+ local VERSION=$1
1415
+ if nvm_is_merged_node_version "$VERSION"; then
1416
+ return 0 # All merged node versions have a Solaris binary
1417
+ elif nvm_is_iojs_version "$VERSION"; then
1418
+ iojs_version_has_solaris_binary "$VERSION"
1419
+ else
1420
+ node_version_has_solaris_binary "$VERSION"
1421
+ fi
1422
+ }
1423
+
1424
+ nvm_sanitize_path() {
1425
+ local SANITIZED_PATH
1426
+ SANITIZED_PATH="$1"
1427
+ if [ "_$1" != "_$NVM_DIR" ]; then
1428
+ SANITIZED_PATH="$(echo "$SANITIZED_PATH" | command sed "s#$NVM_DIR#\$NVM_DIR#g")"
1429
+ fi
1430
+ echo "$SANITIZED_PATH" | command sed "s#$HOME#\$HOME#g"
1431
+ }
1432
+
1433
+ nvm() {
1434
+ if [ $# -lt 1 ]; then
1435
+ nvm help
1436
+ return
1437
+ fi
1438
+
1439
+ local GREP_OPTIONS
1440
+ GREP_OPTIONS=''
1441
+
1442
+ # initialize local variables
1443
+ local VERSION
1444
+ local ADDITIONAL_PARAMETERS
1445
+ local ALIAS
1446
+
1447
+ case $1 in
1448
+ "help" )
1449
+ local NVM_IOJS_PREFIX
1450
+ NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
1451
+ local NVM_NODE_PREFIX
1452
+ NVM_NODE_PREFIX="$(nvm_node_prefix)"
1453
+ echo
1454
+ echo "Node Version Manager"
1455
+ echo
1456
+ echo 'Note: <version> refers to any version-like string nvm understands. This includes:'
1457
+ echo ' - full or partial version numbers, starting with an optional "v" (0.10, v0.1.2, v1)'
1458
+ echo " - default (built-in) aliases: $NVM_NODE_PREFIX, stable, unstable, $NVM_IOJS_PREFIX, system"
1459
+ echo ' - custom aliases you define with `nvm alias foo`'
1460
+ echo
1461
+ echo 'Usage:'
1462
+ echo ' nvm help Show this message'
1463
+ echo ' nvm --version Print out the latest released version of nvm'
1464
+ echo ' nvm install [-s] <version> Download and install a <version>, [-s] from source. Uses .nvmrc if available'
1465
+ echo ' --reinstall-packages-from=<version> When installing, reinstall packages installed in <node|iojs|node version number>'
1466
+ echo ' nvm uninstall <version> Uninstall a version'
1467
+ echo ' nvm use [--silent] <version> Modify PATH to use <version>. Uses .nvmrc if available'
1468
+ echo ' nvm exec [--silent] <version> [<command>] Run <command> on <version>. Uses .nvmrc if available'
1469
+ echo ' nvm run [--silent] <version> [<args>] Run `node` on <version> with <args> as arguments. Uses .nvmrc if available'
1470
+ echo ' nvm current Display currently activated version'
1471
+ echo ' nvm ls List installed versions'
1472
+ echo ' nvm ls <version> List versions matching a given description'
1473
+ echo ' nvm ls-remote List remote versions available for install'
1474
+ echo ' nvm version <version> Resolve the given description to a single local version'
1475
+ echo ' nvm version-remote <version> Resolve the given description to a single remote version'
1476
+ echo ' nvm deactivate Undo effects of `nvm` on current shell'
1477
+ echo ' nvm alias [<pattern>] Show all aliases beginning with <pattern>'
1478
+ echo ' nvm alias <name> <version> Set an alias named <name> pointing to <version>'
1479
+ echo ' nvm unalias <name> Deletes the alias named <name>'
1480
+ echo ' nvm reinstall-packages <version> Reinstall global `npm` packages contained in <version> to current version'
1481
+ echo ' nvm unload Unload `nvm` from shell'
1482
+ echo ' nvm which [<version>] Display path to installed node version. Uses .nvmrc if available'
1483
+ echo
1484
+ echo 'Example:'
1485
+ echo ' nvm install v0.10.32 Install a specific version number'
1486
+ echo ' nvm use 0.10 Use the latest available 0.10.x release'
1487
+ echo ' nvm run 0.10.32 app.js Run app.js using node v0.10.32'
1488
+ echo ' nvm exec 0.10.32 node app.js Run `node app.js` with the PATH pointing to node v0.10.32'
1489
+ echo ' nvm alias default 0.10.32 Set default node version on a shell'
1490
+ echo
1491
+ echo 'Note:'
1492
+ echo ' to remove, delete, or uninstall nvm - just remove the `$NVM_DIR` folder (usually `~/.nvm`)'
1493
+ echo
1494
+ ;;
1495
+
1496
+ "debug" )
1497
+ local ZHS_HAS_SHWORDSPLIT_UNSET
1498
+ if nvm_has "setopt"; then
1499
+ ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | command grep shwordsplit > /dev/null ; echo $?)
1500
+ setopt shwordsplit
1501
+ fi
1502
+ echo >&2 "nvm --version: v$(nvm --version)"
1503
+ echo >&2 "\$SHELL: $SHELL"
1504
+ echo >&2 "\$HOME: $HOME"
1505
+ echo >&2 "\$NVM_DIR: '$(nvm_sanitize_path "$NVM_DIR")'"
1506
+ echo >&2 "\$PREFIX: '$(nvm_sanitize_path "$PREFIX")'"
1507
+ echo >&2 "\$NPM_CONFIG_PREFIX: '$(nvm_sanitize_path "$NPM_CONFIG_PREFIX")'"
1508
+ local NVM_DEBUG_OUTPUT
1509
+ for NVM_DEBUG_COMMAND in 'nvm current' 'which node' 'which iojs' 'which npm' 'npm config get prefix' 'npm root -g'
1510
+ do
1511
+ NVM_DEBUG_OUTPUT="$($NVM_DEBUG_COMMAND 2>&1)"
1512
+ echo >&2 "$NVM_DEBUG_COMMAND: $(nvm_sanitize_path "$NVM_DEBUG_OUTPUT")"
1513
+ done
1514
+ if [ "$ZHS_HAS_SHWORDSPLIT_UNSET" -eq 1 ] && nvm_has "unsetopt"; then
1515
+ unsetopt shwordsplit
1516
+ fi
1517
+ return 42
1518
+ ;;
1519
+
1520
+ "install" | "i" )
1521
+ local nobinary
1522
+ local version_not_provided
1523
+ version_not_provided=0
1524
+ local provided_version
1525
+ local NVM_OS
1526
+ NVM_OS="$(nvm_get_os)"
1527
+
1528
+ if ! nvm_has "curl" && ! nvm_has "wget"; then
1529
+ echo 'nvm needs curl or wget to proceed.' >&2;
1530
+ return 1
1531
+ fi
1532
+
1533
+ if [ $# -lt 2 ]; then
1534
+ version_not_provided=1
1535
+ nvm_rc_version
1536
+ if [ -z "$NVM_RC_VERSION" ]; then
1537
+ >&2 nvm help
1538
+ return 127
1539
+ fi
1540
+ fi
1541
+
1542
+ shift
1543
+
1544
+ nobinary=0
1545
+ if [ "_$1" = "_-s" ]; then
1546
+ nobinary=1
1547
+ shift
1548
+ fi
1549
+
1550
+ provided_version="$1"
1551
+
1552
+ if [ -z "$provided_version" ]; then
1553
+ if [ $version_not_provided -ne 1 ]; then
1554
+ nvm_rc_version
1555
+ fi
1556
+ provided_version="$NVM_RC_VERSION"
1557
+ else
1558
+ shift
1559
+ fi
1560
+
1561
+ VERSION="$(nvm_remote_version "$provided_version")"
1562
+
1563
+ if [ "_$VERSION" = "_N/A" ]; then
1564
+ echo "Version '$provided_version' not found - try \`nvm ls-remote\` to browse available versions." >&2
1565
+ return 3
1566
+ fi
1567
+
1568
+ ADDITIONAL_PARAMETERS=''
1569
+ local PROVIDED_REINSTALL_PACKAGES_FROM
1570
+ local REINSTALL_PACKAGES_FROM
1571
+
1572
+ while [ $# -ne 0 ]
1573
+ do
1574
+ case "$1" in
1575
+ --reinstall-packages-from=*)
1576
+ PROVIDED_REINSTALL_PACKAGES_FROM="$(echo "$1" | command cut -c 27-)"
1577
+ REINSTALL_PACKAGES_FROM="$(nvm_version "$PROVIDED_REINSTALL_PACKAGES_FROM")"
1578
+ ;;
1579
+ --copy-packages-from=*)
1580
+ PROVIDED_REINSTALL_PACKAGES_FROM="$(echo "$1" | command cut -c 22-)"
1581
+ REINSTALL_PACKAGES_FROM="$(nvm_version "$PROVIDED_REINSTALL_PACKAGES_FROM")"
1582
+ ;;
1583
+ *)
1584
+ ADDITIONAL_PARAMETERS="$ADDITIONAL_PARAMETERS $1"
1585
+ ;;
1586
+ esac
1587
+ shift
1588
+ done
1589
+
1590
+ if [ "_$(nvm_ensure_version_prefix "$PROVIDED_REINSTALL_PACKAGES_FROM")" = "_$VERSION" ]; then
1591
+ echo "You can't reinstall global packages from the same version of node you're installing." >&2
1592
+ return 4
1593
+ elif [ ! -z "$PROVIDED_REINSTALL_PACKAGES_FROM" ] && [ "_$REINSTALL_PACKAGES_FROM" = "_N/A" ]; then
1594
+ echo "If --reinstall-packages-from is provided, it must point to an installed version of node." >&2
1595
+ return 5
1596
+ fi
1597
+
1598
+ local NVM_NODE_MERGED
1599
+ local NVM_IOJS
1600
+ if nvm_is_iojs_version "$VERSION"; then
1601
+ NVM_IOJS=true
1602
+ elif nvm_is_merged_node_version "$VERSION"; then
1603
+ NVM_NODE_MERGED=true
1604
+ fi
1605
+
1606
+ local VERSION_PATH
1607
+ VERSION_PATH="$(nvm_version_path "$VERSION")"
1608
+ if [ -d "$VERSION_PATH" ]; then
1609
+ echo "$VERSION is already installed." >&2
1610
+ if nvm use "$VERSION" && [ ! -z "$REINSTALL_PACKAGES_FROM" ] && [ "_$REINSTALL_PACKAGES_FROM" != "_N/A" ]; then
1611
+ nvm reinstall-packages "$REINSTALL_PACKAGES_FROM"
1612
+ fi
1613
+ return $?
1614
+ fi
1615
+
1616
+ if [ "_$NVM_OS" = "_freebsd" ]; then
1617
+ # node.js and io.js do not have a FreeBSD binary
1618
+ nobinary=1
1619
+ echo "Currently, there is no binary for $NVM_OS" >&2
1620
+ elif [ "_$NVM_OS" = "_sunos" ]; then
1621
+ # Not all node/io.js versions have a Solaris binary
1622
+ if ! nvm_has_solaris_binary "$VERSION"; then
1623
+ nobinary=1
1624
+ echo "Currently, there is no binary of version $VERSION for $NVM_OS" >&2
1625
+ fi
1626
+ fi
1627
+ local NVM_INSTALL_SUCCESS
1628
+ # skip binary install if "nobinary" option specified.
1629
+ if [ $nobinary -ne 1 ] && nvm_binary_available "$VERSION"; then
1630
+ if [ "$NVM_IOJS" = true ] && nvm_install_iojs_binary std "$VERSION" "$REINSTALL_PACKAGES_FROM"; then
1631
+ NVM_INSTALL_SUCCESS=true
1632
+ elif [ "$NVM_NODE_MERGED" = true ] && nvm_install_merged_node_binary std "$VERSION" "$REINSTALL_PACKAGES_FROM"; then
1633
+ NVM_INSTALL_SUCCESS=true
1634
+ elif [ "$NVM_IOJS" != true ] && nvm_install_node_binary "$VERSION" "$REINSTALL_PACKAGES_FROM"; then
1635
+ NVM_INSTALL_SUCCESS=true
1636
+ fi
1637
+ fi
1638
+ if [ "$NVM_INSTALL_SUCCESS" != true ]; then
1639
+ if [ "$NVM_IOJS" != true ] && [ "$NVM_NODE_MERGED" != true ]; then
1640
+ if nvm_install_node_source "$VERSION" "$ADDITIONAL_PARAMETERS"; then
1641
+ NVM_INSTALL_SUCCESS=true
1642
+ fi
1643
+ elif [ "$NVM_IOJS" = true ]; then
1644
+ # nvm_install_iojs_source "$VERSION" "$ADDITIONAL_PARAMETERS"
1645
+ echo "Installing iojs from source is not currently supported" >&2
1646
+ return 105
1647
+ elif [ "$NVM_NODE_MERGED" = true ]; then
1648
+ # nvm_install_merged_node_source "$VERSION" "$ADDITIONAL_PARAMETERS"
1649
+ echo "Installing node v1.0 and greater from source is not currently supported" >&2
1650
+ return 106
1651
+ fi
1652
+ fi
1653
+
1654
+ if [ "$NVM_INSTALL_SUCCESS" = true ] && nvm use "$VERSION"; then
1655
+ if [ ! -z "$REINSTALL_PACKAGES_FROM" ] \
1656
+ && [ "_$REINSTALL_PACKAGES_FROM" != "_N/A" ]; then
1657
+ nvm reinstall-packages "$REINSTALL_PACKAGES_FROM"
1658
+ fi
1659
+ fi
1660
+ return $?
1661
+ ;;
1662
+ "uninstall" )
1663
+ if [ $# -ne 2 ]; then
1664
+ >&2 nvm help
1665
+ return 127
1666
+ fi
1667
+
1668
+ local PATTERN
1669
+ PATTERN="$2"
1670
+ case "_$PATTERN" in
1671
+ "_$(nvm_iojs_prefix)" | "_$(nvm_iojs_prefix)-" \
1672
+ | "_$(nvm_node_prefix)" | "_$(nvm_node_prefix)-")
1673
+ VERSION="$(nvm_version "$PATTERN")"
1674
+ ;;
1675
+ *)
1676
+ VERSION="$(nvm_version "$PATTERN")"
1677
+ ;;
1678
+ esac
1679
+ if [ "_$VERSION" = "_$(nvm_ls_current)" ]; then
1680
+ if nvm_is_iojs_version "$VERSION"; then
1681
+ echo "nvm: Cannot uninstall currently-active io.js version, $VERSION (inferred from $PATTERN)." >&2
1682
+ else
1683
+ echo "nvm: Cannot uninstall currently-active node version, $VERSION (inferred from $PATTERN)." >&2
1684
+ fi
1685
+ return 1
1686
+ fi
1687
+
1688
+ local VERSION_PATH
1689
+ VERSION_PATH="$(nvm_version_path "$VERSION")"
1690
+ if [ ! -d "$VERSION_PATH" ]; then
1691
+ echo "$VERSION version is not installed..." >&2
1692
+ return;
1693
+ fi
1694
+
1695
+ t="$VERSION-$(nvm_get_os)-$(nvm_get_arch)"
1696
+
1697
+ local NVM_PREFIX
1698
+ local NVM_SUCCESS_MSG
1699
+ if nvm_is_iojs_version "$VERSION"; then
1700
+ NVM_PREFIX="$(nvm_iojs_prefix)"
1701
+ NVM_SUCCESS_MSG="Uninstalled io.js $(nvm_strip_iojs_prefix "$VERSION")"
1702
+ else
1703
+ NVM_PREFIX="$(nvm_node_prefix)"
1704
+ NVM_SUCCESS_MSG="Uninstalled node $VERSION"
1705
+ fi
1706
+ # Delete all files related to target version.
1707
+ command rm -rf "$NVM_DIR/src/$NVM_PREFIX-$VERSION" \
1708
+ "$NVM_DIR/src/$NVM_PREFIX-$VERSION.tar.*" \
1709
+ "$NVM_DIR/bin/$NVM_PREFIX-${t}" \
1710
+ "$NVM_DIR/bin/$NVM_PREFIX-${t}.tar.*" \
1711
+ "$VERSION_PATH" 2>/dev/null
1712
+ echo "$NVM_SUCCESS_MSG"
1713
+
1714
+ # rm any aliases that point to uninstalled version.
1715
+ for ALIAS in $(command grep -l "$VERSION" "$(nvm_alias_path)/*" 2>/dev/null)
1716
+ do
1717
+ nvm unalias "$(command basename "$ALIAS")"
1718
+ done
1719
+ ;;
1720
+ "deactivate" )
1721
+ local NEWPATH
1722
+ NEWPATH="$(nvm_strip_path "$PATH" "/bin")"
1723
+ if [ "_$PATH" = "_$NEWPATH" ]; then
1724
+ echo "Could not find $NVM_DIR/*/bin in \$PATH" >&2
1725
+ else
1726
+ export PATH="$NEWPATH"
1727
+ hash -r
1728
+ echo "$NVM_DIR/*/bin removed from \$PATH"
1729
+ fi
1730
+
1731
+ NEWPATH="$(nvm_strip_path "$MANPATH" "/share/man")"
1732
+ if [ "_$MANPATH" = "_$NEWPATH" ]; then
1733
+ echo "Could not find $NVM_DIR/*/share/man in \$MANPATH" >&2
1734
+ else
1735
+ export MANPATH="$NEWPATH"
1736
+ echo "$NVM_DIR/*/share/man removed from \$MANPATH"
1737
+ fi
1738
+
1739
+ NEWPATH="$(nvm_strip_path "$NODE_PATH" "/lib/node_modules")"
1740
+ if [ "_$NODE_PATH" != "_$NEWPATH" ]; then
1741
+ export NODE_PATH="$NEWPATH"
1742
+ echo "$NVM_DIR/*/lib/node_modules removed from \$NODE_PATH"
1743
+ fi
1744
+ ;;
1745
+ "use" )
1746
+ local PROVIDED_VERSION
1747
+ local NVM_USE_SILENT
1748
+ NVM_USE_SILENT=0
1749
+ local NVM_DELETE_PREFIX
1750
+ NVM_DELETE_PREFIX=0
1751
+
1752
+ shift # remove "use"
1753
+ while [ $# -ne 0 ]
1754
+ do
1755
+ case "$1" in
1756
+ --silent) NVM_USE_SILENT=1 ;;
1757
+ --delete-prefix) NVM_DELETE_PREFIX=1 ;;
1758
+ *)
1759
+ if [ -n "$1" ]; then
1760
+ PROVIDED_VERSION="$1"
1761
+ fi
1762
+ ;;
1763
+ esac
1764
+ shift
1765
+ done
1766
+
1767
+ if [ -z "$PROVIDED_VERSION" ]; then
1768
+ nvm_rc_version
1769
+ if [ -n "$NVM_RC_VERSION" ]; then
1770
+ PROVIDED_VERSION="$NVM_RC_VERSION"
1771
+ VERSION="$(nvm_version "$PROVIDED_VERSION")"
1772
+ fi
1773
+ else
1774
+ VERSION="$(nvm_match_version "$PROVIDED_VERSION")"
1775
+ fi
1776
+
1777
+ if [ -z "$VERSION" ]; then
1778
+ >&2 nvm help
1779
+ return 127
1780
+ fi
1781
+
1782
+ if [ "_$VERSION" = '_system' ]; then
1783
+ if nvm_has_system_node && nvm deactivate >/dev/null 2>&1; then
1784
+ if [ $NVM_USE_SILENT -ne 1 ]; then
1785
+ echo "Now using system version of node: $(node -v 2>/dev/null)$(nvm_print_npm_version)"
1786
+ fi
1787
+ return
1788
+ elif nvm_has_system_iojs && nvm deactivate >/dev/null 2>&1; then
1789
+ if [ $NVM_USE_SILENT -ne 1 ]; then
1790
+ echo "Now using system version of io.js: $(iojs --version 2>/dev/null)$(nvm_print_npm_version)"
1791
+ fi
1792
+ return
1793
+ else
1794
+ if [ $NVM_USE_SILENT -ne 1 ]; then
1795
+ echo "System version of node not found." >&2
1796
+ fi
1797
+ return 127
1798
+ fi
1799
+ elif [ "_$VERSION" = "_∞" ]; then
1800
+ if [ $NVM_USE_SILENT -ne 1 ]; then
1801
+ echo "The alias \"$PROVIDED_VERSION\" leads to an infinite loop. Aborting." >&2
1802
+ fi
1803
+ return 8
1804
+ fi
1805
+
1806
+ # This nvm_ensure_version_installed call can be a performance bottleneck
1807
+ # on shell startup. Perhaps we can optimize it away or make it faster.
1808
+ nvm_ensure_version_installed "$PROVIDED_VERSION"
1809
+ EXIT_CODE=$?
1810
+ if [ "$EXIT_CODE" != "0" ]; then
1811
+ return $EXIT_CODE
1812
+ fi
1813
+
1814
+ local NVM_VERSION_DIR
1815
+ NVM_VERSION_DIR="$(nvm_version_path "$VERSION")"
1816
+
1817
+ # Strip other version from PATH
1818
+ PATH="$(nvm_strip_path "$PATH" "/bin")"
1819
+ # Prepend current version
1820
+ PATH="$(nvm_prepend_path "$PATH" "$NVM_VERSION_DIR/bin")"
1821
+ if nvm_has manpath; then
1822
+ if [ -z "$MANPATH" ]; then
1823
+ MANPATH=$(manpath)
1824
+ fi
1825
+ # Strip other version from MANPATH
1826
+ MANPATH="$(nvm_strip_path "$MANPATH" "/share/man")"
1827
+ # Prepend current version
1828
+ MANPATH="$(nvm_prepend_path "$MANPATH" "$NVM_VERSION_DIR/share/man")"
1829
+ export MANPATH
1830
+ fi
1831
+ export PATH
1832
+ hash -r
1833
+ export NVM_PATH="$NVM_VERSION_DIR/lib/node"
1834
+ export NVM_BIN="$NVM_VERSION_DIR/bin"
1835
+ if [ "$NVM_SYMLINK_CURRENT" = true ]; then
1836
+ command rm -f "$NVM_DIR/current" && ln -s "$NVM_VERSION_DIR" "$NVM_DIR/current"
1837
+ fi
1838
+ local NVM_USE_OUTPUT
1839
+ if nvm_is_iojs_version "$VERSION"; then
1840
+ if [ $NVM_USE_SILENT -ne 1 ]; then
1841
+ NVM_USE_OUTPUT="Now using io.js $(nvm_strip_iojs_prefix "$VERSION")$(nvm_print_npm_version)"
1842
+ fi
1843
+ else
1844
+ if [ $NVM_USE_SILENT -ne 1 ]; then
1845
+ NVM_USE_OUTPUT="Now using node $VERSION$(nvm_print_npm_version)"
1846
+ fi
1847
+ fi
1848
+ if [ "_$VERSION" != "_system" ]; then
1849
+ local NVM_USE_CMD
1850
+ NVM_USE_CMD="nvm use --delete-prefix"
1851
+ if [ -n "$PROVIDED_VERSION" ]; then
1852
+ NVM_USE_CMD="$NVM_USE_CMD $VERSION"
1853
+ fi
1854
+ if [ $NVM_USE_SILENT -eq 1 ]; then
1855
+ NVM_USE_CMD="$NVM_USE_CMD --silent"
1856
+ fi
1857
+ if ! nvm_die_on_prefix "$NVM_DELETE_PREFIX" "$NVM_USE_CMD"; then
1858
+ return 11
1859
+ fi
1860
+ fi
1861
+ if [ -n "$NVM_USE_OUTPUT" ]; then
1862
+ echo "$NVM_USE_OUTPUT"
1863
+ fi
1864
+ ;;
1865
+ "run" )
1866
+ local provided_version
1867
+ local has_checked_nvmrc
1868
+ has_checked_nvmrc=0
1869
+ # run given version of node
1870
+ shift
1871
+
1872
+ local NVM_SILENT
1873
+ NVM_SILENT=0
1874
+ if [ "_$1" = "_--silent" ]; then
1875
+ NVM_SILENT=1
1876
+ shift
1877
+ fi
1878
+
1879
+ if [ $# -lt 1 ]; then
1880
+ if [ "$NVM_SILENT" -eq 1 ]; then
1881
+ nvm_rc_version >/dev/null 2>&1 && has_checked_nvmrc=1
1882
+ else
1883
+ nvm_rc_version && has_checked_nvmrc=1
1884
+ fi
1885
+ if [ -n "$NVM_RC_VERSION" ]; then
1886
+ VERSION="$(nvm_version "$NVM_RC_VERSION")"
1887
+ else
1888
+ VERSION='N/A'
1889
+ fi
1890
+ if [ $VERSION = "N/A" ]; then
1891
+ >&2 nvm help
1892
+ return 127
1893
+ fi
1894
+ fi
1895
+
1896
+ provided_version="$1"
1897
+ if [ -n "$provided_version" ]; then
1898
+ VERSION="$(nvm_version "$provided_version")"
1899
+ if [ "_$VERSION" = "_N/A" ] && ! nvm_is_valid_version "$provided_version"; then
1900
+ provided_version=''
1901
+ if [ $has_checked_nvmrc -ne 1 ]; then
1902
+ if [ "$NVM_SILENT" -eq 1 ]; then
1903
+ nvm_rc_version >/dev/null 2>&1 && has_checked_nvmrc=1
1904
+ else
1905
+ nvm_rc_version && has_checked_nvmrc=1
1906
+ fi
1907
+ fi
1908
+ VERSION="$(nvm_version "$NVM_RC_VERSION")"
1909
+ else
1910
+ shift
1911
+ fi
1912
+ fi
1913
+
1914
+ local NVM_IOJS
1915
+ if nvm_is_iojs_version "$VERSION"; then
1916
+ NVM_IOJS=true
1917
+ fi
1918
+
1919
+ local ARGS
1920
+ ARGS="$@"
1921
+ local OUTPUT
1922
+ local EXIT_CODE
1923
+
1924
+ local ZHS_HAS_SHWORDSPLIT_UNSET
1925
+ ZHS_HAS_SHWORDSPLIT_UNSET=1
1926
+ if nvm_has "setopt"; then
1927
+ ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | command grep shwordsplit > /dev/null ; echo $?)
1928
+ setopt shwordsplit
1929
+ fi
1930
+ if [ "_$VERSION" = "_N/A" ]; then
1931
+ nvm_ensure_version_installed "$provided_version"
1932
+ EXIT_CODE=$?
1933
+ elif [ -z "$ARGS" ]; then
1934
+ if [ "$NVM_IOJS" = true ]; then
1935
+ nvm exec "$VERSION" iojs
1936
+ else
1937
+ nvm exec "$VERSION" node
1938
+ fi
1939
+ EXIT_CODE="$?"
1940
+ elif [ "$NVM_IOJS" = true ]; then
1941
+ [ $NVM_SILENT -eq 1 ] || echo "Running io.js $(nvm_strip_iojs_prefix "$VERSION")$(nvm use --silent "$VERSION" && nvm_print_npm_version)"
1942
+ OUTPUT="$(nvm use "$VERSION" >/dev/null && iojs $ARGS)"
1943
+ EXIT_CODE="$?"
1944
+ else
1945
+ [ $NVM_SILENT -eq 1 ] || echo "Running node $VERSION$(nvm use --silent "$VERSION" && nvm_print_npm_version)"
1946
+ OUTPUT="$(nvm use "$VERSION" >/dev/null && node $ARGS)"
1947
+ EXIT_CODE="$?"
1948
+ fi
1949
+ if [ "$ZHS_HAS_SHWORDSPLIT_UNSET" -eq 1 ] && nvm_has "unsetopt"; then
1950
+ unsetopt shwordsplit
1951
+ fi
1952
+ if [ -n "$OUTPUT" ]; then
1953
+ echo "$OUTPUT"
1954
+ fi
1955
+ return $EXIT_CODE
1956
+ ;;
1957
+ "exec" )
1958
+ shift
1959
+
1960
+ local NVM_SILENT
1961
+ NVM_SILENT=0
1962
+ if [ "_$1" = "_--silent" ]; then
1963
+ NVM_SILENT=1
1964
+ shift
1965
+ fi
1966
+
1967
+ local provided_version
1968
+ provided_version="$1"
1969
+ if [ -n "$provided_version" ]; then
1970
+ VERSION="$(nvm_version "$provided_version")"
1971
+ if [ "_$VERSION" = "_N/A" ] && ! nvm_is_valid_version "$provided_version"; then
1972
+ if [ "$NVM_SILENT" -eq 1 ]; then
1973
+ nvm_rc_version >/dev/null 2>&1
1974
+ else
1975
+ nvm_rc_version
1976
+ fi
1977
+ provided_version="$NVM_RC_VERSION"
1978
+ VERSION="$(nvm_version "$provided_version")"
1979
+ else
1980
+ shift
1981
+ fi
1982
+ fi
1983
+
1984
+ nvm_ensure_version_installed "$provided_version"
1985
+ EXIT_CODE=$?
1986
+ if [ "$EXIT_CODE" != "0" ]; then
1987
+ return $EXIT_CODE
1988
+ fi
1989
+
1990
+ [ $NVM_SILENT -eq 1 ] || echo "Running node $VERSION$(nvm use --silent "$VERSION" && nvm_print_npm_version)"
1991
+ NODE_VERSION="$VERSION" "$NVM_DIR/nvm-exec" "$@"
1992
+ ;;
1993
+ "ls" | "list" )
1994
+ local NVM_LS_OUTPUT
1995
+ local NVM_LS_EXIT_CODE
1996
+ NVM_LS_OUTPUT=$(nvm_ls "$2")
1997
+ NVM_LS_EXIT_CODE=$?
1998
+ nvm_print_versions "$NVM_LS_OUTPUT"
1999
+ if [ $# -eq 1 ]; then
2000
+ nvm alias
2001
+ fi
2002
+ return $NVM_LS_EXIT_CODE
2003
+ ;;
2004
+ "ls-remote" | "list-remote" )
2005
+ local PATTERN
2006
+ PATTERN="$2"
2007
+ local NVM_IOJS_PREFIX
2008
+ NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
2009
+ local NVM_NODE_PREFIX
2010
+ NVM_NODE_PREFIX="$(nvm_node_prefix)"
2011
+ local NVM_FLAVOR
2012
+ case "_$PATTERN" in
2013
+ "_$NVM_IOJS_PREFIX" | "_$NVM_NODE_PREFIX" )
2014
+ NVM_FLAVOR="$PATTERN"
2015
+ PATTERN="$3"
2016
+ ;;
2017
+ esac
2018
+
2019
+ local NVM_LS_REMOTE_EXIT_CODE
2020
+ NVM_LS_REMOTE_EXIT_CODE=0
2021
+ local NVM_LS_REMOTE_PRE_MERGED_OUTPUT
2022
+ NVM_LS_REMOTE_PRE_MERGED_OUTPUT=''
2023
+ local NVM_LS_REMOTE_POST_MERGED_OUTPUT
2024
+ NVM_LS_REMOTE_POST_MERGED_OUTPUT=''
2025
+ if [ "_$NVM_FLAVOR" != "_$NVM_IOJS_PREFIX" ]; then
2026
+ local NVM_LS_REMOTE_OUTPUT
2027
+ NVM_LS_REMOTE_OUTPUT=$(nvm_ls_remote "$PATTERN")
2028
+ # split output into two
2029
+ NVM_LS_REMOTE_PRE_MERGED_OUTPUT="${NVM_LS_REMOTE_OUTPUT%%v4\.0\.0*}"
2030
+ NVM_LS_REMOTE_POST_MERGED_OUTPUT="${NVM_LS_REMOTE_OUTPUT#$NVM_LS_REMOTE_PRE_MERGED_OUTPUT}"
2031
+ NVM_LS_REMOTE_EXIT_CODE=$?
2032
+ fi
2033
+
2034
+ local NVM_LS_REMOTE_IOJS_EXIT_CODE
2035
+ NVM_LS_REMOTE_IOJS_EXIT_CODE=0
2036
+ local NVM_LS_REMOTE_IOJS_OUTPUT
2037
+ NVM_LS_REMOTE_IOJS_OUTPUT=''
2038
+ if [ "_$NVM_FLAVOR" != "_$NVM_NODE_PREFIX" ]; then
2039
+ NVM_LS_REMOTE_IOJS_OUTPUT=$(nvm_ls_remote_iojs "$PATTERN")
2040
+ NVM_LS_REMOTE_IOJS_EXIT_CODE=$?
2041
+ fi
2042
+
2043
+ local NVM_OUTPUT
2044
+ NVM_OUTPUT="$(echo "$NVM_LS_REMOTE_PRE_MERGED_OUTPUT
2045
+ $NVM_LS_REMOTE_IOJS_OUTPUT
2046
+ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d')"
2047
+ if [ -n "$NVM_OUTPUT" ]; then
2048
+ nvm_print_versions "$NVM_OUTPUT"
2049
+ return $NVM_LS_REMOTE_EXIT_CODE || $NVM_LS_REMOTE_IOJS_EXIT_CODE
2050
+ else
2051
+ nvm_print_versions "N/A"
2052
+ return 3
2053
+ fi
2054
+ ;;
2055
+ "current" )
2056
+ nvm_version current
2057
+ ;;
2058
+ "which" )
2059
+ local provided_version
2060
+ provided_version="$2"
2061
+ if [ $# -eq 1 ]; then
2062
+ nvm_rc_version
2063
+ if [ -n "$NVM_RC_VERSION" ]; then
2064
+ provided_version="$NVM_RC_VERSION"
2065
+ VERSION=$(nvm_version "$NVM_RC_VERSION")
2066
+ fi
2067
+ elif [ "_$2" != '_system' ]; then
2068
+ VERSION="$(nvm_version "$provided_version")"
2069
+ else
2070
+ VERSION="$2"
2071
+ fi
2072
+ if [ -z "$VERSION" ]; then
2073
+ >&2 nvm help
2074
+ return 127
2075
+ fi
2076
+
2077
+ if [ "_$VERSION" = '_system' ]; then
2078
+ if nvm_has_system_iojs >/dev/null 2>&1 || nvm_has_system_node >/dev/null 2>&1; then
2079
+ local NVM_BIN
2080
+ NVM_BIN="$(nvm use system >/dev/null 2>&1 && command which node)"
2081
+ if [ -n "$NVM_BIN" ]; then
2082
+ echo "$NVM_BIN"
2083
+ return
2084
+ else
2085
+ return 1
2086
+ fi
2087
+ else
2088
+ echo "System version of node not found." >&2
2089
+ return 127
2090
+ fi
2091
+ elif [ "_$VERSION" = "_∞" ]; then
2092
+ echo "The alias \"$2\" leads to an infinite loop. Aborting." >&2
2093
+ return 8
2094
+ fi
2095
+
2096
+ nvm_ensure_version_installed "$provided_version"
2097
+ EXIT_CODE=$?
2098
+ if [ "$EXIT_CODE" != "0" ]; then
2099
+ return $EXIT_CODE
2100
+ fi
2101
+ local NVM_VERSION_DIR
2102
+ NVM_VERSION_DIR="$(nvm_version_path "$VERSION")"
2103
+ echo "$NVM_VERSION_DIR/bin/node"
2104
+ ;;
2105
+ "alias" )
2106
+ local NVM_ALIAS_DIR
2107
+ NVM_ALIAS_DIR="$(nvm_alias_path)"
2108
+ command mkdir -p "$NVM_ALIAS_DIR"
2109
+ if [ $# -le 2 ]; then
2110
+ local DEST
2111
+ for ALIAS_PATH in "$NVM_ALIAS_DIR"/"$2"*; do
2112
+ ALIAS="$(command basename "$ALIAS_PATH")"
2113
+ DEST="$(nvm_alias "$ALIAS" 2> /dev/null)"
2114
+ if [ -n "$DEST" ]; then
2115
+ VERSION="$(nvm_version "$DEST")"
2116
+ if [ "_$DEST" = "_$VERSION" ]; then
2117
+ echo "$ALIAS -> $DEST"
2118
+ else
2119
+ echo "$ALIAS -> $DEST (-> $VERSION)"
2120
+ fi
2121
+ fi
2122
+ done
2123
+
2124
+ for ALIAS in "$(nvm_node_prefix)" "stable" "unstable" "$(nvm_iojs_prefix)"; do
2125
+ if [ ! -f "$NVM_ALIAS_DIR/$ALIAS" ]; then
2126
+ if [ $# -lt 2 ] || [ "~$ALIAS" = "~$2" ]; then
2127
+ DEST="$(nvm_print_implicit_alias local "$ALIAS")"
2128
+ if [ "_$DEST" != "_" ]; then
2129
+ VERSION="$(nvm_version "$DEST")"
2130
+ if [ "_$DEST" = "_$VERSION" ]; then
2131
+ echo "$ALIAS -> $DEST (default)"
2132
+ else
2133
+ echo "$ALIAS -> $DEST (-> $VERSION) (default)"
2134
+ fi
2135
+ fi
2136
+ fi
2137
+ fi
2138
+ done
2139
+ return
2140
+ fi
2141
+ if [ -z "$3" ]; then
2142
+ command rm -f "$NVM_ALIAS_DIR/$2"
2143
+ echo "$2 -> *poof*"
2144
+ return
2145
+ fi
2146
+ VERSION="$(nvm_version "$3")"
2147
+ if [ $? -ne 0 ]; then
2148
+ echo "! WARNING: Version '$3' does not exist." >&2
2149
+ fi
2150
+ echo "$3" | tee "$NVM_ALIAS_DIR/$2" >/dev/null
2151
+ if [ ! "_$3" = "_$VERSION" ]; then
2152
+ echo "$2 -> $3 (-> $VERSION)"
2153
+ else
2154
+ echo "$2 -> $3"
2155
+ fi
2156
+ ;;
2157
+ "unalias" )
2158
+ local NVM_ALIAS_DIR
2159
+ NVM_ALIAS_DIR="$(nvm_alias_path)"
2160
+ command mkdir -p "$NVM_ALIAS_DIR"
2161
+ if [ $# -ne 2 ]; then
2162
+ >&2 nvm help
2163
+ return 127
2164
+ fi
2165
+ [ ! -f "$NVM_ALIAS_DIR/$2" ] && echo "Alias $2 doesn't exist!" >&2 && return
2166
+ local NVM_ALIAS_ORIGINAL
2167
+ NVM_ALIAS_ORIGINAL="$(nvm_alias "$2")"
2168
+ command rm -f "$NVM_ALIAS_DIR/$2"
2169
+ echo "Deleted alias $2 - restore it with \`nvm alias $2 "$NVM_ALIAS_ORIGINAL"\`"
2170
+ ;;
2171
+ "reinstall-packages" | "copy-packages" )
2172
+ if [ $# -ne 2 ]; then
2173
+ >&2 nvm help
2174
+ return 127
2175
+ fi
2176
+
2177
+ local PROVIDED_VERSION
2178
+ PROVIDED_VERSION="$2"
2179
+
2180
+ if [ "$PROVIDED_VERSION" = "$(nvm_ls_current)" ] || [ "$(nvm_version "$PROVIDED_VERSION")" = "$(nvm_ls_current)" ]; then
2181
+ echo 'Can not reinstall packages from the current version of node.' >&2
2182
+ return 2
2183
+ fi
2184
+
2185
+ local VERSION
2186
+ if [ "_$PROVIDED_VERSION" = "_system" ]; then
2187
+ if ! nvm_has_system_node && ! nvm_has_system_iojs; then
2188
+ echo 'No system version of node or io.js detected.' >&2
2189
+ return 3
2190
+ fi
2191
+ VERSION="system"
2192
+ else
2193
+ VERSION="$(nvm_version "$PROVIDED_VERSION")"
2194
+ fi
2195
+
2196
+ local NPMLIST
2197
+ NPMLIST="$(nvm_npm_global_modules "$VERSION")"
2198
+ local INSTALLS
2199
+ local LINKS
2200
+ INSTALLS="${NPMLIST%% //// *}"
2201
+ LINKS="${NPMLIST##* //// }"
2202
+
2203
+ echo "Reinstalling global packages from $VERSION..."
2204
+ echo "$INSTALLS" | command xargs npm install -g --quiet
2205
+
2206
+ echo "Linking global packages from $VERSION..."
2207
+ set -f; IFS='
2208
+ ' # necessary to turn off variable expansion except for newlines
2209
+ for LINK in $LINKS; do
2210
+ set +f; unset IFS # restore variable expansion
2211
+ if [ -n "$LINK" ]; then
2212
+ (cd "$LINK" && npm link)
2213
+ fi
2214
+ done
2215
+ set +f; unset IFS # restore variable expansion in case $LINKS was empty
2216
+ ;;
2217
+ "clear-cache" )
2218
+ command rm -f "$NVM_DIR/v*" "$(nvm_version_dir)" 2>/dev/null
2219
+ echo "Cache cleared."
2220
+ ;;
2221
+ "version" )
2222
+ nvm_version "$2"
2223
+ ;;
2224
+ "version-remote" )
2225
+ nvm_remote_version "$2"
2226
+ ;;
2227
+ "--version" )
2228
+ echo "0.29.0"
2229
+ ;;
2230
+ "unload" )
2231
+ unset -f nvm nvm_print_versions nvm_checksum \
2232
+ nvm_iojs_prefix nvm_node_prefix \
2233
+ nvm_add_iojs_prefix nvm_strip_iojs_prefix \
2234
+ nvm_is_iojs_version nvm_is_alias \
2235
+ nvm_ls_remote nvm_ls_remote_iojs nvm_ls_remote_index_tab \
2236
+ nvm_ls nvm_remote_version nvm_remote_versions \
2237
+ nvm_install_iojs_binary nvm_install_node_binary \
2238
+ nvm_install_node_source \
2239
+ nvm_version nvm_rc_version nvm_match_version \
2240
+ nvm_ensure_default_set nvm_get_arch nvm_get_os \
2241
+ nvm_print_implicit_alias nvm_validate_implicit_alias \
2242
+ nvm_resolve_alias nvm_ls_current nvm_alias \
2243
+ nvm_binary_available nvm_prepend_path nvm_strip_path \
2244
+ nvm_num_version_groups nvm_format_version nvm_ensure_version_prefix \
2245
+ nvm_normalize_version nvm_is_valid_version \
2246
+ nvm_ensure_version_installed \
2247
+ nvm_version_path nvm_alias_path nvm_version_dir \
2248
+ nvm_find_nvmrc nvm_find_up nvm_tree_contains_path \
2249
+ nvm_version_greater nvm_version_greater_than_or_equal_to \
2250
+ nvm_print_npm_version nvm_npm_global_modules \
2251
+ nvm_has_system_node nvm_has_system_iojs \
2252
+ nvm_download nvm_get_latest nvm_has nvm_get_latest \
2253
+ nvm_supports_source_options nvm_supports_xz > /dev/null 2>&1
2254
+ unset RC_VERSION NVM_NODEJS_ORG_MIRROR NVM_DIR NVM_CD_FLAGS > /dev/null 2>&1
2255
+ ;;
2256
+ * )
2257
+ >&2 nvm help
2258
+ return 127
2259
+ ;;
2260
+ esac
2261
+ }
2262
+
2263
+ nvm_supports_source_options() {
2264
+ [ "_$(echo '[ $# -gt 0 ] && echo $1' | . /dev/stdin yes 2> /dev/null)" = "_yes" ]
2265
+ }
2266
+
2267
+ nvm_supports_xz() {
2268
+ command which xz >/dev/null 2>&1 && nvm_version_greater_than_or_equal_to "$1" "2.3.2"
2269
+ }
2270
+
2271
+ NVM_VERSION="$(nvm_alias default 2>/dev/null || echo)"
2272
+ if nvm_supports_source_options && [ "$#" -gt 0 ] && [ "_$1" = "_--install" ]; then
2273
+ if [ -n "$NVM_VERSION" ]; then
2274
+ nvm install "$NVM_VERSION" >/dev/null
2275
+ elif nvm_rc_version >/dev/null 2>&1; then
2276
+ nvm install >/dev/null
2277
+ fi
2278
+ elif [ -n "$NVM_VERSION" ]; then
2279
+ nvm use --silent "$NVM_VERSION" >/dev/null
2280
+ elif nvm_rc_version >/dev/null 2>&1; then
2281
+ nvm use --silent >/dev/null
2282
+ fi
2283
+
2284
+ } # this ensures the entire script is downloaded #