feat: allow taking a local path
All checks were successful
continuous-integration/drone/push Build is passing

Signed-off-by: kjuulh <contact@kjuulh.io>
This commit is contained in:
Kasper Juul Hermansen 2024-12-15 11:41:32 +01:00
parent 83f9816cce
commit 09546907e5
Signed by: kjuulh
GPG Key ID: D85D7535F18F35FA
2 changed files with 26 additions and 8 deletions

View File

@ -1,3 +1,5 @@
use std::path::PathBuf;
use tonic::transport::{Channel, ClientTlsConfig}; use tonic::transport::{Channel, ClientTlsConfig};
use crate::{ use crate::{
@ -14,15 +16,18 @@ pub struct State {
} }
pub enum Backend { pub enum Backend {
Local, Local { path_override: Option<PathBuf> },
Remote { url: String }, Remote { url: String },
} }
impl State { impl State {
pub async fn new(backend: Backend) -> anyhow::Result<Self> { pub async fn new(backend: Backend) -> anyhow::Result<Self> {
let (querier, commander) = match &backend { let (querier, commander) = match &backend {
Backend::Local => { Backend::Local { path_override } => {
let storage = Storage::new(); let mut storage = Storage::new();
if let Some(path_override) = path_override {
storage.with_base(path_override);
}
let engine = storage.load()?; let engine = storage.load()?;
let events = Events::default(); let events = Events::default();
let engine = SharedEngine::from(engine); let engine = SharedEngine::from(engine);
@ -53,15 +58,21 @@ impl State {
} }
pub fn unlock(&self) { pub fn unlock(&self) {
if let Backend::Local = &self.backend { if let Backend::Local { path_override } = &self.backend {
let storage = Storage::new(); let mut storage = Storage::new();
if let Some(path_override) = path_override {
storage.with_base(path_override);
}
storage.clear_lock_file(); storage.clear_lock_file();
} }
} }
pub fn info(&self) -> Option<anyhow::Result<String>> { pub fn info(&self) -> Option<anyhow::Result<String>> {
if let Backend::Local = &self.backend { if let Backend::Local { path_override } = &self.backend {
let storage = Storage::new(); let mut storage = Storage::new();
if let Some(path_override) = path_override {
storage.with_base(path_override);
}
return Some(storage.info()); return Some(storage.info());
} }

View File

@ -1,3 +1,5 @@
use std::path::PathBuf;
use clap::{Parser, Subcommand, ValueEnum}; use clap::{Parser, Subcommand, ValueEnum};
use hyperlog_tui::{ use hyperlog_tui::{
commander, commander,
@ -15,6 +17,9 @@ struct Command {
#[arg(long = "backend-url", required_if_eq("backend", "remote"))] #[arg(long = "backend-url", required_if_eq("backend", "remote"))]
backend_url: Option<String>, backend_url: Option<String>,
#[arg(long = "local-path")]
local_path: Option<PathBuf>,
} }
#[derive(ValueEnum, Clone)] #[derive(ValueEnum, Clone)]
@ -90,7 +95,9 @@ pub async fn execute() -> anyhow::Result<()> {
let backend_url = cli.backend_url; let backend_url = cli.backend_url;
let backend = match backend { let backend = match backend {
BackendArg::Local => Backend::Local, BackendArg::Local => Backend::Local {
path_override: cli.local_path.clone(),
},
BackendArg::Remote => Backend::Remote { BackendArg::Remote => Backend::Remote {
url: backend_url.expect("backend-url to be set"), url: backend_url.expect("backend-url to be set"),
}, },