From 14994e26df072a6d154c053d7c8c3c80273a4d7b Mon Sep 17 00:00:00 2001 From: "Jakob L. Kreuze" Date: Fri, 19 Jun 2020 18:54:38 -0400 Subject: Change how birka-cli finds the tag database. There are now two options for specifying a path, in order of precedence: * `-o`, or `--output` command-line arguments. * The `TB_PATH` environment variable. --- src/birka-cli.rs | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/birka-cli.rs b/src/birka-cli.rs index 484d2ed..8396ef4 100644 --- a/src/birka-cli.rs +++ b/src/birka-cli.rs @@ -28,9 +28,12 @@ use std::env; use std::path::Path; fn main() { - let args: Vec = env::args().collect(); + let mut args: Vec = env::args().collect(); if args.len() < 2 || args.iter().any(|arg| arg == "-h" || arg == "--help") { println!("usage: {} ACTION [ARGS ...]", args[0]); + println!(); + println!("\t-o, --output [PATH]: Path to the tag database."); + println!(); println!("\tACTION: add [PATH] [TAGS ...]: index an image, optionally tagged."); println!("\tACTION: add_tags [PATH] [TAGS ...]: add tags to an indexed image."); println!("\tACTION: remove_tags [PATH] [TAGS ...]: remove tags from an indexed image."); @@ -38,12 +41,19 @@ fn main() { std::process::exit(1); } - let tb = if let Ok(val) = env::var("TB_PATH") { - TagDatabase::new(&val) - } else if let Some(dir) = dirs::config_dir() { - TagDatabase::new(&dir.join("birka.db")) + let tb = if let Some(i) = args.iter().position(|x| x == "-o" || x == "--output") { + // Ensure that a path follows the "-o" argument. + if i + 1 >= args.len() { + eprintln!("{} requires an argument", args[i]); + std::process::exit(1); + } + + args.remove(i); + TagDatabase::new(args.remove(i + 1)) + } else if let Ok(path) = std::env::var("TB_PATH") { + TagDatabase::new(path) } else { - TagDatabase::new(&Path::new("/tmp").join("birka.db")) + TagDatabase::new("./birka.db") } .unwrap(); -- cgit v1.3