From bd436d436936c72996d4dc051ace39dd04316940 Mon Sep 17 00:00:00 2001 From: Alexis Sellier Date: Wed, 15 Mar 2023 12:12:16 +0100 Subject: [PATCH] cli: Open tracking DB in read-only mode --- radicle-cli/src/commands/node.rs | 2 +- radicle/src/node/tracking/store.rs | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/radicle-cli/src/commands/node.rs b/radicle-cli/src/commands/node.rs index 8d8cda0f..48cd1718 100644 --- a/radicle-cli/src/commands/node.rs +++ b/radicle-cli/src/commands/node.rs @@ -153,7 +153,7 @@ pub fn run(options: Options, ctx: impl term::Context) -> anyhow::Result<()> { control::stop(node)?; } Operation::Tracking { mode } => { - let store = radicle::node::tracking::store::Config::open( + let store = radicle::node::tracking::store::Config::reader( profile.home.node().join(TRACKING_DB_FILE), )?; tracking::run(&store, mode)? diff --git a/radicle/src/node/tracking/store.rs b/radicle/src/node/tracking/store.rs index e5d25bfa..18a45088 100644 --- a/radicle/src/node/tracking/store.rs +++ b/radicle/src/node/tracking/store.rs @@ -42,6 +42,15 @@ impl Config { Ok(Self { db }) } + /// Same as [`Self::open`], but in read-only mode. This is useful to have multiple + /// open databases, as no locking is required. + pub fn reader>(path: P) -> Result { + let db = sql::Connection::open_with_flags(path, sqlite::OpenFlags::new().set_read_only())?; + db.execute(Self::SCHEMA)?; + + Ok(Self { db }) + } + /// Create a new in-memory address book. pub fn memory() -> Result { let db = sql::Connection::open(":memory:")?;