Merge pull request #1420 from matthiasbeyer/imag-tag/read-ids-from-stdin
imag-tag: Read ids from stdin
This commit is contained in:
commit
705c6a33f1
2 changed files with 41 additions and 6 deletions
|
@ -57,6 +57,7 @@ extern crate env_logger;
|
||||||
|
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
|
use std::io::Read;
|
||||||
|
|
||||||
use libimagrt::runtime::Runtime;
|
use libimagrt::runtime::Runtime;
|
||||||
use libimagrt::setup::generate_runtime_setup;
|
use libimagrt::setup::generate_runtime_setup;
|
||||||
|
@ -82,19 +83,45 @@ fn main() {
|
||||||
"Direct interface to the store. Use with great care!",
|
"Direct interface to the store. Use with great care!",
|
||||||
build_ui);
|
build_ui);
|
||||||
|
|
||||||
let id = rt.cli().value_of("id").map(PathBuf::from).unwrap(); // enforced by clap
|
let ids : Vec<PathBuf> = rt
|
||||||
|
.cli()
|
||||||
|
.values_of("id")
|
||||||
|
.map(|vals| {
|
||||||
|
vals.map(PathBuf::from).collect()
|
||||||
|
}).unwrap_or_else(|| {
|
||||||
|
if !rt.cli().is_present("ids-from-stdin") {
|
||||||
|
error!("No ids");
|
||||||
|
::std::process::exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
let stdin = rt.stdin().unwrap_or_else(|| {
|
||||||
|
error!("Cannot get handle to stdin");
|
||||||
|
::std::process::exit(1)
|
||||||
|
});
|
||||||
|
|
||||||
|
let mut buf = String::new();
|
||||||
|
let _ = stdin.lock().read_to_string(&mut buf).unwrap_or_else(|_| {
|
||||||
|
error!("Failed to read from stdin");
|
||||||
|
::std::process::exit(1)
|
||||||
|
});
|
||||||
|
|
||||||
|
buf.lines().map(PathBuf::from).collect()
|
||||||
|
});
|
||||||
|
|
||||||
rt.cli()
|
rt.cli()
|
||||||
.subcommand_name()
|
.subcommand_name()
|
||||||
.map(|name| match name {
|
.map(|name| match name {
|
||||||
"list" => list(id, &rt),
|
"list" => for id in ids {
|
||||||
"remove" => {
|
list(id, &rt)
|
||||||
|
},
|
||||||
|
"remove" => for id in ids {
|
||||||
let id = PathBuf::from(id);
|
let id = PathBuf::from(id);
|
||||||
let add = None;
|
let add = None;
|
||||||
let rem = get_remove_tags(rt.cli());
|
let rem = get_remove_tags(rt.cli());
|
||||||
debug!("id = {:?}, add = {:?}, rem = {:?}", id, add, rem);
|
debug!("id = {:?}, add = {:?}, rem = {:?}", id, add, rem);
|
||||||
alter(&rt, id, add, rem);
|
alter(&rt, id, add, rem);
|
||||||
},
|
},
|
||||||
"add" => {
|
"add" => for id in ids {
|
||||||
let id = PathBuf::from(id);
|
let id = PathBuf::from(id);
|
||||||
let add = get_add_tags(rt.cli());
|
let add = get_add_tags(rt.cli());
|
||||||
let rem = None;
|
let rem = None;
|
||||||
|
|
|
@ -25,11 +25,19 @@ pub fn build_ui<'a>(app: App<'a, 'a>) -> App<'a, 'a> {
|
||||||
app.arg(Arg::with_name("id")
|
app.arg(Arg::with_name("id")
|
||||||
.index(1)
|
.index(1)
|
||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
.required(true)
|
.required(false)
|
||||||
.multiple(false)
|
.multiple(true)
|
||||||
.value_name("ID")
|
.value_name("ID")
|
||||||
.help("Entry to use"))
|
.help("Entry to use"))
|
||||||
|
|
||||||
|
.arg(Arg::with_name("ids-from-stdin")
|
||||||
|
.long("ids-from-stdin")
|
||||||
|
.short("I")
|
||||||
|
.takes_value(false)
|
||||||
|
.required(false)
|
||||||
|
.multiple(false)
|
||||||
|
.help("Read store ids to tag from stdin"))
|
||||||
|
|
||||||
.subcommand(SubCommand::with_name("add")
|
.subcommand(SubCommand::with_name("add")
|
||||||
.about("Add tags")
|
.about("Add tags")
|
||||||
.version("0.1")
|
.version("0.1")
|
||||||
|
|
Loading…
Reference in a new issue