GNU bug report logs - #19757
ignore trailing slash for `guix gc -d' /gnu/store/...something/

Previous Next

Package: guix;

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.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 19757 in the body.
You can then email your comments to 19757 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-guix <at> gnu.org:
bug#19757; Package guix. (Tue, 03 Feb 2015 20:58:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to ludo <at> gnu.org (Ludovic Courtès):
New bug report received and forwarded. Copy sent to bug-guix <at> gnu.org. (Tue, 03 Feb 2015 20:58:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: ludo <at> gnu.org (Ludovic Courtès)
To: sleep_walker <at> suse.cz
Cc: guix-devel <at> gnu.org, bug-guix <at> gnu.org
Subject: Re: ignore trailing slash for `guix gc -d' /gnu/store/...something/
Date: Tue, 03 Feb 2015 21:57:04 +0100
sleep_walker <at> suse.cz skribis:

> Package: guix
> Version: 0.8.1
>
> When I invoke `guix gc -d /path', success of the command depends whether /path ends with slash or not:
>
> $ guix gc -d /gnu/store/mgqk0kv5jckrd7l5cwj68fp7cz2l4qqj-luajit-2.0.3/
> guix gc: error: build failed: path `/gnu/store/mgqk0kv5jckrd7l5cwj68fp7cz2l4qqj-luajit-2.0.3/' is not in the Nix store
>
> $ guix gc -d /gnu/store/mgqk0kv5jckrd7l5cwj68fp7cz2l4qqj-luajit-2.0.3
> finding garbage collector roots...
> cannot read potential root `/var/guix/manifests'
> deleting `/gnu/store/73b760g2nr9syhznydgly8r7vl2k9z11-profile'
> deleting `/gnu/store/mgqk0kv5jckrd7l5cwj68fp7cz2l4qqj-luajit-2.0.3'
> deleting `/gnu/store/trash'
> deleting unused links...
> note: currently hard linking saves 247.60 MiB
>
>
> * with the misleading error message it is usability bug
> * it should be safe always try to remove slash from the end
> * other commands may be affected too and the behaviour should be consistent for all commands

What behavior do you think would be appropriate when running, say:

  guix gc -d /gnu/store/mgqk0kv5jckrd7l5cwj68fp7cz2l4qqj-luajit-2.0.3/bin/lua

Should it be equivalent to:

  guix gc -d /gnu/store/mgqk0kv5jckrd7l5cwj68fp7cz2l4qqj-luajit-2.0.3

I would think so, but I’d like to have feedback.

Thanks,
Ludo’.

PS: Make sure to use bug-guix <at> gnu.org for bug reports.




Information forwarded to bug-guix <at> gnu.org:
bug#19757; Package guix. (Wed, 25 Feb 2015 20:25:02 GMT) Full text and rfc822 format available.

Message #8 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Tomáš Čech <sleep_walker <at> suse.cz>
To: guix-devel <at> gnu.org, bug-guix <at> gnu.org
Subject: Re: ignore trailing slash for `guix gc -d' /gnu/store/...something/
Date: Wed, 25 Feb 2015 21:24:45 +0100
[Message part 1 (text/plain, inline)]
Sorry for late response.

On Tue, Feb 03, 2015 at 09:57:04PM +0100, Ludovic Courtès wrote:
>sleep_walker <at> suse.cz skribis:
>
>> Package: guix
>> Version: 0.8.1
>>
>> When I invoke `guix gc -d /path', success of the command depends whether /path ends with slash or not:
>>
>> $ guix gc -d /gnu/store/mgqk0kv5jckrd7l5cwj68fp7cz2l4qqj-luajit-2.0.3/
>> guix gc: error: build failed: path `/gnu/store/mgqk0kv5jckrd7l5cwj68fp7cz2l4qqj-luajit-2.0.3/' is not in the Nix store
>>
>> $ guix gc -d /gnu/store/mgqk0kv5jckrd7l5cwj68fp7cz2l4qqj-luajit-2.0.3
>> finding garbage collector roots...
>> cannot read potential root `/var/guix/manifests'
>> deleting `/gnu/store/73b760g2nr9syhznydgly8r7vl2k9z11-profile'
>> deleting `/gnu/store/mgqk0kv5jckrd7l5cwj68fp7cz2l4qqj-luajit-2.0.3'
>> deleting `/gnu/store/trash'
>> deleting unused links...
>> note: currently hard linking saves 247.60 MiB
>>
>>
>> * with the misleading error message it is usability bug
>> * it should be safe always try to remove slash from the end
>> * other commands may be affected too and the behaviour should be consistent for all commands
>
>What behavior do you think would be appropriate when running, say:
>
>  guix gc -d /gnu/store/mgqk0kv5jckrd7l5cwj68fp7cz2l4qqj-luajit-2.0.3/bin/lua
>
>Should it be equivalent to:
>
>  guix gc -d /gnu/store/mgqk0kv5jckrd7l5cwj68fp7cz2l4qqj-luajit-2.0.3
>
>I would think so, but I’d like to have feedback.

I think so as well.

>
>Thanks,
>Ludo’.
>
>PS: Make sure to use bug-guix <at> gnu.org for bug reports.

Sorry about that, I'm still getting used to GNU's bugtracker...
[Message part 2 (application/pgp-signature, inline)]

Information forwarded to bug-guix <at> gnu.org:
bug#19757; Package guix. (Sun, 24 May 2015 17:14:02 GMT) Full text and rfc822 format available.

Message #11 received at 19757 <at> debbugs.gnu.org (full text, mbox):

From: Cyrill Schenkel <cyrill.schenkel <at> gmail.com>
To: bug-guix <at> gnu.org, 19757 <at> debbugs.gnu.org
Subject: [PATCH] gc: ignore trailing slash or subdirectories for `guix gc -d'
Date: Sun, 24 May 2015 14:04:15 +0200
[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





Reply sent to ludo <at> gnu.org (Ludovic Courtès):
You have taken responsibility. (Tue, 26 May 2015 20:28:02 GMT) Full text and rfc822 format available.

Notification sent to ludo <at> gnu.org (Ludovic Courtès):
bug acknowledged by developer. (Tue, 26 May 2015 20:28:03 GMT) Full text and rfc822 format available.

Message #16 received at 19757-done <at> debbugs.gnu.org (full text, mbox):

From: ludo <at> gnu.org (Ludovic Courtès)
To: Cyrill Schenkel <cyrill.schenkel <at> gmail.com>
Cc: 19757-done <at> debbugs.gnu.org
Subject: Re: bug#19757: [PATCH] gc: ignore trailing slash or subdirectories
 for `guix gc -d'
Date: Tue, 26 May 2015 22:27:40 +0200
Cyrill Schenkel <cyrill.schenkel <at> gmail.com> skribis:

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

Applied, thank you!

I tweaked ‘direct-store-path’ so that it gracefully handles non-store
file names such as “/dev/null”.

Ludo’.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Wed, 24 Jun 2015 11:24:05 GMT) Full text and rfc822 format available.

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.