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:
parent
d50cb56d9b
commit
ad18c7e64c
|
@ -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
|
||||||
|
|
28
guix/ui.scm
28
guix/ui.scm
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue