ENH store links between updates

This commit is contained in:
Nathan Dwarshuis 2022-03-30 18:55:24 -04:00
parent fc92c32530
commit c6786fb293
1 changed files with 12 additions and 31 deletions

View File

@ -183,13 +183,10 @@
;; variables to store state ;; variables to store state
(defun org-x-dag-create (d m fis il if s c fs) (defun org-x-dag-create (d fis fls c fs)
(list :dag d (list :dag d
:id->meta m
:id->status s
:file->ids fis :file->ids fis
:illegal-local il :file->links fls
:illegal-foreign if
:current-date c :current-date c
:files fs)) :files fs))
@ -223,9 +220,6 @@
(defun org-x-dag-empty () (defun org-x-dag-empty ()
(org-x-dag-create (dag-empty) (org-x-dag-create (dag-empty)
(ht-create #'equal)
(ht-create #'equal)
(ht-create #'equal)
(ht-create #'equal) (ht-create #'equal)
(ht-create #'equal) (ht-create #'equal)
(org-x-dag-current-date) (org-x-dag-current-date)
@ -2265,8 +2259,9 @@ used for optimization."
:quarterly q :quarterly q
:weekly w :weekly w
:daily d) :daily d)
(--reduce-from (-let (((key . link) it)) (--reduce-from (-let* (((group . links) it)
(org-x-dag-plist-cons acc key link)) (acc-links (plist-get acc group)))
(plist-put acc group (append acc-links links)))
nil nil
links))) links)))
;; add all links to the network status object (ew side effects) ;; add all links to the network status object (ew side effects)
@ -2350,10 +2345,10 @@ removed from, added to, or edited within the DAG respectively."
(-let* (((&plist :path :group) filedata) (-let* (((&plist :path :group) filedata)
((acc-ids acc-filemaps acc-links) acc) ((acc-ids acc-filemaps acc-links) acc)
((ids links) (org-x-dag-get-file-nodes path group)) ((ids links) (org-x-dag-get-file-nodes path group))
(filemap (cons path (--map (plist-get :id it) ids)))) (filemap (cons path (--map (plist-get it :id) ids))))
`((,@ids ,@acc-ids) `((,@ids ,@acc-ids)
(,filemap ,@acc-filemaps) (,filemap ,@acc-filemaps)
(,@(--map (cons group it) links) ,@acc-links))))) ((,path ,group ,@links) ,@acc-links)))))
(-reduce-from #'append-results nil files))) (-reduce-from #'append-results nil files)))
;; TODO what about all the nodes that don't need to be updated? ;; TODO what about all the nodes that don't need to be updated?
@ -2450,34 +2445,20 @@ removed from, added to, or edited within the DAG respectively."
TO-REMOVE, TO-INSERT, and TO-UPDATE are lists of files to remove TO-REMOVE, TO-INSERT, and TO-UPDATE are lists of files to remove
from, add to, and update with the DAG. FILE-STATE is a nested from, add to, and update with the DAG. FILE-STATE is a nested
plist holding the files to be used in the DAG." plist holding the files to be used in the DAG."
(-let* (((&plist :id->meta (-let* (((&plist :file->links) org-x-dag)
:file->ids
:illegal-foreign if
:illegal-local il
:id->status)
org-x-dag)
(files2rem (append to-update to-remove)) (files2rem (append to-update to-remove))
(files2ins (append to-update to-insert)) (files2ins (append to-update to-insert))
(ids2rem (org-x-dag-files->ids files2rem)) (ids2rem (org-x-dag-files->ids files2rem))
((ids2ins fms2ins links2ins) (org-x-dag-read-files files2ins))) ((ids2ins fms2ins links2ins) (org-x-dag-read-files files2ins)))
;; (org-x-dag-update-ht ids2rem meta2ins id->meta)
;; (org-x-dag-update-ht files2rem fms2ins file->ids) ;; (org-x-dag-update-ht files2rem fms2ins file->ids)
(org-x-dag-update-ht files2rem links2ins file->links)
(org-x-dag-update-dag ids2ins ids2rem) (org-x-dag-update-dag ids2ins ids2rem)
(plist-put org-x-dag :files file-state) (plist-put org-x-dag :files file-state)
;; TODO not sure where to put this
(let ((adjlist (dag-get-adjacency-list (plist-get org-x-dag :dag)))) (let ((adjlist (dag-get-adjacency-list (plist-get org-x-dag :dag))))
(->> (org-x-dag-get-network-status adjlist links2ins) (->> (plist-get org-x-dag :file->links)
(ht-values)
(org-x-dag-get-network-status adjlist)
(plist-put org-x-dag :netstat))))) (plist-put org-x-dag :netstat)))))
;; update illegal links after updating the adjlist, since we need that to
;; figure out which links are illegal
;; (-let (((illegal-foreign illegal-local) (org-x-dag-filter-links links2ins)))
;; (org-x-dag-update-ht files2rem illegal-foreign if)
;; (org-x-dag-update-ht files2rem illegal-local il))
;; update node-level status after figuring out which are invalid via links
;; (let ((status2ins (->> (-map #'car ids2ins)
;; (--map (cons it (org-x-dag-id->0th-status it))))))
;; (org-x-dag-update-ht ids2rem status2ins id->status))))
(defun org-x-dag-sync (&optional force) (defun org-x-dag-sync (&optional force)
"Sync the DAG with files from `org-x-dag-get-files'. "Sync the DAG with files from `org-x-dag-get-files'.