mirror of
https://github.com/org-roam/org-roam
synced 2025-08-01 12:17:21 -05:00
(fix): fix rename file corrupting database (#1308)
The rename file advice is passed relative file names: e.g. "foo.org" -> "bar.org". This was not accounted for, and paths in the Org-roam database are supposed to be absolute paths. This caused the storing of relative paths in the Org-roam database, which were then never purged. Fixes #1304
This commit is contained in:
@ -8,6 +8,7 @@
|
||||
|
||||
### Fixed
|
||||
- [#1281](https://github.com/org-roam/org-roam/pull/1281) fixed idle-timer not instantiated on `org-roam-mode`
|
||||
- [#1308](https://github.com/org-roam/org-roam/pull/1308) fixed file renames corrupting database
|
||||
|
||||
## 1.2.3 (13-11-2020)
|
||||
|
||||
|
@ -255,15 +255,14 @@ This function is called on `org-roam-db-file-update-timer'."
|
||||
(dolist (table (mapcar #'car org-roam-db--table-schemata))
|
||||
(org-roam-db-query `[:delete :from ,table]))))
|
||||
|
||||
(defun org-roam-db--clear-file (&optional filepath)
|
||||
"Remove any related links to the file at FILEPATH.
|
||||
(defun org-roam-db--clear-file (&optional file)
|
||||
"Remove any related links to the FILE.
|
||||
This is equivalent to removing the node from the graph."
|
||||
(let ((file (expand-file-name (or filepath
|
||||
(buffer-file-name (buffer-base-buffer))))))
|
||||
(setq file (or file (buffer-file-name (buffer-base-buffer))))
|
||||
(dolist (table (mapcar #'car org-roam-db--table-schemata))
|
||||
(org-roam-db-query `[:delete :from ,table
|
||||
:where (= ,(if (eq table 'links) 'source 'file) $s1)]
|
||||
file))))
|
||||
file)))
|
||||
|
||||
;;;;; Inserting
|
||||
(defun org-roam-db--insert-meta (&optional update-p)
|
||||
|
14
org-roam.el
14
org-roam.el
@ -1412,19 +1412,23 @@ To be added to `org-roam-title-change-hook'."
|
||||
When NEW-FILE-OR-DIR is a directory, we use it to compute the new file path."
|
||||
(let ((new-file (if (directory-name-p new-file-or-dir)
|
||||
(expand-file-name (file-name-nondirectory old-file) new-file-or-dir)
|
||||
new-file-or-dir)))
|
||||
new-file-or-dir))
|
||||
files-affected
|
||||
new-buffer)
|
||||
(setq new-file (expand-file-name new-file))
|
||||
(setq old-file (expand-file-name old-file))
|
||||
(when (and (not (auto-save-file-name-p old-file))
|
||||
(not (auto-save-file-name-p new-file))
|
||||
(not (backup-file-name-p old-file))
|
||||
(not (backup-file-name-p new-file))
|
||||
(org-roam--org-roam-file-p old-file))
|
||||
(org-roam-db--ensure-built)
|
||||
(let* ((new-buffer (or (find-buffer-visiting new-file)
|
||||
(setq new-buffer (or (find-buffer-visiting new-file)
|
||||
(find-file-noselect new-file)))
|
||||
(files-affected (org-roam-db-query [:select :distinct [source]
|
||||
(setq files-affected (org-roam-db-query [:select :distinct [source]
|
||||
:from links
|
||||
:where (= dest $s1)]
|
||||
old-file)))
|
||||
old-file))
|
||||
;; Remove database entries for old-file.org
|
||||
(org-roam-db--clear-file old-file)
|
||||
;; Replace links from old-file.org -> new-file.org in all Org-roam files with these links
|
||||
@ -1446,7 +1450,7 @@ When NEW-FILE-OR-DIR is a directory, we use it to compute the new file path."
|
||||
(org-roam--fix-relative-links old-file)
|
||||
(save-buffer)))
|
||||
(when (org-roam--org-roam-file-p new-file)
|
||||
(org-roam-db--update-file new-file))))))
|
||||
(org-roam-db--update-file new-file)))))
|
||||
|
||||
(defun org-roam--id-new-advice (&rest _args)
|
||||
"Update the database if a new Org ID is created."
|
||||
|
Reference in New Issue
Block a user