diff --git a/bb.edn b/bb.edn index 3bea2155f3..03118dc0a9 100644 --- a/bb.edn +++ b/bb.edn @@ -70,7 +70,7 @@ dev:cli {:doc "Run CLI with current deps/db code. Commands with JS deps are not usable e.g. mcp-server" :task (apply shell {:dir "deps/db"} - "yarn nbb-logseq -cp src:../cli/src:../graph-parser/src:../outliner/src -m logseq.cli" *command-line-args*)} + "yarn -s nbb-logseq -cp src:../cli/src:../graph-parser/src:../outliner/src -m logseq.cli" *command-line-args*)} dev:query {:doc "Query a DB graph's datascript db" :requires ([babashka.fs :as fs]) diff --git a/deps/cli/src/logseq/cli/common/graph.cljs b/deps/cli/src/logseq/cli/common/graph.cljs index d8f636cf09..4a310199f5 100644 --- a/deps/cli/src/logseq/cli/common/graph.cljs +++ b/deps/cli/src/logseq/cli/common/graph.cljs @@ -1,8 +1,6 @@ (ns ^:node-only logseq.cli.common.graph "Graph related fns shared between CLI and electron" (:require ["fs-extra" :as fs-extra] - ["os" :as os] - ["path" :as node-path] [clojure.string :as string] [logseq.common.config :as common-config] [logseq.common.graph :as common-graph])) @@ -17,7 +15,7 @@ (defn get-db-graphs-dir "Directory where DB graphs are stored" [] - (node-path/join (os/homedir) "logseq" "graphs")) + (common-graph/expand-home (common-graph/get-default-graphs-dir))) (defn get-db-based-graphs [] diff --git a/deps/common/src/logseq/common/config.cljs b/deps/common/src/logseq/common/config.cljs index da4fe27bd6..126cd38499 100644 --- a/deps/common/src/logseq/common/config.cljs +++ b/deps/common/src/logseq/common/config.cljs @@ -52,6 +52,7 @@ name'))] (str db-version-prefix stripped)))) +(defonce default-graphs-dir "~/logseq/graphs") (defonce local-assets-dir "assets") (defonce unlinked-graphs-dir "Unlinked graphs") diff --git a/deps/common/src/logseq/common/graph.cljs b/deps/common/src/logseq/common/graph.cljs index b255ac3b59..487e99a4c2 100644 --- a/deps/common/src/logseq/common/graph.cljs +++ b/deps/common/src/logseq/common/graph.cljs @@ -1,8 +1,10 @@ (ns ^:node-only logseq.common.graph "This ns provides common fns for a graph directory and only runs in a node environment" (:require ["fs" :as fs] + ["os" :as os] ["path" :as node-path] [clojure.string :as string] + [logseq.common.config :as common-config] [logseq.common.path :as path])) (def ^:private win32? @@ -97,3 +99,14 @@ Rules: (->> (readdir graph-dir) (remove (partial ignored-path? graph-dir)) (filter #(contains? allowed-formats (get-ext %))))) + +(defn get-default-graphs-dir + [] + common-config/default-graphs-dir) + +(defn expand-home + "Expands path if it starts with '~'" + [path] + (if (and (seq path) (string/starts-with? path "~")) + (node-path/join (os/homedir) (subs path 1)) + path)) diff --git a/deps/db/src/logseq/db/common/sqlite_cli.cljs b/deps/db/src/logseq/db/common/sqlite_cli.cljs index 776d5431fe..44fbf5b6c2 100644 --- a/deps/db/src/logseq/db/common/sqlite_cli.cljs +++ b/deps/db/src/logseq/db/common/sqlite_cli.cljs @@ -1,11 +1,11 @@ (ns ^:node-only logseq.db.common.sqlite-cli "Primary ns to interact with DB files with node.js based CLIs" (:require ["better-sqlite3" :as sqlite3] - ["os" :as os] ["path" :as node-path] [cljs-bean.core :as bean] [clojure.string :as string] [datascript.storage :refer [IStorage]] + [logseq.common.graph :as common-graph] [logseq.db.common.sqlite :as common-sqlite] [logseq.db.frontend.schema :as db-schema] [logseq.db.sqlite.util :as sqlite-util])) @@ -100,5 +100,4 @@ ;; $ORIGINAL_PWD used by bb tasks to correct current dir (node-path/join (or js/process.env.ORIGINAL_PWD ".") %))] ((juxt node-path/dirname node-path/basename) (resolve-path' graph-dir-or-path))) - ;; TODO: Reuse with get-db-graphs-dir when there is a db ns that is usable by electron i.e. no better-sqlite3 - [(node-path/join (os/homedir) "logseq" "graphs") graph-dir-or-path]))) + [(common-graph/expand-home (common-graph/get-default-graphs-dir)) graph-dir-or-path]))) diff --git a/src/main/frontend/worker/db_worker_node.cljs b/src/main/frontend/worker/db_worker_node.cljs index 47add71381..6c5b789cbe 100644 --- a/src/main/frontend/worker/db_worker_node.cljs +++ b/src/main/frontend/worker/db_worker_node.cljs @@ -10,6 +10,7 @@ [frontend.worker.state :as worker-state] [lambdaisland.glogi :as log] [logseq.cli.style :as style] + [logseq.common.config :as common-config] [logseq.cli.data-dir :as data-dir] [logseq.db :as ldb] [promesa.core :as p])) @@ -282,7 +283,7 @@ (defn- show-help! [] (println (str (style/bold "db-worker-node") " " (style/bold "options") ":")) - (println (str " " (style/bold "--data-dir") " (default ~/logseq/graphs)")) + (println (str " " (style/bold "--data-dir") " (default " common-config/default-graphs-dir ")")) (println (str " " (style/bold "--repo") " (required)")) (println (str " " (style/bold "--create-empty-db") " (start with empty initial datoms)")) (println (str " " (style/bold "--log-level") " (default info)")) diff --git a/src/main/frontend/worker/db_worker_node_lock.cljs b/src/main/frontend/worker/db_worker_node_lock.cljs index cf68a4f7e7..613c19f7de 100644 --- a/src/main/frontend/worker/db_worker_node_lock.cljs +++ b/src/main/frontend/worker/db_worker_node_lock.cljs @@ -4,10 +4,11 @@ ["os" :as os] ["path" :as node-path] [clojure.string :as string] - [frontend.worker.graph-dir :as graph-dir] [frontend.worker-common.util :as worker-util] + [frontend.worker.graph-dir :as graph-dir] [lambdaisland.glogi :as log] [logseq.common.config :as common-config] + [logseq.common.graph :as common-graph] [promesa.core :as p])) (defn- expand-home @@ -18,7 +19,7 @@ (defn resolve-data-dir [data-dir] - (expand-home (or data-dir "~/logseq/graphs"))) + (expand-home (or data-dir common-graph/get-default-graphs-dir))) (defn repo->graph-dir-key [repo] diff --git a/src/main/frontend/worker/platform/node.cljs b/src/main/frontend/worker/platform/node.cljs index 285f77b5f8..31159c5040 100644 --- a/src/main/frontend/worker/platform/node.cljs +++ b/src/main/frontend/worker/platform/node.cljs @@ -11,6 +11,7 @@ [goog.object :as gobj] [lambdaisland.glogi :as log] [logseq.common.config :as common-config] + [logseq.common.graph :as common-graph] [promesa.core :as p])) (defn- resolve-database-sync-ctor @@ -299,7 +300,7 @@ (defn node-platform [{:keys [data-dir event-fn write-guard-fn owner-source]}] - (let [data-dir (expand-home (or data-dir "~/logseq/graphs")) + (let [data-dir (expand-home (or data-dir (common-graph/get-default-graphs-dir))) owner-source (db-lock/normalize-owner-source owner-source) kv (kv-store data-dir)] (p/do! diff --git a/src/main/logseq/cli/command/core.cljs b/src/main/logseq/cli/command/core.cljs index c0134a6807..520c3a70b3 100644 --- a/src/main/logseq/cli/command/core.cljs +++ b/src/main/logseq/cli/command/core.cljs @@ -15,7 +15,7 @@ :alias :c} :graph {:desc "Graph name" :alias :g} - :data-dir {:desc "Path to db-worker data dir (default ~/logseq/graphs)"} + :data-dir {:desc (str "Path to db-worker data dir (default " common-config/default-graphs-dir ")")} :timeout-ms {:desc "Request timeout in ms (default 10000)" :coerce :long} :output {:desc "Output format (human, json, edn). Default: human" diff --git a/src/main/logseq/cli/config.cljs b/src/main/logseq/cli/config.cljs index 4874c7d6c6..97865d5fb3 100644 --- a/src/main/logseq/cli/config.cljs +++ b/src/main/logseq/cli/config.cljs @@ -5,7 +5,8 @@ [goog.object :as gobj] ["fs" :as fs] ["os" :as os] - ["path" :as node-path])) + ["path" :as node-path] + [logseq.common.graph :as common-graph])) (defn- parse-int [value] @@ -98,7 +99,7 @@ :login-timeout-ms 300000 :logout-timeout-ms 120000 :output-format nil - :data-dir "~/logseq/graphs" + :data-dir (common-graph/get-default-graphs-dir) :config-path (default-config-path)} env (env-config) config-path (or (:config-path opts) diff --git a/src/main/logseq/cli/data_dir.cljs b/src/main/logseq/cli/data_dir.cljs index ccaaf0f385..96aa22fb69 100644 --- a/src/main/logseq/cli/data_dir.cljs +++ b/src/main/logseq/cli/data_dir.cljs @@ -1,21 +1,12 @@ (ns logseq.cli.data-dir "Data-dir validation and normalization for the CLI and db-worker-node." (:require ["fs" :as fs] - ["os" :as os] ["path" :as node-path] - [clojure.string :as string])) - -(def ^:private default-data-dir "~/logseq/graphs") - -(defn- expand-home - [path] - (if (and (seq path) (string/starts-with? path "~")) - (node-path/join (.homedir os) (subs path 1)) - path)) + [logseq.common.graph :as common-graph])) (defn normalize-data-dir [path] - (node-path/resolve (expand-home (or path default-data-dir)))) + (node-path/resolve (common-graph/expand-home (or path (common-graph/get-default-graphs-dir))))) (defn ensure-data-dir! [path] diff --git a/src/main/logseq/cli/server.cljs b/src/main/logseq/cli/server.cljs index f5fb089003..3eedc50ba8 100644 --- a/src/main/logseq/cli/server.cljs +++ b/src/main/logseq/cli/server.cljs @@ -1,24 +1,18 @@ (ns logseq.cli.server "db-worker-node lifecycle orchestration for logseq." (:require ["fs" :as fs] - ["os" :as os] ["path" :as node-path] [clojure.string :as string] [frontend.worker.db-worker-node-lock :as db-lock] - [logseq.common.config :as common-config] - [logseq.db-worker.daemon :as daemon] [lambdaisland.glogi :as log] + [logseq.common.config :as common-config] + [logseq.common.graph :as common-graph] + [logseq.db-worker.daemon :as daemon] [promesa.core :as p])) -(defn- expand-home - [path] - (if (string/starts-with? path "~") - (node-path/join (.homedir os) (subs path 1)) - path)) - (defn resolve-data-dir [config] - (expand-home (or (:data-dir config) "~/logseq/graphs"))) + (common-graph/expand-home (or (:data-dir config) (common-graph/get-default-graphs-dir)))) (defn- repo-dir [data-dir repo]