guix gc: Add '--list-roots'.
* guix/scripts/gc.scm (show-help, %options): Add '--list-roots'. (guix-gc)[list-roots]: New procedure. Handle '--list-roots'. * tests/guix-gc.sh: Test it. * doc/guix.texi (Invoking guix gc): Document it.master
parent
72eda0624b
commit
bacf980c76
|
@ -3385,7 +3385,7 @@ deleted. The set of garbage collector roots (``GC roots'' for short)
|
||||||
includes default user profiles; by default, the symlinks under
|
includes default user profiles; by default, the symlinks under
|
||||||
@file{/var/guix/gcroots} represent these GC roots. New GC roots can be
|
@file{/var/guix/gcroots} represent these GC roots. New GC roots can be
|
||||||
added with @command{guix build --root}, for example (@pxref{Invoking
|
added with @command{guix build --root}, for example (@pxref{Invoking
|
||||||
guix build}).
|
guix build}). The @command{guix gc --list-roots} command lists them.
|
||||||
|
|
||||||
Prior to running @code{guix gc --collect-garbage} to make space, it is
|
Prior to running @code{guix gc --collect-garbage} to make space, it is
|
||||||
often useful to remove old generations from user profiles; that way, old
|
often useful to remove old generations from user profiles; that way, old
|
||||||
|
@ -3451,6 +3451,10 @@ This prints nothing unless the daemon was started with
|
||||||
@option{--cache-failures} (@pxref{Invoking guix-daemon,
|
@option{--cache-failures} (@pxref{Invoking guix-daemon,
|
||||||
@option{--cache-failures}}).
|
@option{--cache-failures}}).
|
||||||
|
|
||||||
|
@item --list-roots
|
||||||
|
List the GC roots owned by the user; when run as root, list @emph{all} the GC
|
||||||
|
roots.
|
||||||
|
|
||||||
@item --clear-failures
|
@item --clear-failures
|
||||||
Remove the specified store items from the failed-build cache.
|
Remove the specified store items from the failed-build cache.
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
;;; GNU Guix --- Functional package management for GNU
|
;;; GNU Guix --- Functional package management for GNU
|
||||||
;;; Copyright © 2012, 2013, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
|
;;; Copyright © 2012, 2013, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of GNU Guix.
|
;;; This file is part of GNU Guix.
|
||||||
;;;
|
;;;
|
||||||
|
@ -20,6 +20,7 @@
|
||||||
#:use-module (guix ui)
|
#:use-module (guix ui)
|
||||||
#:use-module (guix scripts)
|
#:use-module (guix scripts)
|
||||||
#:use-module (guix store)
|
#:use-module (guix store)
|
||||||
|
#:use-module (guix store roots)
|
||||||
#:autoload (guix build syscalls) (free-disk-space)
|
#:autoload (guix build syscalls) (free-disk-space)
|
||||||
#:use-module (ice-9 match)
|
#:use-module (ice-9 match)
|
||||||
#:use-module (ice-9 regex)
|
#:use-module (ice-9 regex)
|
||||||
|
@ -48,6 +49,8 @@ Invoke the garbage collector.\n"))
|
||||||
-F, --free-space=FREE attempt to reach FREE available space in the store"))
|
-F, --free-space=FREE attempt to reach FREE available space in the store"))
|
||||||
(display (G_ "
|
(display (G_ "
|
||||||
-d, --delete attempt to delete PATHS"))
|
-d, --delete attempt to delete PATHS"))
|
||||||
|
(display (G_ "
|
||||||
|
--list-roots list the user's garbage collector roots"))
|
||||||
(display (G_ "
|
(display (G_ "
|
||||||
--optimize optimize the store by deduplicating identical files"))
|
--optimize optimize the store by deduplicating identical files"))
|
||||||
(display (G_ "
|
(display (G_ "
|
||||||
|
@ -135,6 +138,10 @@ Invoke the garbage collector.\n"))
|
||||||
(alist-cons 'verify-options options
|
(alist-cons 'verify-options options
|
||||||
(alist-delete 'action
|
(alist-delete 'action
|
||||||
result))))))
|
result))))))
|
||||||
|
(option '("list-roots") #f #f
|
||||||
|
(lambda (opt name arg result)
|
||||||
|
(alist-cons 'action 'list-roots
|
||||||
|
(alist-delete 'action result))))
|
||||||
(option '("list-dead") #f #f
|
(option '("list-dead") #f #f
|
||||||
(lambda (opt name arg result)
|
(lambda (opt name arg result)
|
||||||
(alist-cons 'action 'list-dead
|
(alist-cons 'action 'list-dead
|
||||||
|
@ -205,6 +212,15 @@ Invoke the garbage collector.\n"))
|
||||||
(info (G_ "freeing ~h MiBs~%") (/ to-free 1024. 1024.))
|
(info (G_ "freeing ~h MiBs~%") (/ to-free 1024. 1024.))
|
||||||
(collect-garbage store to-free)))))
|
(collect-garbage store to-free)))))
|
||||||
|
|
||||||
|
(define (list-roots)
|
||||||
|
;; List all the user-owned GC roots.
|
||||||
|
(let ((roots (filter (if (zero? (getuid)) (const #t) user-owned?)
|
||||||
|
(gc-roots))))
|
||||||
|
(for-each (lambda (root)
|
||||||
|
(display root)
|
||||||
|
(newline))
|
||||||
|
roots)))
|
||||||
|
|
||||||
(with-error-handling
|
(with-error-handling
|
||||||
(let* ((opts (parse-options))
|
(let* ((opts (parse-options))
|
||||||
(store (open-connection))
|
(store (open-connection))
|
||||||
|
@ -238,6 +254,9 @@ Invoke the garbage collector.\n"))
|
||||||
(else
|
(else
|
||||||
(let-values (((paths freed) (collect-garbage store)))
|
(let-values (((paths freed) (collect-garbage store)))
|
||||||
(info (G_ "freed ~h MiBs~%") (/ freed 1024. 1024.)))))))
|
(info (G_ "freed ~h MiBs~%") (/ freed 1024. 1024.)))))))
|
||||||
|
((list-roots)
|
||||||
|
(assert-no-extra-arguments)
|
||||||
|
(list-roots))
|
||||||
((delete)
|
((delete)
|
||||||
(delete-paths store (map direct-store-path paths)))
|
(delete-paths store (map direct-store-path paths)))
|
||||||
((list-references)
|
((list-references)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# GNU Guix --- Functional package management for GNU
|
# GNU Guix --- Functional package management for GNU
|
||||||
# Copyright © 2013, 2015, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
|
# Copyright © 2013, 2015, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
|
||||||
#
|
#
|
||||||
# This file is part of GNU Guix.
|
# This file is part of GNU Guix.
|
||||||
#
|
#
|
||||||
|
@ -34,7 +34,7 @@ unset drv
|
||||||
unset out
|
unset out
|
||||||
|
|
||||||
# For some operations, passing extra arguments is an error.
|
# For some operations, passing extra arguments is an error.
|
||||||
for option in "" "-C 500M" "--verify" "--optimize"
|
for option in "" "-C 500M" "--verify" "--optimize" "--list-roots"
|
||||||
do
|
do
|
||||||
if guix gc $option whatever; then false; else true; fi
|
if guix gc $option whatever; then false; else true; fi
|
||||||
done
|
done
|
||||||
|
@ -69,6 +69,8 @@ guix gc --delete "$drv"
|
||||||
drv="`guix build --root=guix-gc-root lsh -d`"
|
drv="`guix build --root=guix-gc-root lsh -d`"
|
||||||
test -f "$drv" && test -L guix-gc-root
|
test -f "$drv" && test -L guix-gc-root
|
||||||
|
|
||||||
|
guix gc --list-roots | grep "$PWD/guix-gc-root"
|
||||||
|
|
||||||
guix gc --list-live | grep "$drv"
|
guix gc --list-live | grep "$drv"
|
||||||
if guix gc --delete "$drv";
|
if guix gc --delete "$drv";
|
||||||
then false; else true; fi
|
then false; else true; fi
|
||||||
|
|
Reference in New Issue