[pacman-dev] [PATCH] pacdiff - implement default search using local pacman db

Allan McRae allan at archlinux.org
Sun Jun 30 21:56:37 EDT 2013


On 19/06/13 15:55, Andrew Gregory wrote:
> On 06/02/13 at 03:39pm, John Frazier wrote:
>> 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}
> 
> Check our other scripts.  They parse DBPath from pacman.conf
> 
>>  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"
> 
> I'm not sure checking for exact matches is the best solution here.
> Pacman can save multiple .pacsave files with an increasing extension
> which this (and our existing searches) will miss.
> 

I missed this comment before.  Correct me if I am wrong, but the latest
file is always .pacsave, and older ones are renamed .pacsave.1
.pacsave.2 ...

So we should just be looking at .pacsave here?

Allan



More information about the pacman-dev mailing list