compress-man-pages: symlink compressed manpages deterministically

For example graphviz has chained symlinked manpages: dot2gxl.1 is
a symlink to gv2gxl.1 which is a symlink to gxl2gv.1

The second loop replaces each non-compressed symlink to a compressed
symlink. The target is determined with 'readlink -f', which follows
links recursively until the first name that is not a link (so either
the 'target name' or the first 'dangling' symlink).

This means that if the loop converted dot2gxl.1 before converting
gv2gxl.1 it would add a symlink `dot2gxl.1.gz->gxl2gv.1.gz`. When
it converted gv2gxl.1 first, it would then add a
`dot2gxl.1.gz->gv2gxl.1.gz` symlink.

Both are 'correct', but it's weird the result depends on the order
in which 'find' returns the files. This PR makes the behaviour
deterministic.

fixes #104708
This commit is contained in:
Arnout Engelen 2020-12-03 20:03:20 +01:00
parent 6cea12ccff
commit 777cb35eb8
No known key found for this signature in database
GPG key ID: 061107B0F74A6DAA

View file

@ -21,6 +21,7 @@ compressManPages() {
# Point symlinks to compressed manpages.
find "$dir"/share/man/ -type l -a '!' -regex '.*\.\(bz2\|gz\)$' -print0 \
| sort -z \
| while IFS= read -r -d $'\0' f
do
local target