~ruther/guix-local

807ba51950720d5321ea1c95234805ccdf9b479b — Ludovic Courtès 8 years ago 59d0f06
guix package: Swallow EPIPE upon 'guix package --list-generations'.

Fixes <http://bugs.gnu.org/27017>.
Reported by Alex Vong <alexvong1995@gmail.com>.

* guix/scripts/package.scm (process-query) <'list-generations>: Wrap
body in 'leave-on-EPIPE'.
1 files changed, 20 insertions(+), 18 deletions(-)

M guix/scripts/package.scm
M guix/scripts/package.scm => guix/scripts/package.scm +20 -18
@@ 681,24 681,26 @@ processed, #f otherwise."
         (unless (null-list? (cdr numbers))
           (display-profile-content-diff profile (car numbers) (cadr numbers))
           (diff-profiles profile (cdr numbers))))
       (cond ((not (file-exists? profile))      ; XXX: race condition
              (raise (condition (&profile-not-found-error
                                 (profile profile)))))
             ((string-null? pattern)
              (list-generation display-profile-content
                               (car (profile-generations profile)))
              (diff-profiles profile (profile-generations profile)))
             ((matching-generations pattern profile)
              =>
              (lambda (numbers)
                (if (null-list? numbers)
                    (exit 1)
                    (leave-on-EPIPE
                     (list-generation display-profile-content (car numbers))
                     (diff-profiles profile numbers)))))
             (else
              (leave (G_ "invalid syntax: ~a~%")
                     pattern)))

       (leave-on-EPIPE
        (cond ((not (file-exists? profile))       ; XXX: race condition
               (raise (condition (&profile-not-found-error
                                  (profile profile)))))
              ((string-null? pattern)
               (list-generation display-profile-content
                                (car (profile-generations profile)))
               (diff-profiles profile (profile-generations profile)))
              ((matching-generations pattern profile)
               =>
               (lambda (numbers)
                 (if (null-list? numbers)
                     (exit 1)
                     (begin
                       (list-generation display-profile-content (car numbers))
                       (diff-profiles profile numbers)))))
              (else
               (leave (G_ "invalid syntax: ~a~%")
                      pattern))))
       #t)

      (('list-installed regexp)