[pacman-dev] [PATCH 5/5] Extend database upgrade script to handle alpm db version 9
Allan McRae
allan at archlinux.org
Thu Aug 8 19:49:36 EDT 2013
On 08/08/13 04:42, lolilolicon wrote:
>> + # 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
> missing quote, "${dirlist[@]}"
>
>> > + realdir=( $(cd $dir; pwd -P) )
> missing quote, "$dir"; why is realdir an array?
>
>> > + sed -i "s#^${dir#/}/#${realdir#/}/#" "$dbroot"/local/*/files
> If it's almost safe to assume paths don't include '\n', it's far less
> so to assume they don't include '#'.
> Also $dir is treated as a pattern, not a fixed string here.
> This should be better:
>
> 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
> }
> }'
>
> awk doesn't have the convenience of in place file editting though, so
> we may have to wrap this inside a loop, and store the updated data in
> a temp file (or just a var?)...
>
@Dave: comments here? I believe I got the sed from you - although I am
sure it was supposed to be a quick and dirty hack...
Allan
More information about the pacman-dev
mailing list