Message ID | a058a4de3330a6f9cf41456e0781c3865dff0553.1689823730.git.maxim.cournoyer@gmail.com |
---|---|
State | New |
Headers | show |
Series | [bug#64737,1/2] git: Clarify commit relation reference in doc. | expand |
Hi, Maxim Cournoyer <maxim.cournoyer@gmail.com> writes: > * doc/guix.texi (Invoking guix time-machine): Document limitation. > * guix/scripts/time-machine.scm (%oldest-possible-commit): New variable. > (guix-time-machine): Raise an error when the channel commit is too old. So I did the following test: $ guix time-machine --commit=2ca299caf -- shell hello -- hello which after building Guile 2.2.4 crashed with: --8<---------------cut here---------------start------------->8--- construction de /gnu/store/rj2g4x23lqyaq16471qm94xp90slxp3h-compute-guix-derivation.drv... |déchargement de la construction de /gnu/store/rj2g4x23lqyaq16471qm94xp90slxp3h-compute-guix-derivation.drv sur « 10.0.0.7 » Computing Guix derivation for 'x86_64-linux'... Backtrace: - 5 (primitive-load "/gnu/store/b70mihsj9xx0xxp6izliqb5vm4…") In ice-9/eval.scm: 155:9 4 (_ _) 159:9 3 (_ #(#(#(#(#(#(#(#(#(#(#(…) …) …) …) …) …) …) …) …) …) …)) 173:47 2 (_ #(#(#(#(#(#(#(#(#(#(#(…) …) …) …) …) …) …) …) …) …) …)) In ./guix/self.scm: 932:4 1 (guix-derivation "/gnu/store/yfn2s94i5bvwr7j7r6xcnivwg…" …) 903:2 0 (guile-for-build "3.0") ./guix/self.scm:903:2: In procedure guile-for-build: Throw to key `match-error' with args `("match" "no matching pattern" "3.0")'. Backtrace: In ice-9/boot-9.scm: 1752:10 19 (with-exception-handler _ _ #:unwind? _ # _) In guix/store.scm: 659:37 18 (thunk) In guix/status.scm: 839:4 17 (call-with-status-report _ _) In guix/store.scm: 1298:8 16 (call-with-build-handler #<procedure 7fbf6ea46930 at g…> …) 2168:25 15 (run-with-store #<store-connection 256.99 7fbf7448ea50> …) In guix/inferior.scm: 927:8 14 (_ _) In guix/channels.scm: 982:2 13 (_ _) 924:2 12 (_ _) In ./guix/monads.scm: 487:9 11 (_ _) In guix/store.scm: 1996:8 10 (_ _) In guix/channels.scm: 675:14 9 (_ #<store-connection 256.99 7fbf7448ea50>) In guix/store.scm: 2168:25 8 (run-with-store #<store-connection 256.99 7fbf7448ea50> …) 1298:8 7 (call-with-build-handler _ _) 1298:8 6 (call-with-build-handler #<procedure 7fbf6f7bd8d0 at g…> …) In guix/channels.scm: 690:14 5 (_) In guix/store.scm: 2168:25 4 (run-with-store #<store-connection 256.99 7fbf7448ea50> …) In ice-9/eval.scm: 191:27 3 (_ #(#(#<directory (build-self) 7fbf6c40d960> #<pr…>) …)) In ice-9/boot-9.scm: 2007:7 2 (error _ . _) 1685:16 1 (raise-exception _ #:continuable? _) 1685:16 0 (raise-exception _ #:continuable? _) ice-9/boot-9.scm:1685:16: In procedure raise-exception: invalid build result (#<derivation /gnu/store/rj2g4x23lqyaq16471qm94xp90slxp3h-compute-guix-derivation.drv => /gnu/store/b70mihsj9xx0xxp6izliqb5vm462yifl-compute-guix-derivation 7fbf5bf82c30> "") --8<---------------cut here---------------end--------------->8--- Thoughts?
diff --git a/doc/guix.texi b/doc/guix.texi index 1d8ebcd72f..30fef813c0 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -5056,6 +5056,12 @@ Invoking guix time-machine large number of packages; the result is cached though and subsequent commands targeting the same commit are almost instantaneous. +Due to @command{guix time-machine} relying on the ``inferiors'' +mechanism (@pxref{Inferiors}), the oldest commit it can travel to is +commit @samp{2ca299caf} (``Add (guix inferior) and (guix scripts +repl).''), dated July 10@sup{th}, 2018. An error is returned when +attempting to navigate to older commits. + @quotation Note The history of Guix is immutable and @command{guix time-machine} provides the exact same software as they are in a specific Guix diff --git a/guix/scripts/time-machine.scm b/guix/scripts/time-machine.scm index d7c71ef705..36a40a1538 100644 --- a/guix/scripts/time-machine.scm +++ b/guix/scripts/time-machine.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2019 Konrad Hinsen <konrad.hinsen@fastmail.net> ;;; Copyright © 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com> +;;; Copyright © 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -19,13 +20,15 @@ ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (guix scripts time-machine) + #:use-module (guix channels) + #:use-module (guix diagnostics) #:use-module (guix ui) #:use-module (guix scripts) #:use-module (guix inferior) #:use-module (guix store) #:use-module (guix status) #:use-module ((guix git) - #:select (with-git-error-handling)) + #:select (update-cached-checkout with-git-error-handling)) #:use-module ((guix utils) #:select (%current-system)) #:use-module ((guix scripts pull) @@ -38,9 +41,16 @@ (define-module (guix scripts time-machine) #:use-module (srfi srfi-1) #:use-module (srfi srfi-11) #:use-module (srfi srfi-26) + #:use-module (srfi srfi-34) #:use-module (srfi srfi-37) + #:use-module (srfi srfi-71) #:export (guix-time-machine)) +;;; The commit introducing the 'inferiors' mechanism; it is the oldest commit +;;; that can be travelled to. +(define %oldest-possible-commit + "2ca299caf64489f4e1e665ec1158fb0309b0b565") + ;;; ;;; Command-line options. @@ -139,9 +149,20 @@ (define-command (guix-time-machine . args) (with-git-error-handling (let* ((opts (parse-args args)) (channels (channel-list opts)) + (guix-channel (find guix-channel? channels)) (command-line (assoc-ref opts 'exec)) + (ref (assoc-ref opts 'ref)) + (checkout commit relation (update-cached-checkout + (channel-url guix-channel) + #:ref (or ref '()) + #:starting-commit + %oldest-possible-commit)) (substitutes? (assoc-ref opts 'substitutes?)) (authenticate? (assoc-ref opts 'authenticate-channels?))) + (unless (memq relation '(ancestor self)) + (raise (formatted-message + (G_ "cannot travel past commit `~a' from July 10th, 2018") + (string-take %oldest-possible-commit 12)))) (when command-line (let* ((directory (with-store store