upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/src/lib/client.rs
diff options
context:
space:
mode:
authorm0wer <m0wer@sgn.space>2026-03-29 16:45:52 +0200
committerDanConwayDev <DanConwayDev@protonmail.com>2026-03-30 16:29:23 +0000
commit820fd706a24be7a58554a27e411e120cfa28d9a6 (patch)
tree2b95e4f835122dabfcd1f72f637a12368a4c18f9 /src/lib/client.rs
parente3276e74bc45cb4fb8f158b8249bee3d12a0805f (diff)
feat: git worktree support
Git worktrees don't have a .git directory with a parent, so we need to look for the git dir via git2's Repository::discover() and then look for the cache database there. This allows the client to work correctly when run from a worktree, and also allows the cache database to be shared between the main repo and its worktrees (since they share the same git dir and thus the same cache path).
Diffstat (limited to 'src/lib/client.rs')
-rw-r--r--src/lib/client.rs14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/lib/client.rs b/src/lib/client.rs
index 01662cd..86e4097 100644
--- a/src/lib/client.rs
+++ b/src/lib/client.rs
@@ -1325,14 +1325,22 @@ fn pb_after_style(succeed: bool) -> indicatif::ProgressStyle {
1325} 1325}
1326 1326
1327async fn get_local_cache_database(git_repo_path: &Path) -> Result<NostrLMDB> { 1327async fn get_local_cache_database(git_repo_path: &Path) -> Result<NostrLMDB> {
1328 NostrLMDB::open(git_repo_path.join(".git/nostr-cache.lmdb")) 1328 let git_dir = git2::Repository::discover(git_repo_path)
1329 .context("failed to open or create nostr cache database at .git/nostr-cache.lmdb") 1329 .context("failed to discover git repository")?
1330 .commondir()
1331 .to_path_buf();
1332 NostrLMDB::open(git_dir.join("nostr-cache.lmdb"))
1333 .context("failed to open or create nostr cache database at <git-dir>/nostr-cache.lmdb")
1330} 1334}
1331 1335
1332async fn get_global_cache_database(git_repo_path: Option<&Path>) -> Result<NostrLMDB> { 1336async fn get_global_cache_database(git_repo_path: Option<&Path>) -> Result<NostrLMDB> {
1333 let path = if std::env::var("NGITTEST").is_ok() { 1337 let path = if std::env::var("NGITTEST").is_ok() {
1334 if let Some(git_repo_path) = git_repo_path { 1338 if let Some(git_repo_path) = git_repo_path {
1335 git_repo_path.join(".git/test-global-cache.lmdb") 1339 let git_dir = git2::Repository::discover(git_repo_path)
1340 .context("failed to discover git repository")?
1341 .commondir()
1342 .to_path_buf();
1343 git_dir.join("test-global-cache.lmdb")
1336 } else { 1344 } else {
1337 bail!("git_repo must be supplied to get_global_cache_database during integration tests") 1345 bail!("git_repo must be supplied to get_global_cache_database during integration tests")
1338 } 1346 }