UNPKG

4.26 kBapplication/x-shView Raw
1#!/bin/bash
2
3# look for old 0.x cruft, and get rid of it.
4# Should already be sitting in the npm folder.
5
6# This doesn't have to be quite as cross-platform as install.sh.
7# There are some bash-isms, because maintaining *two*
8# fully-portable posix/bourne sh scripts is too much for
9# one project with a sane maintainer.
10
11# If readlink isn't available, then this is just too tricky.
12# However, greadlink is fine, so Solaris can join the party, too.
13readlink="readlink"
14which $readlink >/dev/null 2>/dev/null
15if [ $? -ne 0 ]; then
16 readlink="greadlink"
17 which $readlink >/dev/null 2>/dev/null
18 if [ $? -ne 0 ]; then
19 echo "Can't find the readlink or greadlink command. Aborting."
20 exit 1
21 fi
22fi
23
24if [ "x$npm_config_prefix" != "x" ]; then
25 PREFIXES=$npm_config_prefix
26else
27 node="$NODE"
28 if [ "x$node" = "x" ]; then
29 node=`which node`
30 fi
31 if [ "x$node" = "x" ]; then
32 echo "Can't find node to determine prefix. Aborting."
33 exit 1
34 fi
35
36
37 PREFIX=`dirname $node`
38 PREFIX=`dirname $PREFIX`
39 echo "cleanup prefix=$PREFIX"
40 PREFIXES=$PREFIX
41
42 altprefix=`"$node" -e process.installPrefix`
43 if [ "x$altprefix" != "x" ] && [ "x$altprefix" != "x$PREFIX" ]; then
44 echo "altprefix=$altprefix"
45 PREFIXES="$PREFIX $altprefix"
46 fi
47fi
48
49# now prefix is where npm would be rooted by default
50# go hunting.
51
52packages=
53for prefix in $PREFIXES; do
54 packages="$packages
55 "`ls "$prefix"/lib/node/.npm 2>/dev/null | grep -v .cache`
56done
57
58packages=`echo $packages`
59
60filelist=()
61fid=0
62
63for prefix in $PREFIXES; do
64 # remove any links into the .npm dir, or links to
65 # version-named shims/symlinks.
66 for folder in share/man bin lib/node; do
67 find $prefix/$folder -type l | while read file; do
68 target=`$readlink $file | grep '/\.npm/'`
69 if [ "x$target" != "x" ]; then
70 # found one!
71 filelist[$fid]="$file"
72 let 'fid++'
73 # also remove any symlinks to this file.
74 base=`basename "$file"`
75 base=`echo "$base" | awk -F@ '{print $1}'`
76 if [ "x$base" != "x" ]; then
77 find "`dirname $file`" -type l -name "$base"'*' \
78 | while read l; do
79 target=`$readlink "$l" | grep "$base"`
80 if [ "x$target" != "x" ]; then
81 filelist[$fid]="$1"
82 let 'fid++'
83 fi
84 done
85 fi
86 fi
87 done
88
89 # Scour for shim files. These are relics of 0.2 npm installs.
90 # note: grep -r is not portable.
91 find $prefix/$folder -type f \
92 | xargs grep -sl '// generated by npm' \
93 | while read file; do
94 filelist[$fid]="$file"
95 let 'fid++'
96 done
97 done
98
99 # now remove the package modules, and the .npm folder itself.
100 if [ "x$packages" != "x" ]; then
101 for pkg in $packages; do
102 filelist[$fid]="$prefix/lib/node/$pkg"
103 let 'fid++'
104 for i in $prefix/lib/node/$pkg\@*; do
105 filelist[$fid]="$i"
106 let 'fid++'
107 done
108 done
109 fi
110
111 for folder in lib/node/.npm lib/npm share/npm; do
112 if [ -d $prefix/$folder ]; then
113 filelist[$fid]="$prefix/$folder"
114 let 'fid++'
115 fi
116 done
117done
118
119# now actually clean, but only if there's anything TO clean
120if [ "${#filelist[@]}" -gt 0 ]; then
121 echo ""
122 echo "This script will find and eliminate any shims, symbolic"
123 echo "links, and other cruft that was installed by npm 0.x."
124 echo ""
125
126 if [ "x$packages" != "x" ]; then
127 echo "The following packages appear to have been installed with"
128 echo "an old version of npm, and will be removed forcibly:"
129 for pkg in $packages; do
130 echo " $pkg"
131 done
132 echo "Make a note of these. You may want to install them"
133 echo "with npm 1.0 when this process is completed."
134 echo ""
135 fi
136
137 OK=
138 if [ "x$1" = "x-y" ]; then
139 OK="yes"
140 fi
141
142 while [ "$OK" != "y" ] && [ "$OK" != "yes" ] && [ "$OK" != "no" ]; do
143 echo "Is this OK?"
144 echo " enter 'yes' or 'no'"
145 echo " or 'show' to see a list of files "
146 read OK
147 if [ "x$OK" = "xshow" ] || [ "x$OK" = "xs" ]; then
148 for i in "${filelist[@]}"; do
149 echo "$i"
150 done
151 fi
152 done
153 if [ "$OK" = "no" ]; then
154 echo "Aborting"
155 exit 1
156 fi
157 for i in "${filelist[@]}"; do
158 rm -rf "$i"
159 done
160fi
161
162echo ""
163echo 'All clean!'
164
165exit 0