shell: Create cached profile directory once connected to the daemon.

Fixes a regression introduced in d12c4452a4,
where ‘guix shell’, on a fresh installation, would attempt to create the
cached profile directory under /var/guix/profiles/per-user/$USER, which only
guix-daemon can do, on the user’s first connection.

* guix/scripts/shell.scm (options-with-caching): Remove ‘mkdir-p’ call for
ROOT’s parent directory.  Add ‘create-gc-root-directory?’ key to the result.
* guix/scripts/environment.scm (guix-environment*): Honor
‘create-gc-root-directory?’ key.

Fixes: guix/guix#126
Reported-by: Maxim Cournoyer <maxim@guixotic.coop>
Change-Id: I782461c80c254467108c6b8d676d269866795746
This commit is contained in:
Ludovic Courtès 2025-11-04 23:52:54 +01:00
parent a560be0dd9
commit 7fd60bfc0b
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
2 changed files with 10 additions and 4 deletions

View file

@ -1235,6 +1235,8 @@ command-line option processing with 'parse-command-line'."
(if prof-drv (list prof-drv) '())
(if (derivation? bash) (list bash) '()))))
(mwhen gc-root
(mwhen (assoc-ref opts 'create-gc-root-directory?)
(return (mkdir-p (dirname gc-root))))
(register-gc-root profile gc-root))
(mwhen (assoc-ref opts 'check?)

View file

@ -261,10 +261,14 @@ cache) or a 'gc-root' key (to add the profile to cache)."
opts))) ;load right away
(if (and root (not (assq-ref opts 'gc-root)))
(begin
(if stat
(delete-file root)
(mkdir-p (dirname root)))
(alist-cons 'gc-root root opts))
(when stat
(delete-file root))
;; Note: Delay the creation of ROOT's parent directory: a
;; connection must first be made to the daemon so that it
;; creates /var/guix/profiles/per-user/$USER if needed.
(alist-cons 'gc-root root
(alist-cons 'create-gc-root-directory? #t
opts)))
opts))))
(define (auto-detect-manifest opts)