97 lines
2.6 KiB
Plaintext
97 lines
2.6 KiB
Plaintext
|
#!/bin/bash
|
||
|
#
|
||
|
# $Id: prtrej,v 1.4 2004/02/06 11:30:00 opel Exp $
|
||
|
# (c) 2003,2004 by Martin Opel <mo@obbl-net.de>
|
||
|
# (c) 2002 by Markus Ackermann <maol@symlink.ch>
|
||
|
#
|
||
|
# may be redistributed and modified under the terms of the GPL
|
||
|
# only usable with CRUX Linux, version 0.9.2 or higher
|
||
|
#
|
||
|
# USE AT YOUR OWN RISK
|
||
|
#
|
||
|
# Interactive tool to ask user what he/she wants to do with a rejected file
|
||
|
# in /var/lib/pkg/rejected
|
||
|
# Requires opt/dialog to be installed
|
||
|
# All identical files are removed without a user's interaction
|
||
|
# TODO: respect SYSROOT?
|
||
|
|
||
|
TMP=/tmp/rejdiff
|
||
|
REJ=/var/lib/pkg/rejected
|
||
|
|
||
|
cleanup() {
|
||
|
echo "Removed $count unneeded files"
|
||
|
rm -f $TMP
|
||
|
}
|
||
|
|
||
|
interrupted() {
|
||
|
echo "Interrupted..."
|
||
|
cleanup
|
||
|
exit 1
|
||
|
}
|
||
|
|
||
|
trap "interrupted" SIGHUP SIGINT SIGQUIT SIGTERM
|
||
|
|
||
|
count=0
|
||
|
|
||
|
if [ ! -d "$REJ" ]; then
|
||
|
echo "$REJ not found. Exiting"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
mapfile -t REJECTS < <(find $REJ -type f)
|
||
|
# Why not loop over the output of find?
|
||
|
# bash splits on whitespace, so by putting the newline-separated results
|
||
|
# of find into an array, we can use double-quotes to ensure any file with
|
||
|
# space in its name is not misinterpreted as multiple files.
|
||
|
# Redefining IFS is another option, but prone to unwanted side-effects.
|
||
|
|
||
|
for reject in "${REJECTS[@]}"; do
|
||
|
real="/${reject#*rejected/}"
|
||
|
#
|
||
|
# Insert a test to ensure that diff is given two valid args.
|
||
|
#
|
||
|
# Nonexistent $real suggests that $reject is no longer needed.
|
||
|
# Forgot to merge it, and then later uninstalled the package, perhaps?
|
||
|
# If this circumstance is common and $REJ becomes cluttered too easily,
|
||
|
# then someone might ask for another side-effect of prt-get remove.
|
||
|
# This cleanup could be incorporated directly into pkgrm, but until that
|
||
|
# happens we might as well do the cleanup here.
|
||
|
#
|
||
|
if [ ! -e "$real" ] || diff "$real" "$reject" >/dev/null; then
|
||
|
rm "$reject"
|
||
|
count=$(( count + 1 ))
|
||
|
else
|
||
|
diff -u "$real" "$reject" &> $TMP
|
||
|
|
||
|
ACTION=$(dialog --no-shadow --stdout \
|
||
|
--title "diff $real $reject" \
|
||
|
--textbox $TMP -1 -1 \
|
||
|
--menu "Make your selection:" 11 50 4 \
|
||
|
KEEP "Keep existing file." \
|
||
|
INST "Overwrite with file from package." \
|
||
|
EXIT "Exit immediately." \
|
||
|
" " "Do nothing now.")
|
||
|
|
||
|
case "$ACTION" in
|
||
|
"KEEP")
|
||
|
echo "Keeping old file, removing $reject."
|
||
|
rm $reject
|
||
|
;;
|
||
|
"INST")
|
||
|
echo "Installing new file, overwriting $real with $reject."
|
||
|
mv $reject $real
|
||
|
;;
|
||
|
"EXIT")
|
||
|
echo "Exiting..."
|
||
|
cleanup
|
||
|
exit 0
|
||
|
;;
|
||
|
*)
|
||
|
echo "Leaving $real and $reject untouched for now."
|
||
|
;;
|
||
|
esac
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
cleanup
|