[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
02/05: pack: 'guix pack -S xxx' no longer adds entries twice to the tarb
From: |
Ludovic Courtès |
Subject: |
02/05: pack: 'guix pack -S xxx' no longer adds entries twice to the tarball. |
Date: |
Fri, 11 May 2018 12:44:43 -0400 (EDT) |
civodul pushed a commit to branch master
in repository guix.
commit 26b8cadf88aeb1dfbc8625f02bbc20ecc0c718de
Author: Ludovic Courtès <address@hidden>
Date: Fri May 11 16:56:19 2018 +0200
pack: 'guix pack -S xxx' no longer adds entries twice to the tarball.
* guix/scripts/pack.scm
(self-contained-tarball)[build](symlink->directives):
Do not add a 'directory' directive for "/". Previously, as soon as we
were using '-S /bin=bin' or similar, we would add every entry a second
time in the tarball; this would translate as hard links in the tarball,
which tar < 1.30 sometimes fails to extract.
Pass symlinks defined in DIRECTIVES to 'tar'.
---
guix/scripts/pack.scm | 23 +++++++++++++++++------
1 file changed, 17 insertions(+), 6 deletions(-)
diff --git a/guix/scripts/pack.scm b/guix/scripts/pack.scm
index db56092..6d648d1 100644
--- a/guix/scripts/pack.scm
+++ b/guix/scripts/pack.scm
@@ -122,10 +122,17 @@ added to the pack."
;; parent directories.
(match-lambda
((source '-> target)
- (let ((target (string-append #$profile "/" target)))
- `((directory ,(dirname source))
+ (let ((target (string-append #$profile "/" target))
+ (parent (dirname source)))
+ ;; Never add a 'directory' directive for "/" so as to
+ ;; preserve its ownnership when extracting the archive (see
+ ;; below), and also because this would lead to adding the
+ ;; same entries twice in the tarball.
+ `(,@(if (string=? parent "/")
+ '()
+ `((directory ,parent)))
(,source
- -> ,(relative-file-name (dirname source) target)))))))
+ -> ,(relative-file-name parent target)))))))
(define directives
;; Fully-qualified symlinks.
@@ -146,9 +153,11 @@ added to the pack."
"")
#$tar "/bin"))
- ;; Note: there is not much to gain here with deduplication and
- ;; there is the overhead of the '.links' directory, so turn it
- ;; off.
+ ;; Note: there is not much to gain here with deduplication and there
+ ;; is the overhead of the '.links' directory, so turn it off.
+ ;; Furthermore GNUÂ tar < 1.30 sometimes fails to extract tarballs
+ ;; with hard links:
+ ;; <http://lists.gnu.org/archive/html/bug-tar/2017-11/msg00009.html>.
(populate-single-profile-directory %root
#:profile #$profile
#:closure "profile"
@@ -195,6 +204,8 @@ added to the pack."
(filter-map (match-lambda
(('directory directory)
(string-append "." directory))
+ ((source '-> _)
+ (string-append "." source))
(_ #f))
directives)))))))))