From 73af12188289cbf6140f2db58c0a12f529bba832 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 13 Feb 2018 20:15:39 +0100 Subject: Remove old concepts --- lib/entry/libimagentryref/src/flags.rs | 100 --------------- lib/entry/libimagentryref/src/hasher.rs | 64 ---------- lib/entry/libimagentryref/src/hashers/mod.rs | 20 --- lib/entry/libimagentryref/src/hashers/nbytes.rs | 66 ---------- lib/entry/libimagentryref/src/lib.rs | 4 - lib/entry/libimagentryref/src/lister.rs | 161 ------------------------ 6 files changed, 415 deletions(-) delete mode 100644 lib/entry/libimagentryref/src/flags.rs delete mode 100644 lib/entry/libimagentryref/src/hasher.rs delete mode 100644 lib/entry/libimagentryref/src/hashers/mod.rs delete mode 100644 lib/entry/libimagentryref/src/hashers/nbytes.rs delete mode 100644 lib/entry/libimagentryref/src/lister.rs (limited to 'lib') diff --git a/lib/entry/libimagentryref/src/flags.rs b/lib/entry/libimagentryref/src/flags.rs deleted file mode 100644 index ae5149ab..00000000 --- a/lib/entry/libimagentryref/src/flags.rs +++ /dev/null @@ -1,100 +0,0 @@ -// -// imag - the personal information management suite for the commandline -// Copyright (C) 2015-2018 Matthias Beyer and contributors -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; version -// 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -// - -use std::collections::BTreeMap; - -use toml::Value; - -use error::RefError as RE; -use error::RefErrorKind as REK; -use error::Result; - -pub struct RefFlags { - content_hashing: bool, - permission_tracking: bool, -} - -impl RefFlags { - - /// Read the RefFlags from a TOML document - /// - /// Assumes that the whole TOML tree is passed. So this looks up `ref.flags` to get the flags. - /// It assumes that this is a Map with Key = and Value = boolean. - pub fn read(v: &Value) -> Result { - fn get_field(v: &Value, key: &str) -> Result { - use toml_query::read::TomlValueReadTypeExt; - v.read_bool(key)?.ok_or(RE::from_kind(REK::HeaderFieldMissingError)) - } - - Ok(RefFlags { - content_hashing: get_field(v, "ref.flags.content_hashing")?, - permission_tracking: get_field(v, "ref.flags.permission_tracking")?, - }) - } - - /// Alias for `RefFlags::content_hashing()` - pub fn is_often_moving(self, b: bool) -> RefFlags { - self.with_content_hashing(b) - } - - pub fn with_content_hashing(mut self, b: bool) -> RefFlags { - self.content_hashing = b; - self - } - - pub fn with_permission_tracking(mut self, b: bool) -> RefFlags { - self.permission_tracking = b; - self - } - - - pub fn get_content_hashing(&self) -> bool { - self.content_hashing - } - - pub fn get_permission_tracking(&self) -> bool { - self.permission_tracking - } - -} - -impl Into for RefFlags { - - /// Build a TOML::Value from this RefFlags object. - /// - /// Returns a Map which should be set in `ref.flags` in the header. - fn into(self) -> Value { - let mut btm = BTreeMap::new(); - btm.insert(String::from("content_hashing"), Value::Boolean(self.content_hashing)); - btm.insert(String::from("permission_tracking"), Value::Boolean(self.permission_tracking)); - return Value::Table(btm) - } - -} - -impl Default for RefFlags { - - fn default() -> RefFlags { - RefFlags { - content_hashing: false, - permission_tracking: false, - } - } -} - diff --git a/lib/entry/libimagentryref/src/hasher.rs b/lib/entry/libimagentryref/src/hasher.rs deleted file mode 100644 index 02cf8e80..00000000 --- a/lib/entry/libimagentryref/src/hasher.rs +++ /dev/null @@ -1,64 +0,0 @@ -// -// imag - the personal information management suite for the commandline -// Copyright (C) 2015-2018 Matthias Beyer and contributors -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; version -// 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -// - -use std::path::PathBuf; -use std::io::Read; - -use crypto::sha1::Sha1; -use crypto::digest::Digest; - -use error::Result; - -/// The Hasher trait is used to implement custom hashing functions for the ref library. -/// This means that one can define how the hash of a reference is constructed from the content of -/// the file to ref to. -pub trait Hasher { - - fn hash_name(&self) -> &'static str; - fn create_hash(&mut self, pb: &PathBuf, contents: &mut R) -> Result; - -} - -pub struct DefaultHasher { - hasher: Sha1, -} - -impl DefaultHasher { - - pub fn new() -> DefaultHasher { - DefaultHasher { hasher: Sha1::new() } - } - -} - -impl Hasher for DefaultHasher { - - fn hash_name(&self) -> &'static str { - "default" - } - - fn create_hash(&mut self, _: &PathBuf, c: &mut R) -> Result { - let mut s = String::new(); - c.read_to_string(&mut s)?; - self.hasher.input_str(&s[..]); - Ok(self.hasher.result_str()) - } - -} - diff --git a/lib/entry/libimagentryref/src/hashers/mod.rs b/lib/entry/libimagentryref/src/hashers/mod.rs deleted file mode 100644 index 9e55e804..00000000 --- a/lib/entry/libimagentryref/src/hashers/mod.rs +++ /dev/null @@ -1,20 +0,0 @@ -// -// imag - the personal information management suite for the commandline -// Copyright (C) 2015-2018 Matthias Beyer and contributors -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; version -// 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -// - -pub mod nbytes; diff --git a/lib/entry/libimagentryref/src/hashers/nbytes.rs b/lib/entry/libimagentryref/src/hashers/nbytes.rs deleted file mode 100644 index a55dd706..00000000 --- a/lib/entry/libimagentryref/src/hashers/nbytes.rs +++ /dev/null @@ -1,66 +0,0 @@ -// -// imag - the personal information management suite for the commandline -// Copyright (C) 2015-2018 Matthias Beyer and contributors -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; version -// 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -// - -use std::io::Read; -use std::path::PathBuf; -use std::result::Result as RResult; - -use crypto::sha1::Sha1; -use crypto::digest::Digest; - -use hasher::Hasher; -use error::Result; -use error::RefError as RE; - -pub struct NBytesHasher { - hasher: Sha1, - n: usize, -} - -impl NBytesHasher { - - pub fn new(n: usize) -> NBytesHasher { - NBytesHasher { - hasher: Sha1::new(), - n: n, - } - } - -} - -impl Hasher for NBytesHasher { - - fn hash_name(&self) -> &'static str { - "n-bytes-hasher" - } - - fn create_hash(&mut self, _: &PathBuf, contents: &mut R) -> Result { - let s : String = contents - .bytes() - .take(self.n) - .collect::, _>>() - .map_err(From::from) - .and_then(|v| String::from_utf8(v).map_err(RE::from))?; - - self.hasher.input_str(&s[..]); - Ok(self.hasher.result_str()) - } - -} - diff --git a/lib/entry/libimagentryref/src/lib.rs b/lib/entry/libimagentryref/src/lib.rs index e32a9e82..ea0824d3 100644 --- a/lib/entry/libimagentryref/src/lib.rs +++ b/lib/entry/libimagentryref/src/lib.rs @@ -51,10 +51,6 @@ extern crate libimagentrylist; module_entry_path_mod!("ref"); pub mod error; -pub mod flags; -pub mod hasher; -pub mod hashers; -pub mod lister; pub mod reference; pub mod refstore; mod util; diff --git a/lib/entry/libimagentryref/src/lister.rs b/lib/entry/libimagentryref/src/lister.rs deleted file mode 100644 index a3219b9f..00000000 --- a/lib/entry/libimagentryref/src/lister.rs +++ /dev/null @@ -1,161 +0,0 @@ -// -// imag - the personal information management suite for the commandline -// Copyright (C) 2015-2018 Matthias Beyer and contributors -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; version -// 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -// - -use std::default::Default; -use std::io::stdout; -use std::io::Write; -use std::ops::Deref; - -use libimagentrylist::lister::Lister; -use libimagentrylist::error::Result; -use libimagerror::trace::trace_error; -use libimagstore::store::FileLockEntry; -use libimagentrylist::error::ListErrorKind as LEK; -use libimagentrylist::error as lerror; - -use reference::Ref; - -pub struct RefLister { - check_dead: bool, - check_changed: bool, - check_changed_content: bool, - check_changed_permiss: bool, -} - -impl RefLister { - - pub fn new() -> RefLister { - RefLister::default() - } - - pub fn check_dead(mut self, b: bool) -> RefLister { - self.check_dead = b; - self - } - - pub fn check_changed(mut self, b: bool) -> RefLister { - self.check_changed = b; - self - } - - pub fn check_changed_content(mut self, b: bool) -> RefLister { - self.check_changed_content = b; - self - } - - pub fn check_changed_permiss(mut self, b: bool) -> RefLister { - self.check_changed_permiss = b; - self - } - -} - -impl Default for RefLister { - - fn default() -> RefLister { - RefLister { - check_dead: false, - check_changed: false, - check_changed_content: false, - check_changed_permiss: false, - } - } -} - -impl Lister for RefLister { - - fn list<'b, I: Iterator>>(&self, entries: I) -> Result<()> { - - debug!("Called list()"); - let (r, n) = entries.fold((Ok(()), 0), |(accu, i), entry| { - debug!("fold({:?}, {:?})", accu, entry); - let r = accu.and_then(|_| { - debug!("Listing Entry: {:?}", entry); - { - let is_dead = if self.check_dead { - if lerror::ResultExt::chain_err(entry.fs_link_exists(), || LEK::FormatError)? { - "dead" - } else { - "alive" - } - } else { - "not checked" - }; - - let is_changed = if self.check_changed { - if check_changed(entry.deref()) { "changed" } else { "unchanged" } - } else { - "not checked" - }; - - let is_changed_content = if self.check_changed_content { - if check_changed_content(entry.deref()) { "changed" } else { "unchanged" } - } else { - "not checked" - }; - - let is_changed_permiss = if self.check_changed_permiss { - if check_changed_permiss(entry.deref()) { "changed" } else { "unchanged" } - } else { - "not checked" - }; - - Ok(format!("{} | {} | {} | {} | {} | {}", - is_dead, - is_changed, - is_changed_content, - is_changed_permiss, - entry.get_path_hash().unwrap_or_else(|_| String::from("Cannot get hash")), - entry.get_location())) - } - .and_then(|s| { - lerror::ResultExt::chain_err(write!(stdout(), "{}\n", s), || LEK::FormatError) - }) - }) - .map(|_| ()); - (r, i + 1) - }); - debug!("Iterated over {} entries", n); - r - } - -} - -fn check_changed(r: &R) -> bool { - check_changed_content(r) && check_changed_permiss(r) -} - -fn check_changed_content(r: &R) -> bool { - r.get_current_hash() - .and_then(|hash| r.get_stored_hash().map(|stored| (hash, stored))) - .map(|(hash, stored)| hash == stored) - .unwrap_or_else(|e| { - warn!("Could not check whether the ref changed on the FS"); - trace_error(&e); - - // We continue here and tell the callee that this reference is unchanged - false - }) -} - -fn check_changed_permiss(_: &R) -> bool { - warn!("Permission changes tracking not supported yet."); - false -} - -- cgit v1.2.3