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

From: Maxim Cournoyer <[email-masked]>
Date: Tue, 30 May 2017 20:52:05 -0700

Hi Ludovic,

[email-masked] (Ludovic Courtès) writes:

> 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.

Thanks!

> Apologies for the delay!

No need for apologies! I can't say my responses are very timely either,
so I understand. I'm rather amazed at how you seemingly manage to keep
pace with all the activity happening around here (same goes for rekado,
lfam and the other most active maintainers/contributors). Hats off to
all of you!

Maxim