Subject: Re: bug#26771: [PATCH] build-system/gnu: Fix compress-documentation phase

From: [email-masked] (Ludovic Courtès)
Date: Tue, 30 May 2017 21:59:10 +0200

Hi Maxim,

Maxim Cournoyer <[email-masked]> skribis:

> This patch fixes a small defect in compress-documentation phase of our
> gnu-build-system. The phase could create dangling manual
> page symlinks in the case those were recursive.
>
> One package which exhibited the issue is Gimp; you might have noticed
> the `find-files' error message when the manual page database gets
> created on a profile generation as a consequence of that.
>
> Here's the Gimp example in some more details:
>
> * The manual pages under share/man/man1 before the documentation is
>   compressed:
>   
>      gimp.1 -> gimp-2.8.1                  
>      gimp-2.8.1                            
>      gimp-console.1 -> gimp-console-2.8.1  
>      gimp-console-2.8.1 -> gimp-2.8.1      
>      gimptool-2.0.1
>
> * After the documentation is compressed:
>
>      gimp.1 -> gimp-2.8.1.gz
>      gimp-2.8.1.gz
>      gimp-console.1 -> gimp-console-2.8.1.gz
>      gimp-console-2.8.1 -> gimp-2.8.1.gz
>      gimptool-2.0.1.gz
>
> We can see that the gimp-console.1 link now points to an unexisting
> file. To correct the problem, a `points-to-symbolic-link?' predicate is
> added and its negation is used to filter out the links which shouldn't
> be retargetted.
>
> I didn't test this by rebuilding the world; rather, I exercised the
> `compress-documentation' function at the REPL, feeding it a copied gimp
> derivation output as it appeared before the problematic
> compress-documentation phase.

Thanks for the detailed analysis and patch!

> From 81b5ade74a7debbde30a98ac5dc884844f6dfeb7 Mon Sep 17 00:00:00 2001
> From: Maxim Cournoyer <[email-masked]>
> Date: Tue, 25 Apr 2017 01:46:05 +0900
> Subject: [PATCH] build-system/gnu: Fix compress-documentation phase
>
> The compress-documentation phase was breaking recursive symbolic links used
> for manuals, which was made visible by the `find-files' call in the recently
> added `manual-database' profile hook.
>
> * guix/build/gnu-build-system.scm (retarget-symblink)[link]: Rename to
> `symbolic-link' (`link' is a Guile function).
> (points-to-symbolic-link?): Add predicate.
> (maybe-compress-directory): Rename `symlinks' to `symbolic-links', use
> `points-to-symbolic-link?' to filter out symbolic links which shouldn't be
> retargetted and re-order the calls to `retarget-symlink' and `documentation-compressor'.

I pushed it as facac292808d11d5e6ea528cc7dbe93595f62c9b, where I removed
the “symbolic-link” renames, which I thought were unnecessary and
unrelated.

Apologies for the delay!

Ludo’.