summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Reisner <dreisner@archlinux.org>2011-09-14 05:02:36 +0200
committerDave Reisner <dreisner@archlinux.org>2011-09-14 23:25:29 +0200
commit4a02350ded318bdc1da5421551784ab2a10dd96b (patch)
tree1a3579a2802490add5a06ccb99b40bb7ba47bb60
parentd1e04c1b677d733262a0436ed9b25b2e7eada15e (diff)
downloadpacman-4a02350ded318bdc1da5421551784ab2a10dd96b.tar.gz
pacman-4a02350ded318bdc1da5421551784ab2a10dd96b.tar.xz
makepkg: fix recreation of hardlinks to .gz manpages
4ed12ae tightened up the logic to use only find, but ignored the fact that since the manpage hard link names were no longer captured. They were created as separate compressed manpages, rather than as hardlinks. This also introduces a minor efficiency of deleting all hardlinks at once and using proper iteration over an array rather than a string. Note to anyone else touching this code: e2fsprogs and libpcap are useful for testing this. If that changes in the future, you can use the below bash to locate others: IFS=$'\n' read -rd '' -a a < <(find /usr/share/man -type f \! -links 1) pacman -Qqo "${a[@]}" | sort -u I broke it! Signed-off-by: Dave Reisner <dreisner@archlinux.org>
-rw-r--r--scripts/makepkg.sh.in11
1 files changed, 6 insertions, 5 deletions
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index b83f57a1..6304a258 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -996,14 +996,15 @@ tidy_install() {
# check file still exists (potentially already compressed due to hardlink)
if [[ -f ${manpage} ]]; then
# find hard links and remove them
- # the '|| true' part keeps the script from bailing if find returned an
- # error, such as when one of the man directories doesn't exist
- find "${MAN_DIRS[@]}" \! -name "$file" -samefile "$manpage" \
- -exec rm -f {} \; 2>/dev/null || true
+ # the '|| true' part keeps the script from bailing on the EOF returned
+ # by read at the end of the find output
+ IFS=$'\n' read -rd '' -a hardlinks < \
+ <(find "${MAN_DIRS[@]}" \! -name "$file" -samefile "$manpage" 2>/dev/null) || true
+ rm -f "${hardlinks[@]}"
# compress the original
gzip -9 "$manpage"
# recreate hard links removed earlier
- for hl in ${hardlinks}; do
+ for hl in "${hardlinks[@]}"; do
ln "${manpage}.gz" "${hl}.gz"
chmod 644 ${hl}.gz
done