GNU bug report logs -
#19757
ignore trailing slash for `guix gc -d' /gnu/store/...something/
Previous Next
Reported by: ludo <at> gnu.org (Ludovic Courtès)
Date: Tue, 3 Feb 2015 20:58:01 UTC
Severity: normal
Done: ludo <at> gnu.org (Ludovic Courtès)
Bug is archived. No further changes may be made.
Full log
Message #11 received at 19757 <at> debbugs.gnu.org (full text, mbox):
[0001-gc-ignore-trailing-slash-or-subdirectories-for-guix-.patch (text/x-patch, inline)]
From 7385c2ddd4ca50cb80afcd315287eaadff4d8421 Mon Sep 17 00:00:00 2001
From: Cyrill Schenkel <cyrill.schenkel <at> gmail.com>
Date: Sun, 24 May 2015 13:46:37 +0200
Subject: [PATCH] gc: ignore trailing slash or subdirectories for `guix gc -d'
Fixes <http://bugs.gnu.org/19757>.
* guix/scripts/gc.scm (guix-gc): Convert paths to direct store paths.
* guix/store.scm (direct-store-path): Get rid of subdirectories in store path.
* tests/guix-gc.sh: New tests.
---
guix/scripts/gc.scm | 2 +-
guix/store.scm | 7 +++++++
tests/guix-gc.sh | 20 ++++++++++++++++++++
3 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/guix/scripts/gc.scm b/guix/scripts/gc.scm
index 4bae65a..a250cdc 100644
--- a/guix/scripts/gc.scm
+++ b/guix/scripts/gc.scm
@@ -168,7 +168,7 @@ Invoke the garbage collector.\n"))
(collect-garbage store min-freed)
(collect-garbage store))))
((delete)
- (delete-paths store paths))
+ (delete-paths store (map direct-store-path paths)))
((list-references)
(list-relatives references))
((list-requisites)
diff --git a/guix/store.scm b/guix/store.scm
index fc2f8d9..98b293b 100644
--- a/guix/store.scm
+++ b/guix/store.scm
@@ -121,6 +121,7 @@
derivation-path?
store-path-package-name
store-path-hash-part
+ direct-store-path
log-file))
(define %protocol-version #x10c)
@@ -1038,6 +1039,12 @@ syntactically valid store path."
(and=> (regexp-exec path-rx path)
(cut match:substring <> 1))))
+(define (direct-store-path path)
+ "Return the direct store path part of PATH."
+ (let* ((minimal-prefix-length (+ (string-length (%store-prefix)) 35))
+ (slash-index (string-index path #\/ minimal-prefix-length)))
+ (if slash-index (string-take path slash-index) path)))
+
(define (log-file store file)
"Return the build log file for FILE, or #f if none could be found. FILE
must be an absolute store file name, or a derivation file name."
diff --git a/tests/guix-gc.sh b/tests/guix-gc.sh
index eac9d82..c1eb66c 100644
--- a/tests/guix-gc.sh
+++ b/tests/guix-gc.sh
@@ -64,3 +64,23 @@ guix gc -C 1KiB
# Check trivial error cases.
if guix gc --delete /dev/null;
then false; else true; fi
+
+# Bug #19757
+out="`guix build guile-bootstrap`"
+test -d "$out"
+
+guix gc --delete "$out"
+
+! test -d "$out"
+
+out="`guix build guile-bootstrap`"
+test -d "$out"
+
+guix gc --delete "$out/"
+
+! test -d "$out"
+
+out="`guix build guile-bootstrap`"
+test -d "$out"
+
+guix gc --delete "$out/bin/guile"
--
2.1.4
This bug report was last modified 10 years and 2 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.