installer: Skip the backtrace page on user abort.

When the user aborts the installation because a core dump is discovered or the
installation command failed, displaying the abort backtrace doesn't make much
sense. Hide it when the abort condition is &user-abort-error and skip directly
to the dump page.

* gnu/installer/steps.scm (&user-abort-error): New variable.
(user-abort-error?): New procedure.
* gnu/installer/newt/final.scm (run-install-failed-page): Raise a
user-abort-error.
* gnu/installer/newt/welcome.scm (run-welcome-page): Ditto.
* gnu/installer.scm (installer-program): Hide the backtrace page and directly
propose to dump the report when the a &user-abort-error is raised.
This commit is contained in:
Mathieu Othacehe 2022-10-31 16:43:09 +01:00
parent 80387bc7c3
commit 62a3756bd9
No known key found for this signature in database
GPG key ID: 8354763531769CA6
4 changed files with 24 additions and 10 deletions

View file

@ -453,11 +453,21 @@ (define results
key args)
(define dump-dir
(prepare-dump key args #:result %current-result))
(define user-abort?
(match args
(((? user-abort-error? obj)) #t)
(_ #f)))
(define action
((installer-exit-error current-installer)
(get-string-all
(open-input-file
(string-append dump-dir "/installer-backtrace")))))
(if user-abort?
'dump
((installer-exit-error current-installer)
(get-string-all
(open-input-file
(string-append dump-dir
"/installer-backtrace"))))))
(match action
('dump
(let* ((dump-files

View file

@ -92,9 +92,8 @@ (define (run-install-failed-page)
;; Keep going, the installer will be restarted later on.
#t)
(3 (raise
(condition
(&message
(message "User abort.")))))))
(condition
(&user-abort-error))))))
(_
(send-to-clients '(installation-failure))
#t)))

View file

@ -145,8 +145,7 @@ (define (run-welcome-page logo)
(1 #t)
(2 (raise
(condition
(&message
(message "User abort.")))))))
(&user-abort-error))))))
(run-menu-page
(G_ "GNU Guix install")
(G_ "Welcome to GNU Guix system installer!

View file

@ -28,7 +28,10 @@ (define-module (gnu installer steps)
#:use-module (srfi srfi-34)
#:use-module (srfi srfi-35)
#:use-module (rnrs io ports)
#:export (<installer-step>
#:export (&user-abort-error
user-abort-error?
<installer-step>
installer-step
make-installer-step
installer-step?
@ -50,6 +53,9 @@ (define-module (gnu installer steps)
%current-result))
(define-condition-type &user-abort-error &error
user-abort-error?)
;; Hash table storing the step results. Use it only for logging and debug
;; purposes.
(define %current-result (make-hash-table))