Created
February 8, 2012 22:09
-
-
Save sthen/1774426 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# ^^^^^^^ the sign of a high-quality 5-minute hack job :) | |
# visual editor to run pkg_delete or mark packages as auto/manual installed | |
# released to the public domain. | |
log() { | |
echo "$*" >> /tmp/vipkg.log | |
echo "$*" | |
} | |
TMP=$(mktemp -d /tmp/vipkg.XXXXXXXX) || exit 1 | |
log "starting at $(date)" | |
pkg_info > $TMP/pkg.prev.all | |
pkg_info -m > $TMP/pkg.prev.man | |
diff -U 99999 $TMP/pkg.prev.all $TMP/pkg.prev.man | | |
sed -e 1,3d -e 's,^ ,+,' -e 's,^-, ,' >> $TMP/pkg.prev.merged | |
cat - $TMP/pkg.prev.merged > $TMP/pkg.edit <<- 'EOF' | |
# Remove the line for any packages you want to uninstall. | |
# Packages marked with + in column 1 were marked as being installed manually; | |
# changing this marker changes the annotation in /var/db/pkg. | |
# | |
# Fragile! Do nothing other than touching column 1 or removing the entire line. | |
EOF | |
edit="/usr/bin/vi" | |
[ -n "$EDITOR" ] && edit="$EDITOR" | |
[ -n "$VISUAL" ] && edit="$VISUAL" | |
$edit $TMP/pkg.edit | |
grep -v ^# $TMP/pkg.edit > $TMP/pkg.post.merged | |
diff -u0 $TMP/pkg.prev.merged $TMP/pkg.post.merged | | |
sed -n -e 1,3d -e 's,^\+,,p' | while read x; do | |
case $x in | |
+*) p=$(echo $x | sed s,^+,, | cut -d' ' -f1) | |
log "marking as manual install: $p" | |
PKG_PATH= sudo pkg_add $p > /dev/null ;; | |
*) p=$(echo $x | cut -d' ' -f1) | |
log "marking as auto install: $p" | |
PKG_PATH= sudo pkg_add -aa $p > /dev/null ;; | |
esac | |
done | |
sed 's,^.,,' < $TMP/pkg.post.merged | cut -d' ' -f1 > $TMP/pkg.new | |
cut -d' ' -f1 < $TMP/pkg.prev.all > $TMP/pkg.old | |
diff -u0 $TMP/pkg.old $TMP/pkg.new | | |
sed -e 1,3d -e s,^-,, | | |
grep -v ^@@ > $TMP/pkg.delete && | |
sudo pkg_delete $(cat $TMP/pkg.delete) | |
log "ending at $(date)" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment