1 | #!/bin/bash
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 | readlink="readlink"
|
14 | which $readlink >/dev/null 2>/dev/null
|
15 | if [ $? -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
|
22 | fi
|
23 |
|
24 | if [ "x$npm_config_prefix" != "x" ]; then
|
25 | PREFIXES=$npm_config_prefix
|
26 | else
|
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
|
47 | fi
|
48 |
|
49 |
|
50 |
|
51 |
|
52 | packages=
|
53 | for prefix in $PREFIXES; do
|
54 | packages="$packages
|
55 | "`ls "$prefix"/lib/node/.npm 2>/dev/null | grep -v .cache`
|
56 | done
|
57 |
|
58 | packages=`echo $packages`
|
59 |
|
60 | filelist=()
|
61 | fid=0
|
62 |
|
63 | for prefix in $PREFIXES; do
|
64 |
|
65 |
|
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 |
|
71 | filelist[$fid]="$file"
|
72 | let 'fid++'
|
73 |
|
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 |
|
90 |
|
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 |
|
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
|
117 | done
|
118 |
|
119 |
|
120 | if [ "${#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
|
160 | fi
|
161 |
|
162 | echo ""
|
163 | echo 'All clean!'
|
164 |
|
165 | exit 0
|