Skip to content
This repository
tag: v1.0.95
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 166 lines (144 sloc) 4.258 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
#!/bin/bash

# look for old 0.x cruft, and get rid of it.
# Should already be sitting in the npm folder.

# This doesn't have to be quite as cross-platform as install.sh.
# There are some bash-isms, because maintaining *two*
# fully-portable posix/bourne sh scripts is too much for
# one project with a sane maintainer.

# If readlink isn't available, then this is just too tricky.
# However, greadlink is fine, so Solaris can join the party, too.
readlink="readlink"
which $readlink >/dev/null 2>/dev/null
if [ $? -ne 0 ]; then
readlink="greadlink"
  which $readlink >/dev/null 2>/dev/null
  if [ $? -ne 0 ]; then
echo "Can't find the readlink or greadlink command. Aborting."
    exit 1
  fi
fi

if [ "x$npm_config_prefix" != "x" ]; then
PREFIXES=$npm_config_prefix
else
node="$NODE"
  if [ "x$node" = "x" ]; then
node=`which node`
  fi
if [ "x$node" = "x" ]; then
echo "Can't find node to determine prefix. Aborting."
    exit 1
  fi


PREFIX=`dirname $node`
  PREFIX=`dirname $PREFIX`
  echo "cleanup prefix=$PREFIX"
  PREFIXES=$PREFIX

  altprefix=`"$node" -e process.installPrefix`
  if [ "x$altprefix" != "x" ] && [ "x$altprefix" != "x$PREFIX" ]; then
echo "altprefix=$altprefix"
    PREFIXES="$PREFIX $altprefix"
  fi
fi

# now prefix is where npm would be rooted by default
# go hunting.

packages=
for prefix in $PREFIXES; do
packages="$packages
"`ls "$prefix"/lib/node/.npm 2>/dev/null | grep -v .cache`
done

packages=`echo $packages`

filelist=()
fid=0

for prefix in $PREFIXES; do
  # remove any links into the .npm dir, or links to
  # version-named shims/symlinks.
  for folder in share/man bin lib/node; do
find $prefix/$folder -type l | while read file; do
target=`$readlink $file | grep '/\.npm/'`
      if [ "x$target" != "x" ]; then
        # found one!
        filelist[$fid]="$file"
        let 'fid++'
        # also remove any symlinks to this file.
        base=`basename "$file"`
        base=`echo "$base" | awk -F@ '{print $1}'`
        if [ "x$base" != "x" ]; then
find "`dirname $file`" -type l -name "$base"'*' \
          | while read l; do
target=`$readlink "$l" | grep "$base"`
              if [ "x$target" != "x" ]; then
filelist[$fid]="$1"
                let 'fid++'
              fi
done
fi
fi
done

    # Scour for shim files. These are relics of 0.2 npm installs.
    # note: grep -r is not portable.
    find $prefix/$folder -type f \
      | xargs grep -sl '// generated by npm' \
      | while read file; do
filelist[$fid]="$file"
          let 'fid++'
        done
done

  # now remove the package modules, and the .npm folder itself.
  if [ "x$packages" != "x" ]; then
for pkg in $packages; do
filelist[$fid]="$prefix/lib/node/$pkg"
      let 'fid++'
      for i in $prefix/lib/node/$pkg\@*; do
filelist[$fid]="$i"
        let 'fid++'
      done
done
fi

for folder in lib/node/.npm lib/npm share/npm; do
if [ -d $prefix/$folder ]; then
filelist[$fid]="$prefix/$folder"
      let 'fid++'
    fi
done
done

# now actually clean, but only if there's anything TO clean
if [ "${#filelist[@]}" -gt 0 ]; then
echo ""
  echo "This script will find and eliminate any shims, symbolic"
  echo "links, and other cruft that was installed by npm 0.x."
  echo ""

  if [ "x$packages" != "x" ]; then
echo "The following packages appear to have been installed with"
    echo "an old version of npm, and will be removed forcibly:"
    for pkg in $packages; do
echo " $pkg"
    done
echo "Make a note of these. You may want to install them"
    echo "with npm 1.0 when this process is completed."
    echo ""
  fi

OK=
  if [ "x$1" = "x-y" ]; then
OK="yes"
  fi

while [ "$OK" != "y" ] && [ "$OK" != "yes" ] && [ "$OK" != "no" ]; do
echo "Is this OK?"
    echo " enter 'yes' or 'no'"
    echo " or 'show' to see a list of files "
    read OK
    if [ "x$OK" = "xshow" ] || [ "x$OK" = "xs" ]; then
for i in "${filelist[@]}"; do
echo "$i"
      done
fi
done
if [ "$OK" = "no" ]; then
echo "Aborting"
    exit 1
  fi
for i in "${filelist[@]}"; do
rm -rf "$i"
  done
fi

echo ""
echo 'All clean!'

exit 0
Something went wrong with that request. Please try again.