[pacman-dev] [PATCH] WIP: Upgrade pacman local db for removal of symlink directory support
Detect directories in the local pacman database that are symlinks to directories in the filesystem and update the paths in the local database as needed. Also add a fine into the local directory with the libalpm version required for the database so we can more effectively the database version for future updates. Signed-off-by: Allan McRae <allan@archlinux.org> --- Very much a work in progress, but provided here so people using pacman-git can update their database to remove directory symlink support. scripts/pacman-db-upgrade.sh.in | 46 ++++++++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 10 deletions(-) diff --git a/scripts/pacman-db-upgrade.sh.in b/scripts/pacman-db-upgrade.sh.in index a1630c5..e4f92a4 100644 --- a/scripts/pacman-db-upgrade.sh.in +++ b/scripts/pacman-db-upgrade.sh.in @@ -109,18 +109,44 @@ 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_version ]]; then + db_version=($(cat "${dbroot}"/local/.alpm_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) ) + sed -i "s#^${dir#/}/#${realdir#/}/#" "$dbroot"/local/*/files + done + fi +fi + +echo "9.0" > "$dbroot"/local/.alpm_version + # remove the lock file rm -f "$lockfile" -- 1.8.3
participants (1)
-
Allan McRae