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.
This commit is contained in:
Ludovic Courtès 2015-10-26 21:16:20 +01:00
parent d50cb56d9b
commit ad18c7e64c
2 changed files with 30 additions and 19 deletions

View File

@ -789,25 +789,8 @@ more information.~%"))
(('list-generations pattern) (('list-generations pattern)
(define (list-generation number) (define (list-generation number)
(unless (zero? number) (unless (zero? number)
(let ((header (format #f (_ "Generation ~a\t~a") number (display-generation profile number)
(date->string (display-profile-content profile number)
(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)))))
(newline))) (newline)))
(cond ((not (file-exists? profile)) ; XXX: race condition (cond ((not (file-exists? profile)) ; XXX: race condition

View File

@ -85,6 +85,8 @@
string->generations string->generations
string->duration string->duration
matching-generations matching-generations
display-generation
display-profile-content
run-guix-command run-guix-command
run-guix run-guix
program-name program-name
@ -1015,6 +1017,32 @@ DURATION-RELATION with the current time."
filter-by-duration) filter-by-duration)
(else #f))) (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 (define* (package-specification->name+version+output spec
#:optional (output "out")) #:optional (output "out"))
"Parse package specification SPEC and return three value: the specified "Parse package specification SPEC and return three value: the specified