[pacman-dev] [PATCH] pacdiff - implement default search using local pacman db
John Frazier
eyeswide at gmail.com
Sun Jun 2 15:39:29 EDT 2013
Use pacman local db to find pacnews based on active configs. Relegate
find to an option. Rename DIFFSEARCHPATH to DIFFFINDPATH to clarify use.
Add quit option to prompts. Clarify help.
---
contrib/pacdiff.sh.in | 65 +++++++++++++++++++++++++++++++++++++--------------
1 file changed, 47 insertions(+), 18 deletions(-)
diff --git a/contrib/pacdiff.sh.in b/contrib/pacdiff.sh.in
index 47779d6..25c3fd6 100644
--- a/contrib/pacdiff.sh.in
+++ b/contrib/pacdiff.sh.in
@@ -22,8 +22,8 @@ declare -r myname='pacdiff'
declare -r myver='@PACKAGE_VERSION@'
diffprog=${DIFFPROG:-vimdiff}
-diffsearchpath=${DIFFSEARCHPATH:-/etc}
-locate=0
+difffindpath=${DIFFFINDPATH:-/etc}
+diffpacmandb=${DIFFPACMANDB:-/var/lib/pacman}
USE_COLOR='y'
m4_include(../scripts/library/output_format.sh)
@@ -32,11 +32,21 @@ m4_include(../scripts/library/term_colors.sh)
usage() {
echo "$myname : a simple pacnew/pacorig/pacsave updater"
- echo "Usage : $myname [-l]"
- echo " -l/--locate makes $myname use locate rather than find"
- echo " DIFFPROG variable allows to override the default vimdiff"
- echo " DIFFSEARCHPATH allows to override the default /etc path"
- echo "Example : DIFFPROG=meld DIFFSEARCHPATH=\"/boot /etc /usr\" $myname"
+ echo ""
+ echo "Usage : $myname [-lf]"
+ echo " -l/--locate makes $myname search using locate"
+ echo " -f/--find makes $myname search using find"
+ echo ""
+ echo "Note: the default search looks for backup files in the local pacman db"
+ echo " this generally will not find *.pacsave files"
+ echo ""
+ echo " DIFFPROG variable will override the default editor: vimdiff"
+ echo " DIFFFINDPATH will override the default path when using --find"
+ echo " DIFFPACMANDB will override the default pacman db for the "
+ echo " default search type"
+ echo ""
+ echo "Example : DDIFFPROG=meld DIFFPACMANDB=/mnt/var/lib/pacman/ $myname"
+ echo "Example : DIFFFINDPATH=\"/boot /etc /usr\" $myname"
}
version() {
@@ -45,18 +55,12 @@ version() {
echo 'Copyright (C) 2013 Pacman Development Team <pacman-dev at archlinux.org>'
}
-cmd() {
- if [ $locate -eq 1 ]; then
- locate -0 -e -b \*.pacnew \*.pacorig \*.pacsave
- else
- find $diffsearchpath \( -name \*.pacnew -o -name \*.pacorig -o -name \*.pacsave \) -print0
- fi
-}
-
if [ $# -gt 0 ]; then
case $1 in
-l|--locate)
- locate=1;;
+ locate=$(type -P locate);;
+ -f|--find)
+ find=$(type -P find);;
-V|--version)
version; exit 0;;
-h|--help)
@@ -66,6 +70,30 @@ if [ $# -gt 0 ]; then
esac
fi
+check_backup() {
+ [[ -f $1 ]] && printf "$1"'\0'
+}
+
+cmd() {
+ if [[ -n $locate ]]; then
+ locate -0 -e -b \*.pacnew \*.pacorig \*.pacsave
+ elif [[ -n $find ]]; then
+ find "${difffindpath}" \( -name \*.pacnew -o -name \*.pacorig -o -name \*.pacsave \) -print0 2> /dev/null
+ else
+ # parse local pacman db for backup files and look for pac* based on them
+ awk '/^%BACKUP%$/ {
+ while (getline) {
+ if (/^$/) { nextfile }
+ print $1
+ }
+ }' "${diffpacmandb}"/local/*/files | while read -r bkup; do
+ check_backup "/$bkup.pacnew"
+ check_backup "/$bkup.pacorig"
+ check_backup "/$bkup.pacsave"
+ done
+ fi
+}
+
# see http://mywiki.wooledge.org/BashFAQ/020
while IFS= read -u 3 -r -d '' pacfile; do
file="${pacfile%.pac*}"
@@ -82,16 +110,17 @@ while IFS= read -u 3 -r -d '' pacfile; do
msg2 "Files are identical, removing..."
rm -v "$pacfile"
else
- ask "(V)iew, (S)kip, (R)emove %s, (O)verwrite with %s: [v/s/r/o] " "$file_type" "$file_type"
+ ask "(V)iew, (S)kip, (R)emove %s, (O)verwrite with %s, (Q)uit: [v/s/r/o/q] " "$file_type" "$file_type"
while read c; do
case $c in
+ q|Q) exit 1;;
r|R) rm -v "$pacfile"; break ;;
o|O) mv -v "$pacfile" "$file"; break ;;
v|V)
$diffprog "$pacfile" "$file"
rm -iv "$pacfile"; break ;;
s|S) break ;;
- *) ask "Invalid answer. Try again: [v/s/r/o] "; continue ;;
+ *) ask "Invalid answer. Try again: [v/s/r/o/q] "; continue ;;
esac
done
fi
--
1.8.3
More information about the pacman-dev
mailing list