1
0
mirror of https://github.com/moparisthebest/pacman synced 2024-08-13 17:03:46 -04:00

bacman: optionally include unmodified backup files when available

Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
Xyne 2013-09-17 09:19:26 +00:00 committed by Allan McRae
parent 8561ad2256
commit 5ef0c3caa5

View File

@ -27,6 +27,7 @@ shopt -s nullglob
declare -r myname='bacman' declare -r myname='bacman'
declare -r myver='@PACKAGE_VERSION@' declare -r myver='@PACKAGE_VERSION@'
USE_COLOR='y' USE_COLOR='y'
INCLUDE_PACNEW='n'
# Required for fakeroot because options are shifted off the array. # Required for fakeroot because options are shifted off the array.
ARGS=("$@") ARGS=("$@")
@ -37,7 +38,7 @@ m4_include(../scripts/library/output_format.sh)
# #
usage() { usage() {
echo "This program recreates a package using pacman's db and system files" echo "This program recreates a package using pacman's db and system files"
echo "Usage: $myname [--nocolor] <installed package name>" echo "Usage: $myname [--nocolor] [--pacnew] <installed package name>"
echo "Example: $myname kernel26" echo "Example: $myname kernel26"
} }
@ -47,10 +48,17 @@ version() {
echo 'Copyright (C) 2008-2013 Pacman Development Team <pacman-dev@archlinux.org>' echo 'Copyright (C) 2008-2013 Pacman Development Team <pacman-dev@archlinux.org>'
} }
if [[ $1 == "--nocolor" ]]; then while [[ ! -z $1 ]]; do
USE_COLOR='n' if [[ $1 == "--nocolor" ]]; then
shift USE_COLOR='n'
fi shift
elif [[ $1 == "--pacnew" ]]; then
INCLUDE_PACNEW='y'
shift
else
break
fi
done
m4_include(../scripts/library/term_colors.sh) m4_include(../scripts/library/term_colors.sh)
@ -143,7 +151,6 @@ cd "$work_dir" || exit 1
# #
msg2 "Copying package files..." msg2 "Copying package files..."
cat "$pkg_dir"/files |
while read i; do while read i; do
if [[ -z $i ]]; then if [[ -z $i ]]; then
continue continue
@ -156,24 +163,55 @@ while read i; do
case "$current" in case "$current" in
%FILES%) %FILES%)
ret=0 local_file="/$i"
if [[ -e /$i ]]; then package_file="$work_dir/$i"
bsdtar -cnf - "/$i" 2> /dev/null | bsdtar -xpf -
# Workaround to bsdtar not reporting a missing file as an error if [[ ! -e $local_file ]]; then
if ! [[ -e $work_dir/$i || -L $work_dir/$i ]]; then warning "package file $local_file is missing"
error "unable to add /$i to the package" continue
plain " If your user does not have permssion to read this file then"
plain " you will need to run $myname as root"
rm -rf "$work_dir"
exit 1
fi
else
warning "package file /$i is missing"
fi fi
;; ;;
%BACKUP%)
# Get the MD5 checksum.
original_md5="${i##*$'\t'}"
# Strip the md5sum after the tab.
i="${i%$'\t'*}"
local_file="/$i.pacnew"
package_file="$work_dir/$i"
# Include unmodified .pacnew files.
local_md5="$(md5sum "$local_file" | cut -d' ' -f1)"
if [[ $INCLUDE_PACNEW == 'n' ]] \
|| [[ ! -e $local_file ]] \
|| [[ $local_md5 != $original_md5 ]]; then
# Warn about modified files.
local_md5="$(md5sum "/$i" | cut -d' ' -f1)"
if [[ $local_md5 != $original_md5 ]]; then
warning "package file /$i has been modified"
fi
# Let the normal file be included in the %FILES% list.
continue
fi
;;
*)
continue
;;
esac esac
done
ret=0
bsdtar -cnf - -s'/.pacnew$//' "$local_file" 2> /dev/null | bsdtar -xpf - 2> /dev/null
# Workaround to bsdtar not reporting a missing file as an error
if ! [[ -e $package_file || -L $package_file ]]; then
error "unable to add $local_file to the package"
plain " If your user does not have permission to read this file then"
plain " you will need to run $myname as root"
rm -rf "$work_dir"
exit 1
fi
done < "$pkg_dir"/files
ret=$? ret=$?
if (( ret )); then if (( ret )); then
@ -256,7 +294,7 @@ while read i; do
# files # files
%BACKUP%) %BACKUP%)
# strip the md5sum after the tab # Strip the md5sum after the tab
echo "backup = ${i%%$'\t'*}" >> .PKGINFO echo "backup = ${i%%$'\t'*}" >> .PKGINFO
;; ;;
esac esac