pacman-db-upgrade: do not mangle file lists
grep'ing out blank lines and sorting output thoroughly breaks any file lists with %BACKUP% entries which must be separated from the file list by a blank line. Adds a custom function to ensure that all paths printed are non-empty and unique. Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com> Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
parent
1e3c088c2e
commit
5002227296
1 changed files with 22 additions and 7 deletions
|
@ -204,25 +204,40 @@ if [[ -z "$db_version" ]]; then
|
||||||
|
|
||||||
for f in "$dbroot"/local/*/files; do
|
for f in "$dbroot"/local/*/files; do
|
||||||
awk -v "olddir=$olddir" -v "newdir=$newdir" -v "parents=$parents" '
|
awk -v "olddir=$olddir" -v "newdir=$newdir" -v "parents=$parents" '
|
||||||
|
function print_path(path) {
|
||||||
|
if (path != "" && !(path in seen)) {
|
||||||
|
seen[path] = 1
|
||||||
|
print path
|
||||||
|
}
|
||||||
|
}
|
||||||
BEGIN {
|
BEGIN {
|
||||||
i = length(olddir) + 1
|
oldlen = length(olddir) + 1
|
||||||
file = substr(newdir, 0, length(newdir) - 1)
|
file = substr(newdir, 0, length(newdir) - 1)
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
if ($0 == olddir) {
|
if ($0 == "") {
|
||||||
|
# end of section, clear seen paths and print as-is
|
||||||
|
for ( i in seen ) {
|
||||||
|
delete seen[i]
|
||||||
|
}
|
||||||
|
print
|
||||||
|
} else if ($0 == olddir) {
|
||||||
# replace symlink with its target, including parents
|
# replace symlink with its target, including parents
|
||||||
printf("%s", parents)
|
split(parents, paths, "\n")
|
||||||
printf("%s\n", newdir)
|
for (i in paths) {
|
||||||
|
print_path(paths[i])
|
||||||
|
}
|
||||||
|
print_path(newdir)
|
||||||
} else if ($0 == file) {
|
} else if ($0 == file) {
|
||||||
# newdir already existed as a file, skip it
|
# newdir already existed as a file, skip it
|
||||||
} else if (index($0, olddir) == 1) {
|
} else if (index($0, olddir) == 1) {
|
||||||
# update paths that were under olddir
|
# update paths that were under olddir
|
||||||
printf("%s%s\n", newdir, substr($0, i))
|
print_path(newdir substr($0, oldlen))
|
||||||
} else {
|
} else {
|
||||||
# print everything else as-is
|
# print everything else as-is
|
||||||
print
|
print_path($0)
|
||||||
}
|
}
|
||||||
}' "$f" | grep . | LC_ALL=C sort -u > "$f.tmp"
|
}' "$f" > "$f.tmp"
|
||||||
mv "$f.tmp" "$f"
|
mv "$f.tmp" "$f"
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
|
|
Loading…
Add table
Reference in a new issue