Commit 59359128 authored by Eric Timmons's avatar Eric Timmons
Browse files

Improve time needed to grovel deps with complicated :defsystem-depends-on

Prior to this change if a system being groveled had non trivial defsystem
dependencies it would result in many more groveler processes being spawned than
truly needed. This resulted in unacceptably long grovel times.

This change tries to make sure that child search nodes inherit the list of
groveler loaded asds correctly.
parent a34ab83d
Pipeline #4524 failed with stages
in 28 minutes and 3 seconds
......@@ -20,6 +20,7 @@
#:node-find-project-if-active
#:node-find-system-if-active
#:node-groveler
#:node-groveler-loaded-asds
#:node-load-asd-in-groveler!
#:node-register-asd-loaded-in-groveler!
#:node-system-files-pending-groveling
......@@ -89,6 +90,7 @@
(unresolved-reqs nil unresolved-reqs-p)
(unresolved-grovel-reqs nil unresolved-grovel-reqs-p)
(system-files-pending-groveling nil system-files-pending-groveling-p)
(groveler-loaded-asds nil groveler-loaded-asds-p)
(groveler (node-groveler node)))
"Given a search node, return a shallow copy of it."
(make-instance 'node
......@@ -104,7 +106,9 @@
(if system-files-pending-groveling-p
system-files-pending-groveling
(node-system-files-pending-groveling node)))
:groveler-loaded-asds (node-groveler-loaded-asds node)
:groveler-loaded-asds (if groveler-loaded-asds-p
(copy-list groveler-loaded-asds)
(node-groveler-loaded-asds node))
:groveler groveler))
(defun collapse-system-files-needing-groveling (left right)
......
......@@ -53,7 +53,13 @@
;; it'd be provided by another system file on our list of files to
;; grovel, reorder the list so that it's first. Otherwise, add the
;; requirement to the unresolved grovel-reqs list.
(let ((new-search-node (copy-node parent-node)))
;;
;; When we copy the parent node, we inherit the GROVELER-LOADED-ASDS
;; list from the node we've been working in (NOMINAL-NODE). This is so
;; that we don't have to immediately spawn a new groveler due to
;; mismatching ASDs.
(let ((new-search-node (copy-node parent-node
:groveler-loaded-asds (node-groveler-loaded-asds nominal-node))))
(log:trace "When groveling, found ~A is unsatisfied" missing-req)
(if-let ((candidate-file
(and (typep missing-req 'system-requirement)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment