commit
4ec3e29459
3 changed files with 187 additions and 0 deletions
29
imag-ref/Cargo.toml
Normal file
29
imag-ref/Cargo.toml
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
[package]
|
||||||
|
name = "imag-ref"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["Matthias Beyer <mail@beyermatthias.de>"]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
semver = "0.2.1"
|
||||||
|
clap = "2.1.1"
|
||||||
|
log = "0.3"
|
||||||
|
version = "2.0.1"
|
||||||
|
|
||||||
|
[dependencies.libimagstore]
|
||||||
|
path = "../libimagstore"
|
||||||
|
|
||||||
|
[dependencies.libimagrt]
|
||||||
|
path = "../libimagrt"
|
||||||
|
|
||||||
|
[dependencies.libimagref]
|
||||||
|
path = "../libimagref"
|
||||||
|
|
||||||
|
[dependencies.libimagerror]
|
||||||
|
path = "../libimagerror"
|
||||||
|
|
||||||
|
[dependencies.libimaginteraction]
|
||||||
|
path = "../libimaginteraction"
|
||||||
|
|
||||||
|
[dependencies.libimagentrylist]
|
||||||
|
path = "../libimagentrylist"
|
||||||
|
|
87
imag-ref/src/main.rs
Normal file
87
imag-ref/src/main.rs
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
#[macro_use] extern crate log;
|
||||||
|
#[macro_use] extern crate version;
|
||||||
|
extern crate semver;
|
||||||
|
extern crate clap;
|
||||||
|
|
||||||
|
extern crate libimagstore;
|
||||||
|
extern crate libimagrt;
|
||||||
|
extern crate libimagref;
|
||||||
|
extern crate libimagerror;
|
||||||
|
extern crate libimagentrylist;
|
||||||
|
extern crate libimaginteraction;
|
||||||
|
|
||||||
|
mod ui;
|
||||||
|
use ui::build_ui;
|
||||||
|
|
||||||
|
use std::path::PathBuf;
|
||||||
|
|
||||||
|
use libimagref::reference::Ref;
|
||||||
|
use libimagref::flags::RefFlags;
|
||||||
|
use libimagerror::trace::trace_error;
|
||||||
|
use libimagrt::setup::generate_runtime_setup;
|
||||||
|
use libimagrt::runtime::Runtime;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let rt = generate_runtime_setup("imag-ref",
|
||||||
|
&version!()[..],
|
||||||
|
"Reference files outside of the store",
|
||||||
|
build_ui);
|
||||||
|
rt.cli()
|
||||||
|
.subcommand_name()
|
||||||
|
.map(|name| {
|
||||||
|
debug!("Call: {}", name);
|
||||||
|
match name {
|
||||||
|
"add" => add(&rt),
|
||||||
|
"remove" => remove(&rt),
|
||||||
|
"list" => list(&rt),
|
||||||
|
_ => {
|
||||||
|
debug!("Unknown command"); // More error handling
|
||||||
|
},
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
fn add(rt: &Runtime) {
|
||||||
|
let cmd = rt.cli().subcommand_matches("add").unwrap();
|
||||||
|
let path = cmd.value_of("path").map(PathBuf::from).unwrap(); // saved by clap
|
||||||
|
|
||||||
|
let flags = RefFlags::default()
|
||||||
|
.with_content_hashing(cmd.is_present("track-content"))
|
||||||
|
.with_permission_tracking(cmd.is_present("track-permissions"));
|
||||||
|
|
||||||
|
match Ref::create(rt.store(), path, flags) {
|
||||||
|
Ok(r) => {
|
||||||
|
debug!("Reference created: {:?}", r);
|
||||||
|
info!("Ok");
|
||||||
|
},
|
||||||
|
Err(e) => {
|
||||||
|
trace_error(&e);
|
||||||
|
warn!("Failed to create reference");
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn remove(rt: &Runtime) {
|
||||||
|
use libimagref::error::RefErrorKind;
|
||||||
|
use libimagerror::into::IntoError;
|
||||||
|
use libimaginteraction::ask::ask_bool;
|
||||||
|
|
||||||
|
let cmd = rt.cli().subcommand_matches("remove").unwrap();
|
||||||
|
let hash = cmd.value_of("hash").map(String::from).unwrap(); // saved by clap
|
||||||
|
let yes = cmd.is_present("yes");
|
||||||
|
|
||||||
|
if yes || ask_bool(&format!("Delete Ref with hash '{}'", hash)[..], None) {
|
||||||
|
match Ref::delete_by_hash(rt.store(), hash) {
|
||||||
|
Err(e) => trace_error(&e),
|
||||||
|
Ok(_) => info!("Ok"),
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
info!("Aborted");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fn list(rt: &Runtime) {
|
||||||
|
unimplemented!()
|
||||||
|
}
|
||||||
|
|
71
imag-ref/src/ui.rs
Normal file
71
imag-ref/src/ui.rs
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
use clap::{Arg, App, SubCommand};
|
||||||
|
|
||||||
|
pub fn build_ui<'a>(app: App<'a, 'a>) -> App<'a, 'a> {
|
||||||
|
app
|
||||||
|
.subcommand(SubCommand::with_name("add")
|
||||||
|
.about("Add a reference to a file outside of the store")
|
||||||
|
.version("0.1")
|
||||||
|
.arg(Arg::with_name("path")
|
||||||
|
.long("path")
|
||||||
|
.short("p")
|
||||||
|
.takes_value(true)
|
||||||
|
.required(true)
|
||||||
|
.help("The path of the file")
|
||||||
|
.value_name("PATH"))
|
||||||
|
.arg(Arg::with_name("track-content")
|
||||||
|
.long("content-hash")
|
||||||
|
.short("C")
|
||||||
|
.takes_value(false)
|
||||||
|
.required(false)
|
||||||
|
.help("Hash the content for the reference"))
|
||||||
|
.arg(Arg::with_name("track-permissions")
|
||||||
|
.long("permission-tracking")
|
||||||
|
.short("P")
|
||||||
|
.takes_value(false)
|
||||||
|
.required(false)
|
||||||
|
.help("Rememeber the permissions of the referenced file"))
|
||||||
|
)
|
||||||
|
|
||||||
|
.subcommand(SubCommand::with_name("remove")
|
||||||
|
.about("Remove a reference")
|
||||||
|
.version("0.1")
|
||||||
|
.arg(Arg::with_name("hash")
|
||||||
|
.long("hash")
|
||||||
|
.short("h")
|
||||||
|
.takes_value(true)
|
||||||
|
.required(true)
|
||||||
|
.help("Remove the reference with this hash")
|
||||||
|
.value_name("HASH"))
|
||||||
|
|
||||||
|
.arg(Arg::with_name("yes")
|
||||||
|
.long("yes")
|
||||||
|
.short("y")
|
||||||
|
.help("Don't ask whether this really should be done"))
|
||||||
|
)
|
||||||
|
|
||||||
|
.subcommand(SubCommand::with_name("list")
|
||||||
|
.about("List references in the store")
|
||||||
|
.version("0.1")
|
||||||
|
|
||||||
|
.arg(Arg::with_name("check-dead")
|
||||||
|
.long("check-dead")
|
||||||
|
.short("d")
|
||||||
|
.help("Check each reference whether it is dead"))
|
||||||
|
|
||||||
|
.arg(Arg::with_name("check-changed")
|
||||||
|
.long("check-changed")
|
||||||
|
.short("c")
|
||||||
|
.help("Check whether a reference had changed (content or permissions)"))
|
||||||
|
|
||||||
|
.arg(Arg::with_name("check-changed-content")
|
||||||
|
.long("check-changed-content")
|
||||||
|
.short("C")
|
||||||
|
.help("Check whether the content of the referenced file changed"))
|
||||||
|
|
||||||
|
.arg(Arg::with_name("check-changed-permissions")
|
||||||
|
.long("check-changed-perms")
|
||||||
|
.short("P")
|
||||||
|
.help("Check whether the permissions of the referenced file changed"))
|
||||||
|
|
||||||
|
)
|
||||||
|
}
|
Loading…
Reference in a new issue