On Thu, Oct 20, 2022 at 08:51:04PM +0200, Liliana Marie Prikler wrote: > Am Mittwoch, dem 19.10.2022 um 12:26 +0300 schrieb Efraim Flashner: > > * guix/scripts/gc.scm (show-help, %options): Add '--vacuum-store'. > > * guix/store/database.scm (vacuum-database): New procedure. > > * doc/guix.texi (Invoking guix gc): Document the option. > > --- > >  doc/guix.texi           | 11 +++++++++++ > >  guix/scripts/gc.scm     | 11 +++++++++++ > >  guix/store/database.scm |  9 ++++++++- > >  3 files changed, 30 insertions(+), 1 deletion(-) > > > > diff --git a/doc/guix.texi b/doc/guix.texi > > index 3bf2dee752..89fd04415a 100644 > > --- a/doc/guix.texi > > +++ b/doc/guix.texi > > @@ -4531,6 +4531,17 @@ Invoking guix gc > >  this option is primarily useful when the daemon was running with > >  @option{--disable-deduplication}. > >   > > +@item --vacuum-store > > +@cindex vacuum the store database > > +@comment Avoid words like 'repair,' 'compress,' and 'optimize.' > > +Guix uses an sqlite database to keep track of the items in > > (@pxref{The Store}). > > +Overtime it is possible that the database may grow to a large size > > and become > > +fragmented.  As a result, one may wish to clear the freed space and > > join the > > +partially used pages in the database left behind from removed > > packages or after > > +running the garbage collector.  Running @command{sudo guix gc -- > > vacuum-store} > > +will lock the database and @code{VACUUM} the store, defragmenting > > the database > > +and purging freed pages, unlocking the database when it finishes.. > You're using vacuum-store here... > > >  @end table > >   > >  @node Invoking guix pull > > diff --git a/guix/scripts/gc.scm b/guix/scripts/gc.scm > > index 65cd4bdf8b..5e775c5cdb 100644 > > --- a/guix/scripts/gc.scm > > +++ b/guix/scripts/gc.scm > > @@ -1,5 +1,6 @@ > >  ;;; GNU Guix --- Functional package management for GNU > >  ;;; Copyright © 2012-2013, 2015-2020, 2022 Ludovic Courtès > > > > +;;; Copyright © 2022 Efraim Flashner > >  ;;; > >  ;;; This file is part of GNU Guix. > >  ;;; > > @@ -27,6 +28,7 @@ (define-module (guix scripts gc) > >                                  generation-number) > >    #:autoload   (guix scripts package) (delete-generations) > >    #:autoload   (gnu home) (home-generation-base) > > +  #:autoload   (guix store database) (vacuum-database) > >    #:use-module (ice-9 match) > >    #:use-module (ice-9 regex) > >    #:use-module (srfi srfi-1) > > @@ -86,6 +88,10 @@ (define (show-help) > >    (display (G_ " > >        --clear-failures   remove PATHS from the set of cached > > failures")) > >    (newline) > > +  (display (G_ " > > +      --vacuum-database  repack the sqlite database tracking the > > store > > +                         using less space")) > > +  (newline) > >    (display (G_ " > >    -h, --help             display this help and exit")) > >    (display (G_ " > > @@ -131,6 +137,11 @@ (define %options > >                  (lambda args > >                    (show-version-and-exit "guix gc"))) > >   > > +        (option '("vacuum-database") #f #f > > +                (lambda args > > +                  (vacuum-database) > > +                  (exit 0))) > > + > >          (option '(#\C "collect-garbage") #f #t > >                  (lambda (opt name arg result) > >                    (let ((result (alist-cons 'action 'collect-garbage > > diff --git a/guix/store/database.scm b/guix/store/database.scm > > index 8d08def833..e664015673 100644 > > --- a/guix/store/database.scm > > +++ b/guix/store/database.scm > > @@ -2,6 +2,7 @@ > >  ;;; Copyright © 2017, 2019 Caleb Ristvedt > >  ;;; Copyright © 2018, 2020, 2021 Ludovic Courtès > >  ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen > > +;;; Copyright © 2022 Efraim Flashner > >  ;;; > >  ;;; This file is part of GNU Guix. > >  ;;; > > @@ -45,7 +46,8 @@ (define-module (guix store database) > >              sqlite-register > >              register-items > >              %epoch > > -            reset-timestamps)) > > +            reset-timestamps > > +            vacuum-database)) > >   > >  ;;; Code for working with the store database directly. > >   > > @@ -438,3 +440,8 @@ (define* (register-items db items > >                      (register db item) > >                      (report)) > >                    items))))) > > + > > +(define (vacuum-database) > > +  (let ((db (sqlite-open (store-database-file)))) > > +    (sqlite-exec db "VACUUM;") > > +    (sqlite-close db))) > ... but vacuum-database here. > > Since the database is just a part of the store, I think making it > "vacuum-database" everywhere ought to make it both more consistent and > more correct. Agreed. I even made sure it was --vacuum-database in the help menu from 'guix gc --help'. Truth is I wrote the code and then the next day I wrote the documentation, so figures I would document it wrong ... -- Efraim Flashner אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted