changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > infra / annotate scripts/org-graph-db-init.lisp

changeset 360: 7e7981b3af10
parent: 9fc8fc324c10
child: 43afcbbe2d07
author: Richard Westhaver <ellis@rwest.io>
date: Sun, 25 Aug 2024 20:35:51 -0400
permissions: -rw-r--r--
description: org-graph-db updates
359
9fc8fc324c10 add org-graph-db-init script
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
1
 ;;; org-graph-db-init.lisp --- Initialize the org-graph-db-directory
9fc8fc324c10 add org-graph-db-init script
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
2
 
9fc8fc324c10 add org-graph-db-init script
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
3
 ;; 
9fc8fc324c10 add org-graph-db-init script
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
4
 
9fc8fc324c10 add org-graph-db-init script
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
5
 ;;; Code:
9fc8fc324c10 add org-graph-db-init script
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
6
 #-user (ql:quickload :user)
9fc8fc324c10 add org-graph-db-init script
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
7
 (in-package :user)
360
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
8
 (unless (find-package :org-graph-db)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
9
   (defpkg :org-graph-db
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
10
     (:use :cl :std :rdb
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
11
      :obj/db :obj/query :obj/id :obj/uuid)))
359
9fc8fc324c10 add org-graph-db-init script
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
12
 
360
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
13
 (in-package :org-graph-db)
359
9fc8fc324c10 add org-graph-db-init script
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
14
 
9fc8fc324c10 add org-graph-db-init script
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
15
 (rocksdb:load-rocksdb)
9fc8fc324c10 add org-graph-db-init script
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
16
 
360
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
17
 (defun make-org-graph-schema ()
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
18
   (make-schema
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
19
    (make-field :name "file" :type 'string)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
20
    (make-field :name "title" :type 'string)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
21
    (make-field :name "hash" :type 'octet-vector)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
22
    (make-field :name "atime" :type 'octet-vector)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
23
    (make-field :name "mtime" :type 'octet-vector)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
24
    (make-field :name "node" :type 'octet-vector)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
25
    (make-field :name "edge" :type 'octet-vector)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
26
    (make-field :name "node-tags" :type 'string)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
27
    (make-field :name "node-links" :type 'string)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
28
    (make-field :name "node-properties" :type 'string)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
29
    (make-field :name "node-priority" :type 'string)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
30
    (make-field :name "node-schedule" :type 'string)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
31
    (make-field :name "node-file" :type 'string)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
32
    (make-field :name "node-pos" :type 'octet-vector)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
33
    (make-field :name "node-state" :type 'string)))
359
9fc8fc324c10 add org-graph-db-init script
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
34
 
360
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
35
 (defparameter *org-graph-schema* (make-org-graph-schema))
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
36
 
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
37
 (defvar *org-graph-db* nil)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
38
 
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
39
 (defparameter *org-graph-db-directory*
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
40
   (or (probe-file (car (cli:args)))
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
41
       (merge-pathnames ".stash/org/graph/db/" (user-homedir-pathname))))
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
42
 
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
43
 (defun make-org-graph-db ()
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
44
   (create-db (namestring *org-graph-db-directory*)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
45
              :opts (default-rdb-opts)))
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
46
 
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
47
 (define-condition org-id-locations-out-of-sync (simple-error) ())
359
9fc8fc324c10 add org-graph-db-init script
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
48
 
360
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
49
 (defvar *emacs-org-id-locations-file* (merge-pathnames ".emacs.d/.org-id-locations" (user-homedir-pathname)))
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
50
 
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
51
 (defun make-org-id-locations (&optional (file *emacs-org-id-locations-file*))
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
52
   (let ((tbl (make-hash-table :test 'equal)))
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
53
     (with-open-file (file file)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
54
       (dolist (entry (read file))
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
55
         (if-let ((file (probe-file (car entry))))
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
56
           (setf (gethash (namestring file) tbl) (cdr entry))
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
57
           (signal 'org-id-locations-out-of-sync :format-control "~A" :format-arguments (list entry)))))
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
58
     tbl))
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
59
 
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
60
 (defvar *org-graph-id-locations* (make-org-id-locations))
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
61
 
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
62
 (defun insert-org-files ()
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
63
   (log:info! "inserting org files")
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
64
   (open-cf *org-graph-db* "file")
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
65
   (maphash (lambda (k v) (insert-key *org-graph-db* k
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
66
                                      (apply 'concatenate 'string v)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
67
                                      :cf "file"))
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
68
            *org-graph-id-locations*)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
69
   (flush-db *org-graph-db*))
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
70
 
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
71
 (defun insert-org-nodes ()
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
72
   (log:info! "inserting org nodes")
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
73
   (open-cf *org-graph-db* "node")
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
74
   (dolist (v (hash-table-values *org-graph-id-locations*))
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
75
     (dolist (id v)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
76
       (insert-key *org-graph-db* id "0" :cf "node"))))
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
77
 
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
78
 (defun close-org-graph-db ()
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
79
   (when (db-open-p *org-graph-db*)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
80
     (close-db *org-graph-db*)))        
359
9fc8fc324c10 add org-graph-db-init script
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
81
 
9fc8fc324c10 add org-graph-db-init script
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
82
 (defun init-org-graph-db ()
360
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
83
   (ensure-directories-exist (make-pathname :directory (butlast (pathname-directory *org-graph-db-directory*))) :verbose t)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
84
   (with-db (db (load-schema (make-org-graph-db) *org-graph-schema*))
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
85
     (open-db db)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
86
     (open-cfs db)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
87
     (setq *org-graph-db* db)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
88
     ;; (open-cfs db)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
89
     (insert-org-files)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
90
     (insert-org-nodes)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
91
     (log:info! "created org-graph-db" db *org-graph-db-directory* *org-graph-schema*)))
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
92
 
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
93
 (defun open-org-graph-db ()
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
94
   (unless (probe-file *org-graph-db-directory*)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
95
     (init-org-graph-db))
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
96
   (if (db-open-p *org-graph-db*)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
97
       *org-graph-db*
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
98
       (open-db (or *org-graph-db* (make-org-graph-db)))))
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
99
 
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
100
 (defun destroy-org-graph-db (&optional force)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
101
   (when (probe-file *org-graph-db-directory*)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
102
     (unwind-protect
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
103
          (with-db (db (or *org-graph-db* (make-org-graph-db)))
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
104
            (shutdown-db db)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
105
            (destroy-db db)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
106
            (log:info! "destroyed org-graph-db" db *org-graph-db-directory*))
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
107
       (when force
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
108
         (sb-ext:delete-directory *org-graph-db-directory* :recursive t)
7e7981b3af10 org-graph-db updates
Richard Westhaver <ellis@rwest.io>
parents: 359
diff changeset
109
         (setq *org-graph-db* nil)))))