diff --git a/scripts/CHANGES b/scripts/CHANGES index 4293b83..010490b 100644 --- a/scripts/CHANGES +++ b/scripts/CHANGES @@ -1,5 +1,8 @@ 1.2 -> 1.2.1 ------------ +- oldfiles: add the option -l to show outdated build logs +- prtrej: clean up /var/lib/pkg/rejected in case a package was uninstalled + before merging its conflicting files - prtsweep, prtwash: rewritten in perl - prtcheck: test that all sources are signed - pkgfoster: save the list of adoptees in ~/.config rather than cluttering $HOME; diff --git a/scripts/prtrej b/scripts/prtrej new file mode 100755 index 0000000..875dbe1 --- /dev/null +++ b/scripts/prtrej @@ -0,0 +1,96 @@ +#!/bin/bash +# +# $Id: prtrej,v 1.4 2004/02/06 11:30:00 opel Exp $ +# (c) 2003,2004 by Martin Opel +# (c) 2002 by Markus Ackermann +# +# 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