~ruther/guix-local

ad18c7e64c844350f295a2f79605800a7718ed78 — Ludovic Courtès 10 years ago d50cb56
ui: Add procedures to display a profile generation.

* guix/scripts/package.scm (guix-package)[process-query](list-generations):
  Move part of the body to 'delete-generation' and
  'display-profile-content'.
* guix/ui.scm (display-generation, display-profile-content): New
  procedures.
2 files changed, 30 insertions(+), 19 deletions(-)

M guix/scripts/package.scm
M guix/ui.scm
M guix/scripts/package.scm => guix/scripts/package.scm +2 -19
@@ 789,25 789,8 @@ more information.~%"))
        (('list-generations pattern)
         (define (list-generation number)
           (unless (zero? number)
             (let ((header (format #f (_ "Generation ~a\t~a") number
                                   (date->string
                                    (time-utc->date
                                     (generation-time profile number))
                                    "~b ~d ~Y ~T")))
                   (current (generation-number profile)))
               (if (= number current)
                   (format #t (_ "~a\t(current)~%") header)
                   (format #t "~a~%" header)))
             (for-each (match-lambda
                        (($ <manifest-entry> name version output location _)
                         (format #t "  ~a\t~a\t~a\t~a~%"
                                 name version output location)))

                       ;; Show most recently installed packages last.
                       (reverse
                        (manifest-entries
                         (profile-manifest
                          (generation-file-name profile number)))))
             (display-generation profile number)
             (display-profile-content profile number)
             (newline)))

         (cond ((not (file-exists? profile)) ; XXX: race condition

M guix/ui.scm => guix/ui.scm +28 -0
@@ 85,6 85,8 @@
            string->generations
            string->duration
            matching-generations
            display-generation
            display-profile-content
            run-guix-command
            run-guix
            program-name


@@ 1015,6 1017,32 @@ DURATION-RELATION with the current time."
         filter-by-duration)
        (else #f)))

(define (display-generation profile number)
  "Display a one-line summary of generation NUMBER of PROFILE."
  (unless (zero? number)
    (let ((header (format #f (_ "Generation ~a\t~a") number
                          (date->string
                           (time-utc->date
                            (generation-time profile number))
                           "~b ~d ~Y ~T")))
          (current (generation-number profile)))
      (if (= number current)
          (format #t (_ "~a\t(current)~%") header)
          (format #t "~a~%" header)))))

(define (display-profile-content profile number)
  "Display the packages in PROFILE, generation NUMBER, in a human-readable
way."
  (for-each (match-lambda
              (($ <manifest-entry> name version output location _)
               (format #t "  ~a\t~a\t~a\t~a~%"
                       name version output location)))

            ;; Show most recently installed packages last.
            (reverse
             (manifest-entries
              (profile-manifest (generation-file-name profile number))))))

(define* (package-specification->name+version+output spec
                                                     #:optional (output "out"))
  "Parse package specification SPEC and return three value: the specified