[pacman-dev] [PATCH v2] Extend database upgrade script to handle alpm db version 9

Allan McRae allan at archlinux.org
Fri Sep 27 01:06:04 EDT 2013


On 18/09/13 18:59, Allan McRae wrote:
> Signed-off-by: Allan McRae <allan at archlinux.org>
> ---
> 
> v2: Use awk to do symlink to actual directory replacement

Any comments on this before it gets committed?

> As an example of what changes get made:
> 
> diff -Naur local.tmp/glibc-2.18-4/files local/glibc-2.18-4/files
> --- local.tmp/glibc-2.18-4/files	2013-09-18 18:45:35.747068765 +1000
> +++ local/glibc-2.18-4/files	2013-09-18 18:51:29.633643945 +1000
> @@ -4,8 +4,8 @@
>  etc/locale.gen
>  etc/nscd.conf
>  etc/rpc
> -lib/
> -lib/libc.a
> +usr/lib/
> +usr/lib/libc.a
>  usr/
>  usr/bin/
>  usr/bin/catchsegv
> 
> 
> Note that now usr/lib/ is present twice in the file (may not always be the case)
> and these entries are out of alphabetical order.  Both these are cosmetic to
> pacman.
> 
>  scripts/pacman-db-upgrade.sh.in | 59 ++++++++++++++++++++++++++++++++++-------
>  1 file changed, 49 insertions(+), 10 deletions(-)
> 
> diff --git a/scripts/pacman-db-upgrade.sh.in b/scripts/pacman-db-upgrade.sh.in
> index a1630c5..d6f4169 100644
> --- a/scripts/pacman-db-upgrade.sh.in
> +++ b/scripts/pacman-db-upgrade.sh.in
> @@ -109,18 +109,57 @@ fi
>  # do not let pacman run while we do this
>  touch "$lockfile"
>  
> -# pacman-3.4 to 3.5 upgrade - merge depends into desc
> -if [[ $(find "$dbroot"/local -name depends) ]]; then
> -	msg "$(gettext "Pre-3.5 database format detected - upgrading...")"
> -	for i in "$dbroot"/local/*; do
> -		if [[ -f "$i"/depends ]]; then
> -			cat "$i"/depends >> "$i"/desc
> -			rm "$i"/depends
> -		fi
> -	done
> -	msg "$(gettext "Done.")"
> +if [[ -f "${dbroot}"/local/.alpm_db_version ]]; then
> +	db_version=$(cat "${dbroot}"/local/.alpm_db_version)
>  fi
>  
> +if [[ -z "$db_version" ]]; then
> +	# pacman-3.4 to 3.5 upgrade - merge depends into desc
> +	if [[ $(find "$dbroot"/local -name depends) ]]; then
> +		msg "$(gettext "Pre-3.5 database format detected - upgrading...")"
> +		for i in "$dbroot"/local/*; do
> +			if [[ -f "$i"/depends ]]; then
> +				cat "$i"/depends >> "$i"/desc
> +				rm "$i"/depends
> +			fi
> +		done
> +		msg "$(gettext "Done.")"
> +	fi
> +
> +	# pacman 4.1 to 4.2 upgrade - remove directory symlink support
> +	dirlist=()
> +
> +	unset GREP_OPTIONS
> +	while IFS= read -r dir; do
> +		dirlist+=("/${dir%/}")
> +	done < <(grep -h '/$' "$dbroot"/local/*/files | sort -u)
> +
> +	mapfile -t dirlist < <(find "${dirlist[@]}" -maxdepth 0 -type l)
> +
> +	if [[ ${#dirlist[@]} != 0 ]]; then
> +		msg "$(gettext "Pre-4.2 database format detected - upgrading...")"
> +		for dir in "${dirlist[@]}"; do
> +			realdir="$(cd $dir; pwd -P)"
> +			for f in "$dbroot"/local/*/files; do
> +				awk -v "dir=${dir#/}/" -v "realdir=${realdir#/}/" '
> +					BEGIN {
> +						i = length(dir) + 1
> +					}
> +					{
> +						if (index($0, dir) == 1) {
> +							printf("%s%s\n", realdir, substr($0, i))
> +						} else {
> +							print
> +						}
> +					}' $f > $f.tmp
> +				mv $f.tmp $f
> +			done
> +		done
> +	fi
> +fi
> +
> +echo "9" > "$dbroot"/local/.alpm_db_version
> +
>  # remove the lock file
>  rm -f "$lockfile"
>  
> 



More information about the pacman-dev mailing list