This field was only present for consumption by (guix ui) when reporting propagation chains that lead to profile collision errors, but it is only valid in general with respect to a single manifest. (guix ui) now derives parent information by itself with respect to an explicit manifest, so this field is no longer needed.
* guix/profiles.scm (manifest-entry-parent): remove field. (package->manifest-entry, sexp->manifest): do not populate it. (manifest->gexp): adjust match specifications to account for its absence. * guix/inferior.scm (inferior-package->manifest-entry): do not populate nonexistent parent field. --- guix/inferior.scm | 36 ++++++-------- guix/profiles.scm | 123 +++++++++++++++++++--------------------------- 2 files changed, 67 insertions(+), 92 deletions(-) diff --git a/guix/inferior.scm b/guix/inferior.scm index 5dfd30a6c8..4030640f6d 100644 --- a/guix/inferior.scm +++ b/guix/inferior.scm @@ -819,27 +819,23 @@ (define-syntax-rule (memoized package output exp) result)))) (let loop ((package package) - (output output) - (parent (delay #f))) + (output output)) (memoized package output - ;; For each dependency, keep a promise pointing to its "parent" entry. - (letrec* ((deps (map (match-lambda - ((label package) - (loop package "out" (delay entry))) - ((label package output) - (loop package output (delay entry)))) - (inferior-package-propagated-inputs package))) - (entry (manifest-entry - (name (inferior-package-name package)) - (version (inferior-package-version package)) - (output output) - (item package) - (dependencies (delete-duplicates deps)) - (search-paths - (inferior-package-transitive-native-search-paths package)) - (parent parent) - (properties properties)))) - entry)))) + (let ((deps (map (match-lambda + ((label package) + (loop package "out")) + ((label package output) + (loop package output))) + (inferior-package-propagated-inputs package)))) + (manifest-entry + (name (inferior-package-name package)) + (version (inferior-package-version package)) + (output output) + (item package) + (dependencies (delete-duplicates deps)) + (search-paths + (inferior-package-transitive-native-search-paths package)) + (properties properties)))))) ;;; diff --git a/guix/profiles.scm b/guix/profiles.scm index b812a6f7d9..0d22667362 100644 --- a/guix/profiles.scm +++ b/guix/profiles.scm @@ -90,7 +90,6 @@ (define-module (guix profiles) manifest-entry-item manifest-entry-dependencies manifest-entry-search-paths - manifest-entry-parent manifest-entry-properties lower-manifest-entry @@ -229,8 +228,6 @@ (define-record-type* <manifest-entry> manifest-entry (default '())) (search-paths manifest-entry-search-paths ; search-path-specification* (default '())) - (parent manifest-entry-parent ; promise (#f | <manifest-entry>) - (default (delay #f))) (properties manifest-entry-properties ; list of symbol/value pairs (default '()))) @@ -416,29 +413,23 @@ (define (default-properties package) (transformations `((transformations . ,transformations))))) (define* (package->manifest-entry package #:optional (output "out") - #:key (parent (delay #f)) (properties (default-properties package))) "Return a manifest entry for the OUTPUT of package PACKAGE." - ;; For each dependency, keep a promise pointing to its "parent" entry. - (letrec* ((deps (map (match-lambda - ((label package) - (package->manifest-entry package - #:parent (delay entry))) - ((label package output) - (package->manifest-entry package output - #:parent (delay entry)))) - (package-propagated-inputs package))) - (entry (manifest-entry - (name (package-name package)) - (version (package-version package)) - (output output) - (item package) - (dependencies (delete-duplicates deps)) - (search-paths - (package-transitive-native-search-paths package)) - (parent parent) - (properties properties)))) - entry)) + (let ((deps (map (match-lambda + ((label package) + (package->manifest-entry package)) + ((label package output) + (package->manifest-entry package output))) + (package-propagated-inputs package)))) + (manifest-entry + (name (package-name package)) + (version (package-version package)) + (output output) + (item package) + (dependencies (delete-duplicates deps)) + (search-paths + (package-transitive-native-search-paths package)) + (properties properties)))) (define* (package->development-manifest package #:optional @@ -534,7 +525,7 @@ (define (entry->gexp entry) (return (match entry (($ <manifest-entry> name version output (? string? path) - (_ ...) (search-paths ...) _ (properties ...)) + (_ ...) (search-paths ...) (properties ...)) #~(#$name #$version #$output #$path #$@(optional 'propagated-inputs deps) #$@(optional 'search-paths @@ -542,7 +533,7 @@ (define (entry->gexp entry) search-paths)) #$@(optional 'properties properties))) (($ <manifest-entry> name version output package - (_deps ...) (search-paths ...) _ (properties ...)) + (_deps ...) (search-paths ...) (properties ...)) #~(#$name #$version #$output (ungexp package (or output "out")) #$@(optional 'propagated-inputs deps) @@ -565,7 +556,7 @@ (define (entry->gexp entry) (define (sexp->manifest sexp) "Parse SEXP as a manifest." - (define (infer-dependency item parent) + (define (infer-dependency item) ;; Return a <manifest-entry> for ITEM. (let-values (((name version) (package-name->name+version @@ -573,31 +564,25 @@ (define (infer-dependency item parent) (manifest-entry (name name) (version version) - (item item) - (parent parent)))) + (item item)))) - (define* (sexp->manifest-entry/v3 sexp #:optional (parent (delay #f))) + (define* (sexp->manifest-entry/v3 sexp) ;; Read SEXP as a version 3 manifest entry. (match sexp ((name version output path ('propagated-inputs deps) ('search-paths search-paths) extra-stuff ...) - ;; For each of DEPS, keep a promise pointing to ENTRY. - (letrec* ((deps* (map (cut sexp->manifest-entry/v3 <> (delay entry)) - deps)) - (entry (manifest-entry - (name name) - (version version) - (output output) - (item path) - (dependencies deps*) - (search-paths (map sexp->search-path-specification - search-paths)) - (parent parent) - (properties (or (assoc-ref extra-stuff 'properties) - '()))))) - entry)))) + (manifest-entry + (name name) + (version version) + (output output) + (item path) + (dependencies (map sexp->manifest-entry/v3 deps)) + (search-paths (map sexp->search-path-specification + search-paths)) + (properties (or (assoc-ref extra-stuff 'properties) + '())))))) (define-syntax let-fields (syntax-rules () @@ -611,7 +596,7 @@ (define-syntax let-fields ((_ lst () body ...) (begin body ...)))) - (define* (sexp->manifest-entry sexp #:optional (parent (delay #f))) + (define* (sexp->manifest-entry sexp) (match sexp (('repeated name version path) ;; This entry is the same as another one encountered earlier; look it @@ -628,23 +613,20 @@ (define* (sexp->manifest-entry sexp #:optional (parent (delay #f))) ((name version output path fields ...) (let-fields fields (propagated-inputs search-paths properties) (mlet* %state-monad - ((entry -> #f) - (deps (mapm %state-monad - (cut sexp->manifest-entry <> (delay entry)) + ((deps (mapm %state-monad + sexp->manifest-entry propagated-inputs)) + (entry -> (manifest-entry + (name name) + (version version) + (output output) + (item path) + (dependencies deps) + (search-paths (map sexp->search-path-specification + search-paths)) + (properties properties))) (visited (current-state)) (key -> (list name version path))) - (set! entry ;XXX: emulate 'letrec*' - (manifest-entry - (name name) - (version version) - (output output) - (item path) - (dependencies deps) - (search-paths (map sexp->search-path-specification - search-paths)) - (parent parent) - (properties properties))) (mbegin %state-monad (set-current-state (vhash-cons key entry visited)) (return entry))))))) @@ -661,18 +643,15 @@ (define* (sexp->manifest-entry sexp #:optional (parent (delay #f))) ...))) (manifest (map (lambda (name version output path deps search-paths) - (letrec* ((deps* (map (cute infer-dependency <> (delay entry)) - deps)) - (entry (manifest-entry - (name name) - (version version) - (output output) - (item path) - (dependencies deps*) - (search-paths - (map sexp->search-path-specification - search-paths))))) - entry)) + (manifest-entry + (name name) + (version version) + (output output) + (item path) + (dependencies (map infer-dependency deps)) + (search-paths + (map sexp->search-path-specification + search-paths)))) name version output path deps search-paths))) ;; Version 3 represents DEPS as full-blown manifest entries. -- 2.39.1