emacs-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debbugs-tracker] bug#17083: closed ( ‘unio n-build’ does not handle col


From: GNU bug Tracking System
Subject: [debbugs-tracker] bug#17083: closed ( ‘unio n-build’ does not handle collisions between a leaf and a sub-tree)
Date: Wed, 02 Apr 2014 21:44:02 +0000

Your message dated Wed, 02 Apr 2014 23:43:43 +0200
with message-id <address@hidden>
and subject line Re: bug#17083: ‘union-build’ does not handle collisions 
between a leaf and a sub-tree
has caused the debbugs.gnu.org bug report #17083,
regarding ‘union-build’ does not handle collisions between a leaf and a sub-tree
to be marked as done.

(If you believe you have received this mail in error, please contact
address@hidden)


-- 
17083: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=17083
GNU Bug Tracking System
Contact address@hidden with problems
--- Begin Message --- Subject: ‘union-build’ does not handle collisions between a leaf and a sub-tree Date: Mon, 24 Mar 2014 15:15:34 +0100 User-agent: Gnus/5.130007 (Ma Gnus v0.7) Emacs/24.3 (gnu/linux)
(Adding bug-guix.)

Mark H Weaver <address@hidden> skribis:

> On the Loongson 3A machine, I finished building all the packages from
> core-updates that I use in my profile, and then tried installing them.
> I got this:
>
> In 
> /gnu/store/9sqx55rgygyrcyg350cfqwy8wqb4fr69-module-import/guix/build/union.scm:
>  226: 1 [loop # #]
> In unknown file:
>    ?: 0 [mkdir 
> "/gnu/store/c30bsax58scw5qwcnbma16k6z88s1lh3-profile/./include" ...]
>
> ERROR: In procedure mkdir:
> ERROR: In procedure mkdir: File exists
> builder for `/gnu/store/17w6kggffh79drmmrdnxy1yhgr6p2in5-profile.drv' failed 
> with exit code 1
>
> The problem turns out to be that 'libffi' makes 'include' a symlink to
> 'lib/libffi-3.0.13/include', and union.scm cannot cope with conflicts
> between a directory and a symlink.

Ouch, good catch.

I’ve come up with a test that reproduces it:

--8<---------------cut here---------------start------------->8---
(test-assert "union-build with symlink to directory"
  (let* ((builder '(begin
                     (use-modules (guix build union) (guix build utils)
                                  (srfi srfi-26))
                     (mkdir-p "one/foo")
                     (call-with-output-file "one/foo/one"
                       (cut display "one" <>))
                     (mkdir-p "two/bar")
                     (symlink "bar" "two/foo")
                     (call-with-output-file "two/foo/two"
                       (cut display "two" <>))

                     (union-build (assoc-ref %outputs "out") '("one" "two"))))
         (drv
          (build-expression->derivation %store "union-collision-symlink"
                                        builder
                                        #:modules '((guix build union)
                                                    (guix build utils)))))
    (and (build-derivations %store (list drv))
         (with-directory-excursion (derivation->output-path drv)
           (and (file-exists? "one/foo/one")
                (file-exists? "two/foo/two")
                (file-exists? "two/bar/two"))))))
--8<---------------cut here---------------end--------------->8---

Actually union.scm cannot handle collisions between a leaf and a
directory in general, which should be fixed.

I can think of these cases:

  1. If the leaf is a regular file, error out.

  2. If the leaf is a symlink:

     a. If it points to a directory, union the directories.

     b. Otherwise, error out.

Does that make sense?

Do you think you could come up with a patch?  Alternately we could apply
Sree’s proposed workaround as a stopgap measure.

Thanks,
Ludo’.



--- End Message ---
--- Begin Message --- Subject: Re: bug#17083: ‘union-build’ does not handle collisions between a leaf and a sub-tree Date: Wed, 02 Apr 2014 23:43:43 +0200 User-agent: Gnus/5.130007 (Ma Gnus v0.7) Emacs/24.3 (gnu/linux)
address@hidden (Ludovic Courtès) skribis:

> Mark H Weaver <address@hidden> skribis:
>
>> On the Loongson 3A machine, I finished building all the packages from
>> core-updates that I use in my profile, and then tried installing them.
>> I got this:
>>
>> In 
>> /gnu/store/9sqx55rgygyrcyg350cfqwy8wqb4fr69-module-import/guix/build/union.scm:
>>  226: 1 [loop # #]
>> In unknown file:
>>    ?: 0 [mkdir 
>> "/gnu/store/c30bsax58scw5qwcnbma16k6z88s1lh3-profile/./include" ...]
>>
>> ERROR: In procedure mkdir:
>> ERROR: In procedure mkdir: File exists
>> builder for `/gnu/store/17w6kggffh79drmmrdnxy1yhgr6p2in5-profile.drv' failed 
>> with exit code 1
>>
>> The problem turns out to be that 'libffi' makes 'include' a symlink to
>> 'lib/libffi-3.0.13/include', and union.scm cannot cope with conflicts
>> between a directory and a symlink.
>
> Ouch, good catch.

This is fixed with the new union.scm (commit 1212999.)

> I’ve come up with a test that reproduces it:

This test was actually bogus, so I committed a correct one (commit
a53a9ae.)

Thanks!

Ludo’.


--- End Message ---

reply via email to

[Prev in Thread] Current Thread [Next in Thread]