summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2017-06-04 16:26:38 +0200
committerMatthias Beyer <mail@beyermatthias.de>2017-06-06 11:12:36 +0200
commit1b8ccb42a715e83ef95ade3fa2615a6cfdaf67a0 (patch)
tree846ca091ab43f918a3fd9138bbdb5262385d876d
parentdd24ce810a80222a625b5f24e6e2b7cb132a91c1 (diff)
libimagstorestdhook: Remove
-rw-r--r--.imag-documentation/Cargo.toml3
-rw-r--r--Cargo.toml1
-rw-r--r--libimagstorestdhook/Cargo.toml36
l---------libimagstorestdhook/README.md1
-rw-r--r--libimagstorestdhook/src/debug.rs134
-rw-r--r--libimagstorestdhook/src/denylinkeddelete.rs119
-rw-r--r--libimagstorestdhook/src/flock.rs167
-rw-r--r--libimagstorestdhook/src/lib.rs52
-rw-r--r--libimagstorestdhook/src/linkverify.rs93
-rw-r--r--libimagstorestdhook/src/vcs/git/action.rs69
-rw-r--r--libimagstorestdhook/src/vcs/git/config.rs241
-rw-r--r--libimagstorestdhook/src/vcs/git/delete.rs242
-rw-r--r--libimagstorestdhook/src/vcs/git/error.rs97
-rw-r--r--libimagstorestdhook/src/vcs/git/mod.rs29
-rw-r--r--libimagstorestdhook/src/vcs/git/result.rs24
-rw-r--r--libimagstorestdhook/src/vcs/git/runtime.rs178
-rw-r--r--libimagstorestdhook/src/vcs/git/store_unload.rs264
-rw-r--r--libimagstorestdhook/src/vcs/git/update.rs263
-rw-r--r--libimagstorestdhook/src/vcs/git/util.rs42
-rw-r--r--libimagstorestdhook/src/vcs/mod.rs20
20 files changed, 0 insertions, 2075 deletions
diff --git a/.imag-documentation/Cargo.toml b/.imag-documentation/Cargo.toml
index 307987ea..bbe8bf58 100644
--- a/.imag-documentation/Cargo.toml
+++ b/.imag-documentation/Cargo.toml
@@ -60,9 +60,6 @@ path = "../libimagrt"
[dependencies.libimagstore]
path = "../libimagstore"
-[dependencies.libimagstorestdhook]
-path = "../libimagstorestdhook"
-
[dependencies.libimagtimeui]
path = "../libimagtimeui"
diff --git a/Cargo.toml b/Cargo.toml
index c5212cda..56298a5c 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -31,7 +31,6 @@ members = [
"libimagref",
"libimagrt",
"libimagstore",
- "libimagstorestdhook",
"libimagtimeui",
"libimagtodo",
"libimagutil",
diff --git a/libimagstorestdhook/Cargo.toml b/libimagstorestdhook/Cargo.toml
deleted file mode 100644
index 3e70f61a..00000000
--- a/libimagstorestdhook/Cargo.toml
+++ /dev/null
@@ -1,36 +0,0 @@
-[package]
-name = "libimagstorestdhook"
-version = "0.3.0"
-authors = ["Matthias Beyer <mail@beyermatthias.de>"]
-
-description = "Library for the imag core distribution"
-
-keywords = ["imag", "PIM", "personal", "information", "management"]
-readme = "../README.md"
-license = "LGPL-2.1"
-
-documentation = "https://matthiasbeyer.github.io/imag/imag_documentation/index.html"
-repository = "https://github.com/matthiasbeyer/imag"
-homepage = "http://imag-pim.org"
-
-[dependencies]
-toml = "^0.4"
-log = "0.3"
-fs2 = "0.3"
-git2 = "0.5"
-
-[dependencies.libimagstore]
-path = "../libimagstore"
-
-[dependencies.libimagentrylink]
-path = "../libimagentrylink"
-
-[dependencies.libimaginteraction]
-path = "../libimaginteraction"
-
-[dependencies.libimagerror]
-path = "../libimagerror"
-
-[dependencies.libimagutil]
-path = "../libimagutil"
-
diff --git a/libimagstorestdhook/README.md b/libimagstorestdhook/README.md
deleted file mode 120000
index 495accc7..00000000
--- a/libimagstorestdhook/README.md
+++ /dev/null
@@ -1 +0,0 @@
-../doc/src/05100-lib-store-std-hook.md \ No newline at end of file
diff --git a/libimagstorestdhook/src/debug.rs b/libimagstorestdhook/src/debug.rs
deleted file mode 100644
index af20f330..00000000
--- a/libimagstorestdhook/src/debug.rs
+++ /dev/null
@@ -1,134 +0,0 @@
-//
-// imag - the personal information management suite for the commandline
-// Copyright (C) 2015, 2016 Matthias Beyer <mail@beyermatthias.de> 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 toml::Value;
-
-use libimagstore::hook::Hook;
-use libimagstore::hook::accessor::HookDataAccessor;
-use libimagstore::hook::accessor::HookDataAccessorProvider;
-use libimagstore::hook::position::HookPosition;
-
-use self::accessor::DebugHookAccessor as DHA;
-
-#[derive(Debug)]
-pub struct DebugHook {
- position: HookPosition,
- accessor: DHA,
-}
-
-impl DebugHook {
-
- pub fn new(pos: HookPosition) -> DebugHook {
- DebugHook {
- position: pos.clone(),
- accessor: DHA::new(pos),
- }
- }
-
-}
-
-impl Hook for DebugHook {
-
- fn name(&self) -> &'static str {
- "stdhook_debug"
- }
-
- fn set_config(&mut self, c: &Value) {
- debug!("Trying to set configuration in debug hook: {:?}", c);
- debug!("Ignoring configuration in debug hook, we don't need a config here");
- }
-
-}
-
-impl HookDataAccessorProvider for DebugHook {
-
- fn accessor(&self) -> HookDataAccessor {
- use libimagstore::hook::position::HookPosition as HP;
- use libimagstore::hook::accessor::HookDataAccessor as HDA;
-
- match self.position {
- HP::StoreUnload |
- HP::PreCreate |
- HP::PreRetrieve |
- HP::PreDelete |
- HP::PostDelete => HDA::StoreIdAccess(&self.accessor),
- HP::PostCreate |
- HP::PostRetrieve |
- HP::PreUpdate |
- HP::PostUpdate => HDA::MutableAccess(&self.accessor),
- }
- }
-
-}
-
-pub mod accessor {
- use std::ops::Deref;
-
- use libimagstore::storeid::StoreId;
- use libimagstore::store::FileLockEntry;
- use libimagstore::hook::result::HookResult;
- use libimagstore::hook::accessor::MutableHookDataAccessor;
- use libimagstore::hook::accessor::NonMutableHookDataAccessor;
- use libimagstore::hook::accessor::StoreIdAccessor;
- use libimagstore::hook::position::HookPosition;
-
- #[derive(Debug)]
- pub struct DebugHookAccessor {
- position: HookPosition,
- }
-
- impl DebugHookAccessor {
-
- pub fn new(position: HookPosition) -> DebugHookAccessor {
- DebugHookAccessor {
- position: position,
- }
- }
-
- }
-
- impl StoreIdAccessor for DebugHookAccessor {
-
- fn access(&self, id: &StoreId) -> HookResult<()> {
- debug!("[DEBUG HOOK]: {:?}", id);
- Ok(())
- }
-
- }
-
- impl MutableHookDataAccessor for DebugHookAccessor {
-
- fn access_mut(&self, fle: &mut FileLockEntry) -> HookResult<()> {
- debug!("[DEBUG HOOK] {:?}", fle.deref().deref());
- Ok(())
- }
-
- }
-
- impl NonMutableHookDataAccessor for DebugHookAccessor {
-
- fn access(&self, fle: &FileLockEntry) -> HookResult<()> {
- debug!("[DEBUG HOOK] {:?}", fle.deref().deref());
- Ok(())
- }
-
- }
-
-}
-
diff --git a/libimagstorestdhook/src/denylinkeddelete.rs b/libimagstorestdhook/src/denylinkeddelete.rs
deleted file mode 100644
index 6186535a..00000000
--- a/libimagstorestdhook/src/denylinkeddelete.rs
+++ /dev/null
@@ -1,119 +0,0 @@
-//
-// imag - the personal information management suite for the commandline
-// Copyright (C) 2015, 2016 Matthias Beyer <mail@beyermatthias.de> 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 toml::Value;
-
-use libimagstore::hook::Hook;
-use libimagstore::hook::error::HookErrorKind as HEK;
-use libimagstore::hook::accessor::HookDataAccessor as HDA;
-use libimagstore::hook::accessor::HookDataAccessorProvider;
-use libimagstore::hook::accessor::NonMutableHookDataAccessor;
-use libimagstore::hook::result::HookResult;
-use libimagstore::store::FileLockEntry;
-use libimagstore::toml_ext::TomlValueExt;
-use libimagentrylink::internal::InternalLinker;
-use libimagerror::trace::trace_error;
-
-mod error {
- generate_error_imports!();
- generate_error_types!(NoLinksLeftCheckerHookError, NoLinksLeftCheckerHookErrorKind,
- ReadInternalLinksError => "Error while reading internal links of entry",
- LinksLeft => "The entry has links and therefor cannot be deleted."
- );
-}
-use self::error::NoLinksLeftCheckerHookErrorKind as NLLCHEK;
-
-#[derive(Debug, Clone)]
-pub struct DenyDeletionOfLinkedEntriesHook {
- abort: bool
-}
-
-impl DenyDeletionOfLinkedEntriesHook {
-
- pub fn new() -> DenyDeletionOfLinkedEntriesHook {
- DenyDeletionOfLinkedEntriesHook {
- abort: true // by default, this hook aborts actions
- }
- }
-
-}
-
-impl Hook for DenyDeletionOfLinkedEntriesHook {
-
- fn name(&self) -> &'static str {
- "stdhook_linked_entries_cannot_be_deleted"
- }
-
- fn set_config(&mut self, v: &Value) {
- self.abort = match v.read("aborting") {
- Ok(Some(Value::Boolean(b))) => b,
- Ok(Some(_)) => {
- warn!("Configuration error, 'aborting' must be a Boolean (true|false).");
- warn!("Assuming 'true' now.");
- true
- },
- Ok(None) => {
- warn!("No key 'aborting' - Assuming 'true'");
- true
- },
- Err(e) => {
- error!("Error parsing TOML:");
- trace_error(&e);
- false
- },
- };
- }
-
-}
-
-impl HookDataAccessorProvider for DenyDeletionOfLinkedEntriesHook {
-
- fn accessor(&self) -> HDA {
- HDA::NonMutableAccess(self)
- }
-
-}
-
-impl NonMutableHookDataAccessor for DenyDeletionOfLinkedEntriesHook {
-
- fn access(&self, fle: &FileLockEntry) -> HookResult<()> {
- use libimagerror::into::IntoError;
- use self::error::MapErrInto;
-
- debug!("[NO LINKS LEFT CHECKER HOOK] {:?}", fle.get_location());
-
- let n = try!(fle
- .get_internal_links()
- .map(|i| i.count())
- .map_err_into(NLLCHEK::ReadInternalLinksError)
- .map_err(Box::new)
- .map_err(|e| HEK::HookExecutionError.into_error_with_cause(e)));
-
- if n > 0 {
- Err(NLLCHEK::LinksLeft.into_error())
- .map_err(Box::new)
- .map_err(|e| HEK::HookExecutionError.into_error_with_cause(e))
- } else {
- Ok(())
- }
- }
-
-}
-
-
diff --git a/libimagstorestdhook/src/flock.rs b/libimagstorestdhook/src/flock.rs
deleted file mode 100644
index 6cc30864..00000000
--- a/libimagstorestdhook/src/flock.rs
+++ /dev/null
@@ -1,167 +0,0 @@
-//
-// imag - the personal information management suite for the commandline
-// Copyright (C) 2015, 2016 Matthias Beyer <mail@beyermatthias.de> 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 toml::Value;
-
-use fs2::FileExt;
-use std::fs::File;
-
-use libimagstore::hook::Hook;
-use libimagstore::hook::accessor::HookDataAccessor as HDA;
-use libimagstore::hook::accessor::HookDataAccessorProvider;
-use libimagstore::hook::accessor::StoreIdAccessor;
-use libimagstore::hook::accessor::MutableHookDataAccessor;
-use libimagstore::hook::accessor::NonMutableHookDataAccessor;
-use libimagstore::hook::result::HookResult;
-use libimagstore::hook::error::{HookError, HookErrorKind};
-use libimagstore::storeid::StoreId;
-use libimagstore::store::FileLockEntry;
-use libimagstore::store::Entry;
-
-mod error {
- generate_error_imports!();
- generate_error_types!(FlockError, FlockErrorKind,
- IOError => "IO Error",
- StoreIdPathBufConvertError => "Error while converting StoreId to PathBuf",
- FileOpenError => "Error on File::open()",
- LockError => "Error while lock()ing",
- UnlockError => "Error while unlock()ing"
- );
-}
-use self::error::FlockError as FE;
-use self::error::FlockErrorKind as FEK;
-use self::error::MapErrInto;
-
-trait EntryFlock {
- fn lock(&self) -> Result<(), FE>;
- fn unlock(&self) -> Result<(), FE>;
-}
-
-fn open_file(id: StoreId) -> Result<File, FE> {
- id.into_pathbuf()
- .map_err_into(FEK::StoreIdPathBufConvertError)
- .and_then(|loc| {
- File::open(loc)
- .map_err_into(FEK::FileOpenError)
- .map_err_into(FEK::IOError)
- })
-}
-
-impl EntryFlock for Entry {
-
- fn lock(&self) -> Result<(), FE> {
- open_file(self.get_location().clone())
- .and_then(|file| {
- file.lock_exclusive()
- .map_err_into(FEK::LockError)
- .map_err_into(FEK::IOError)
- })
- }
-
- fn unlock(&self) -> Result<(), FE> {
- open_file(self.get_location().clone())
- .and_then(|file| {
- file.unlock()
- .map_err_into(FEK::UnlockError)
- .map_err_into(FEK::LockError)
- .map_err_into(FEK::IOError)
- })
- }
-
-}
-
-#[derive(PartialEq, Eq, Debug, Clone)]
-pub enum Action {
- Lock,
- Unlock
-}
-
-fn action_to_str(a: &Action) -> &'static str {
- match *a {
- Action::Lock => "lock",
- Action::Unlock => "unlock",
- }
-}
-
-#[derive(Debug, Clone)]
-pub struct FlockUpdateHook {
- action: Action,
-}
-
-impl FlockUpdateHook {
-
- pub fn new(action: Action) -> FlockUpdateHook {
- FlockUpdateHook {
- action: action,
- }
- }
-
-}
-
-impl Hook for FlockUpdateHook {
-
- fn name(&self) -> &'static str {
- "stdhook_flock_update"
- }
-
- fn set_config(&mut self, _: &Value) {
- () // We are not configurable here.
- }
-
-}
-
-impl HookDataAccessorProvider for FlockUpdateHook {
-
- fn accessor(&self) -> HDA {
- HDA::StoreIdAccess(self)
- }
-
-}
-
-impl StoreIdAccessor for FlockUpdateHook {
-
- fn access(&self, id: &StoreId) -> HookResult<()> {
- debug!("[FLOCK HOOK][{}] {:?}", action_to_str(&self.action), id);
- Ok(())
- }
-
-}
-
-impl MutableHookDataAccessor for FlockUpdateHook {
-
- fn access_mut(&self, fle: &mut FileLockEntry) -> HookResult<()> {
- debug!("[FLOCK HOOK][{}] {:?}", action_to_str(&self.action), fle.get_location());
- fle.lock()
- .map_err(|e| HookError::new(HookErrorKind::HookExecutionError, Some(Box::new(e))))
- .map(|_| ())
- }
-
-}
-
-impl NonMutableHookDataAccessor for FlockUpdateHook {
-
- fn access(&self, fle: &FileLockEntry) -> HookResult<()> {
- debug!("[FLOCK HOOK][{}] {:?}", action_to_str(&self.action), fle.get_location());
- fle.unlock()
- .map_err(|e| HookError::new(HookErrorKind::HookExecutionError, Some(Box::new(e))))
- .map(|_| ())
- }
-
-}
-
diff --git a/libimagstorestdhook/src/lib.rs b/libimagstorestdhook/src/lib.rs
deleted file mode 100644
index abfea88b..00000000
--- a/libimagstorestdhook/src/lib.rs
+++ /dev/null
@@ -1,52 +0,0 @@
-//
-// imag - the personal information management suite for the commandline
-// Copyright (C) 2015, 2016 Matthias Beyer <mail@beyermatthias.de> 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
-//
-
-#![deny(
- dead_code,
- non_camel_case_types,
- non_snake_case,
- path_statements,
- trivial_numeric_casts,
- unstable_features,
- unused_allocation,
- unused_import_braces,
- unused_imports,
- unused_must_use,
- unused_mut,
- unused_qualifications,
- while_true,
-)]
-
-#[macro_use] extern crate log;
-extern crate toml;
-extern crate fs2;
-extern crate git2;
-
-extern crate libimagstore;
-extern crate libimagentrylink;
-extern crate libimaginteraction;
-#[macro_use] extern crate libimagerror;
-extern crate libimagutil;
-
-pub mod debug;
-pub mod denylinkeddelete;
-pub mod flock;
-pub mod linkverify;
-pub mod vcs;
-
diff --git a/libimagstorestdhook/src/linkverify.rs b/libimagstorestdhook/src/linkverify.rs
deleted file mode 100644
index 79194797..00000000
--- a/libimagstorestdhook/src/linkverify.rs
+++ /dev/null
@@ -1,93 +0,0 @@
-//
-// imag - the personal information management suite for the commandline
-// Copyright (C) 2015, 2016 Matthias Beyer <mail@beyermatthias.de> 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 toml::Value;
-
-use libimagstore::hook::Hook;
-use libimagstore::hook::accessor::HookDataAccessor as HDA;
-use libimagstore::hook::accessor::HookDataAccessorProvider;
-use libimagstore::hook::accessor::NonMutableHookDataAccessor;
-use libimagstore::hook::result::HookResult;
-use libimagstore::store::FileLockEntry;
-use libimagentrylink::internal::InternalLinker;
-use libimagerror::trace::trace_error;
-
-#[derive(Debug, Clone)]
-pub struct LinkedEntriesExistHook {
- store_location: PathBuf,
-}
-
-impl LinkedEntriesExistHook {
-
- pub fn new(store_location: PathBuf) -> LinkedEntriesExistHook {
- LinkedEntriesExistHook {
- store_location: store_location,
- }
- }
-
-}
-
-impl Hook for LinkedEntriesExistHook {
-
- fn name(&self) -> &'static str {
- "stdhook_linked_entries_exist"
- }
-
- fn set_config(&mut self, _: &Value) {
- () // We are not configurable here.
- }
-
-}
-
-impl HookDataAccessorProvider for LinkedEntriesExistHook {
-
- fn accessor(&self) -> HDA {
- HDA::NonMutableAccess(self)
- }
-
-}
-
-impl NonMutableHookDataAccessor for LinkedEntriesExistHook {
-
- fn access(&self, fle: &FileLockEntry) -> HookResult<()> {
- use libimagstore::hook::error::HookErrorKind;
- use libimagstore::hook::error::MapErrInto;
-
- debug!("[LINKVERIFY HOOK] {:?}", fle.get_location());
- match fle.get_internal_links() {
- Ok(links) => {
- for link in links {
- if !try!(link.exists().map_err_into(HookErrorKind::HookExecutionError)) {
- warn!("File link does not exist: {:?} -> {:?}", fle.get_location(), link);
- }
- }
- Ok(())
- },
- Err(e) => {
- warn!("Couldn't execute Link-Verify hook");
- trace_error(&e);
- Err(e).map_err_into(HookErrorKind::HookExecutionError)
- }
- }
- }
-
-}
-
diff --git a/libimagstorestdhook/src/vcs/git/action.rs b/libimagstorestdhook/src/vcs/git/action.rs
deleted file mode 100644
index 76715c83..00000000
--- a/libimagstorestdhook/src/vcs/git/action.rs
+++ /dev/null
@@ -1,69 +0,0 @@
-//
-// imag - the personal information management suite for the commandline
-// Copyright (C) 2015, 2016 Matthias Beyer <mail@beyermatthias.de> 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::fmt::{Display, Formatter, Error};
-
-/// Utility type to specify which kind of store action is running
-#[derive(Clone, Debug)]
-pub enum StoreAction {
- Create,
- Retrieve,
- Update,
- Delete,
- StoreUnload,
-}
-
-impl StoreAction {
-
- pub fn uppercase(&self) -> &str {
- match *self {
- StoreAction::Create => "CREATE",
- StoreAction::Retrieve => "RETRIEVE",
- StoreAction::Update => "UPDATE",
- StoreAction::Delete => "DELETE",
- StoreAction::StoreUnload => "STORE UNLOAD",
- }
- }
-
- pub fn as_commit_message(&self) -> &str {
- match *self {
- StoreAction::Create => "Create",
- StoreAction::Retrieve => "Retrieve",
- StoreAction::Update => "Update",
- StoreAction::Delete => "Delete",
- StoreAction::StoreUnload => "Store Unload",
- }
- }
-}
-
-impl Display for StoreAction {
-
- fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> {
- write!(fmt, "StoreAction: {}",
- match *self {
- StoreAction::Create => "create",
- StoreAction::Retrieve => "retrieve",
- StoreAction::Update => "update",
- StoreAction::Delete => "delete",
- StoreAction::StoreUnload => "store unload",
- })
- }
-
-}
-
diff --git a/libimagstorestdhook/src/vcs/git/config.rs b/libimagstorestdhook/src/vcs/git/config.rs
deleted file mode 100644
index 4c44db93..00000000
--- a/libimagstorestdhook/src/vcs/git/config.rs
+++ /dev/null
@@ -1,241 +0,0 @@
-//
-// imag - the personal information management suite for the commandline
-// Copyright (C) 2015, 2016 Matthias Beyer <mail@beyermatthias.de> 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 toml::Value;
-
-use libimagerror::into::IntoError;
-use libimagerror::trace::trace_error;
-use libimagstore::storeid::StoreId;
-use libimagstore::toml_ext::TomlValueExt;
-
-use vcs::git::error::GitHookErrorKind as GHEK;
-use vcs::git::error::MapErrInto;
-use vcs::git::result::Result;
-
-use vcs::git::action::StoreAction;
-
-use git2::Repository;
-
-/// Check the configuration whether we should commit interactively
-pub fn commit_interactive(config: &Value, action: &StoreAction) -> bool {
- match config.read("commit.interactive") {
- Ok(Some(Value::Boolean(b))) => b,
- Ok(Some(_)) => {
- warn!("Configuration error, 'store.hooks.stdhook_git_{}.commit.interactive' must be a Boolean.",
- action);
- warn!("Defaulting to commit.interactive = false");
- false
- }
- Ok(None) => {
- warn!("Unavailable configuration for");
- warn!("\t'store.hooks.stdhook_git_{}.commit.interactive'", action);
- warn!("Defaulting to false");
- false
- },
- Err(e) => {
- error!("Error parsing TOML:");
- trace_error(&e);
- false
- },
- }
-}
-
-/// Check the configuration whether we should commit with the editor
-fn commit_with_editor(config: &Value, action: &StoreAction) -> bool {
- match config.read("commit.interactive_editor") {
- Ok(Some(Value::Boolean(b))) => b,
- Ok(Some(_)) => {
- warn!("Configuration error, 'store.hooks.stdhook_git_{}.commit.interactive_editor' must be a Boolean.",
- action);
- warn!("Defaulting to commit.interactive_editor = false");
- false
- }
- Ok(None) => {
- warn!("Unavailable configuration for");
- warn!("\t'store.hooks.stdhook_git_{}.commit.interactive_editor'", action);
- warn!("Defaulting to false");
- false
- },
- Err(e) => {
- error!("Error parsing TOML:");
- trace_error(&e);
- false
- },
- }
-}
-
-/// Get the commit default message
-fn commit_default_msg<'a>(config: &'a Value, action: &'a StoreAction) -> Result<String> {
- config.read("commit.message")
- .map(|m| match m {
- Some(Value::String(b)) => String::from(b),
- Some(_) => {
- warn!("Configuration error, 'store.hooks.stdhook_git_{}.commit.message' must be a String.",
- action);
- warn!("Defaulting to commit.message = '{}'", action.as_commit_message());
- String::from(action.as_commit_message())
- },
- None => {
- warn!("Unavailable configuration for");
- warn!("\t'store.hooks.stdhook_git_{}.commit.message'", action);
- warn!("Defaulting to commit.message = '{}'", action.as_commit_message());
- String::from(action.as_commit_message())
- },
- })
- .map_err_into(GHEK::ConfigError)
-
-}
-
-/// Get the commit template
-///
-/// TODO: Implement good template string
-fn commit_template(action: &StoreAction, id: &StoreId) -> String {
- format!(r#"
-# Please commit your changes and remove these lines.
-#
-# You're about to commit changes via the {action} Hook
-#
-# Altered file: {id}
-#
- "#,
- action = action,
- id = id.local().display())
-}
-
-/// Generate a commit message
-///
-/// Uses the functions `commit_interactive()` and `commit_with_editor()`
-/// or reads one from the commandline or uses the `commit_default_msg()` string to create a commit
-/// message.
-pub fn commit_message(repo: &Repository, config: &Value, action: StoreAction, id: &StoreId) -> Result<String> {
- use libimaginteraction::ask::ask_string;
- use libimagutil::edit::edit_in_tmpfile_with_command;
- use std::process::Command;
-
- if commit_interactive(config, &action) {
- if commit_with_editor(config, &action) {
- repo.config()
- .map_err_into(GHEK::GitConfigFetchError)
- .and_then(|c| c.get_string("core.editor").map_err_into(GHEK::GitConfigEditorFetchError))
- .map_err_into(GHEK::ConfigError)
- .map(Command::new)
- .and_then(|cmd| {
- let mut s = commit_template(&action, id);
- edit_in_tmpfile_with_command(cmd, &mut s).map(|_| s)
- .map_err_into(GHEK::EditorError)
- })
- } else {
- Ok(ask_string("Commit Message", None, false, false, None, "> "))
- }
- } else {
- commit_default_msg(config, &action)
- }
-}
-
-/// Check whether the hook should abort if the repository cannot be initialized
-pub fn abort_on_repo_init_err(cfg: &Value) -> bool {
- get_bool_cfg(Some(cfg), "abort_on_repo_init_failure", true, true)
-}
-
-/// Get the branch which must be checked out before running the hook (if any).
-///
-/// If there is no configuration for this, this is `Ok(None)`, otherwise we try to find the
-/// configuration `String`.
-pub fn ensure_branch(cfg: Option<&Value>) -> Result<Option<String>> {
- match cfg {
- Some(cfg) => {
- cfg.read("ensure_branch")
- .map_err_into(GHEK::ConfigError)
- .and_then(|toml| match toml {
- Some(Value::String(ref s)) => Ok(Some(s.clone())),
- Some(_) => {
- warn!("Configuration error, 'ensure_branch' must be a String.");
- Err(GHEK::ConfigTypeError.into_error())
- .map_err_into(GHEK::ConfigTypeError)
- },
- None => {
- debug!("No key `ensure_b