Merge pull request #1420 from matthiasbeyer/imag-tag/read-ids-from-stdin

imag-tag: Read ids from stdin
This commit is contained in:
Matthias Beyer 2018-04-20 09:23:49 +02:00 committed by GitHub
commit 705c6a33f1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 41 additions and 6 deletions

View file

@ -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;

View file

@ -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")