(fix)db: fix org-roam-db-sync exiting early on unhandled errors (#1983)

When update-file fails, clear the file from the database and show an
error.
This commit is contained in:
Jethro Kuan
2021-11-23 23:47:00 +08:00
committed by GitHub
parent ae533fa309
commit c9efbe1dda
3 changed files with 29 additions and 12 deletions

View File

@ -5,6 +5,7 @@
(elisp-lint-indent-specs . ((describe . 1) (elisp-lint-indent-specs . ((describe . 1)
(it . 1) (it . 1)
(org-element-map . defun) (org-element-map . defun)
(org-roam-dolist-with-progress . 2)
(org-roam-with-temp-buffer . 1) (org-roam-with-temp-buffer . 1)
(org-with-point-at . 1) (org-with-point-at . 1)
(magit-insert-section . defun) (magit-insert-section . defun)

View File

@ -627,18 +627,17 @@ If FORCE, force a rebuild of the cache from scratch."
(push file modified-files))) (push file modified-files)))
(remhash file current-files)) (remhash file current-files))
(emacsql-with-transaction (org-roam-db) (emacsql-with-transaction (org-roam-db)
(if (fboundp 'dolist-with-progress-reporter) (org-roam-dolist-with-progress (file (hash-table-keys current-files))
(dolist-with-progress-reporter (file (hash-table-keys current-files)) "Clearing removed files..."
"Clearing removed files..." (org-roam-db-clear-file file))
(org-roam-db-clear-file file)) (org-roam-dolist-with-progress (file modified-files)
(dolist (file (hash-table-keys current-files)) "Processing modified files..."
(org-roam-db-clear-file file))) (condition-case err
(if (fboundp 'dolist-with-progress-reporter) (org-roam-db-update-file file 'no-require)
(dolist-with-progress-reporter (file modified-files) (error
"Processing modified files..." (org-roam-db-clear-file file)
(org-roam-db-update-file file 'no-require)) (lwarn 'org-roam :error "Failed to process %s with error %s, skipping..."
(dolist (file modified-files) file (error-message-string err))))))))
(org-roam-db-update-file file))))))
;;;###autoload ;;;###autoload
(define-minor-mode org-roam-db-autosync-mode (define-minor-mode org-roam-db-autosync-mode

View File

@ -70,6 +70,23 @@ FN must take two arguments: the key and the value."
plist-index (cdr plist-index))))) plist-index (cdr plist-index)))))
plist) plist)
(defmacro org-roam-dolist-with-progress (spec msg &rest body)
"Loop over a list and report progress in the echo area.
Like `dolist-with-progress-reporter', but falls back to `dolist'
if the function does not yet exist.
Evaluate BODY with VAR bound to each car from LIST, in turn.
Then evaluate RESULT to get return value, default nil.
MSG is a progress reporter object or a string. In the latter
case, use this string to create a progress reporter.
SPEC is a list, as per `dolist'."
(declare (indent 2))
(if (fboundp 'dolist-with-progress-reporter)
`(dolist-with-progress-reporter ,spec ,msg ,@body)
`(dolist ,spec ,@body)))
;;; File utilities ;;; File utilities
(defmacro org-roam-with-file (file keep-buf-p &rest body) (defmacro org-roam-with-file (file keep-buf-p &rest body)
"Execute BODY within FILE. "Execute BODY within FILE.