summaryrefslogtreecommitdiffstats
path: root/lib/core
AgeCommit message (Collapse)Author
2019-02-20Add debug outputMatthias Beyer
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2019-02-20Fix: Use StoreIdWithBase::from_full_pathMatthias Beyer
We iterate over full pathes to store entries here, which causes `StoreId::new()` to error. But if we use the internal parsing helper `StoreIdWithBase::from_full_path()` and then call `::into_storeid()` on the resulting object, everything is fine. Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2019-02-19Add output about logger settings in logging setupMatthias Beyer
This way we can get trace-level information about the logger itself when it is generated. Because from time to time we might want to have a look at that. Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2019-02-15Merge branch 'redefine-storeid'Matthias Beyer
Finally merging the redefine of the StoreId implementation, which allows easier handling of StoreId objects. Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2019-02-15Remove unused variableMatthias Beyer
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2019-02-15Remove irrelevant testsMatthias Beyer
Because StoreId objects do not contain bases anymore, we do not need these tests anymore. Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2019-02-15Use StoreId::local_display_string() for less errorhandling hereMatthias Beyer
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2019-02-15Adapt to new libimagstore::iter::Entries APIMatthias Beyer
Use Entries::into_storeid_iter() for transforming iterator into right type. Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2019-02-15Add Entries::into_storeid_iter()Matthias Beyer
This is a more complicated functionality (implementation-wise) of the `Entries` iterator, which allows a callee to transform it into a `StoreIdIterator`. It uses the crate internal `PathIterator` type and a function to extract the internals of that iterator which is then turned into an iterator over `Result<StoreId>`, which can be used to build a `StoreIdIterator`. The implementation is ugly, but we need to be able to transform a `Entries` iterator into a `StoreIdIterator` in the `libimagentryannotation`, and possibly in more cases where we want to be agnostic over iterators. Maybe there is a cleaner solution to this, hence the comment about whether this should be removed. Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2019-02-15Rewrite: StoreId::new_baseless() -> StoreId::new()Matthias Beyer
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2019-02-15Rewrite Store::new* API: libimagstore does not export backend typesMatthias Beyer
With this change applied, libimagstore does not export backend representing types anymore. This change is necessar because when we want to switch the `StoreId` implementation from "complex and stateful" to "Stateless and Cow<'_, &str>", we need to be able to have a type which represents a "`StoreId` plus the path of the Store itself". This "the path of the Store itself" is passed around as reference, to minimize runtime impact. Because such a type should not be exported by the libimagstore crate, we make it `pub(crate)` internally. But because the backend APIs also have to use this type, we would export the (private) type in the APIs of the backend. Because of that we make the backend API also non-visible to crate users, which also decreases the surface of the libimagstore API itself. Besides: Remove function `Link::with_base()` which is not needed anymore (was used in tests only). Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2019-02-15Delete unused codeMatthias Beyer
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2019-02-15Move to simpler implementation of StoreidMatthias Beyer
This changes the implementation of the StoreId type to be less complex. Before we always had to re-attach the path of the store itself each time a StoreId object was passed to the store. Now we do not do this anymore, hopefully we can move to a implementation of the Store API which takes references of StoreId objects in the future. Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2019-02-15Fix: Off by one errorMatthias Beyer
When printing the error chain, we print the error and then iterate over the causes. Hence, we have to increase the printed number by one here, because 0 (zero) is already printed. Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2019-02-15Add debug outputMatthias Beyer
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2019-02-15Bugfix: Rebuild iterator when changing collectionMatthias Beyer
This patch fixes a bug where the following code (here pseudocode) did the wrong thing: store.entries().in_collection("foo").for_each(||...) because the `.in_collection()` call for the underlying PathIterator object did not actually re-build the iterator. It only changed the contained `PathIterBuilder`, but did not call `.build_iter()` on it to rebuild the iterator object. The test added with this patch checks whether the iterator does the right thing. Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2019-02-11Adapt for new interface of gen_vars() functionMatthias Beyer
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2019-02-11Remove magic constants in trace_unwrap_exit/map_err_trace_exit_unwrap callsMatthias Beyer
This patch removes the magic constant we used when calling `trace_unwrap_exit()` or `map_err_trace_exit_unwrap()`. We used to call it with `1` as parameter, where the number was the exit code to use. Now the implementation of the function does it automatically (using 1 (one) as exit code). All calls of these functions were fixed. Thanks to vim this was easy. Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2019-02-11Remove clone() callsMatthias Beyer
We should be able, from the signature of the `generate_variants()` helper function, to pass a `Vec<&T>` here, so cloning should not be necessary. Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2019-02-11Simplify implementationMatthias Beyer
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2019-02-11Add trace!() call to show config when runtime initializesMatthias Beyer
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2019-02-11Change id reporting API to return ExitCodeMatthias Beyer
Because this API only errors when write!() errors occur, we can return the exit code as an error here. This way the user of the API can immediately exit if there was an IO error, but the API automatically takes care of the right return value, returning (exiting) with zero (0) if there was an "Broken pipe" error and with one (1) otherwise, which is the expected behaviour here. All calls to that API were changed accordingly. Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2019-02-10Fix config override mechanismMatthias Beyer
The bug was that we did not actually _set_ the new value. Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2019-02-05Remove log-destination-override featuresMatthias Beyer
This removes the feature to be able to override log destinations from the commandline. This feature is removed because the --override-config feature from the runtime already contains this functionality. It is a little more complex to use, though this is a feature hardly used at all, so I rather go for less code (less complexity) here than feature bloat. Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2019-02-05Add runtime feature: Ignore id reportingMatthias Beyer
This feature gives the users of the Runtime API the possibility to check whether the user wants the ID reporting to be ignored as well (and more important) to override the default behaviour where the runtime assumes that if STDOUT is a pipe, it is a pipe to an imag command. Before, this would not have been possible: imag contact find Jonas --json | jq 'map(.fullname)' because the runtime automatically prints the output of the command to stderr and the touched IDs to stdout. But now with this change, a user can override this default behaviour and do: imag contact --ignore-ids find Jonas --json | jq 'map(.fullname)' Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2019-01-03Update copyright yearsMatthias Beyer
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2018-12-13Add Store::exists() for checking whether a StoreId exists as EntryMatthias Beyer
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2018-11-26Simplify Display impl for StoreidMatthias Beyer
2018-11-26Reimplement StoreId::to_str() without erroringMatthias Beyer
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2018-11-11Forbid unsafe code in all cratesMatthias Beyer
2018-11-10Update version stringsMatthias Beyer
...for the next release, which will be imag 0.10.0! Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2018-11-09Update dependencies from git versions to proper versions.Matthias Beyer
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2018-11-06Implement ID providing in libimagrtMatthias Beyer
With this patch, IDs can be fetched from the CLI via libimagrt. This gives us the possibility to automatically handle "stdin provides IDs" in libimagrt with less boilerplate in the binaries codebases. Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2018-11-06Implement ID reportingMatthias Beyer
This patch adds the id reporting feature to libimagrt::runtime::Runtime, where processed ("touched") ids can be reported to the Runtime and then get printed to stdout if stdout is a pipe. Other output is automatically redirected to stderr if stdout is a pipe now.
2018-11-06Fix: Do not ignore errors in config anymoreMatthias Beyer
The function already returns `Result<_>`, the only thing that had to be done was refactoring the code for actually returning an error in that case. Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2018-11-06Remove scopeMatthias Beyer
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2018-11-06Remove call to format_err!(), use err_msg() insteadMatthias Beyer
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2018-11-06Remove repetitive code by abstracting itMatthias Beyer
With this patch, the log level aggregation is abstracted away by using zero sized types and a macro to implement the whole thing. This does not alter functionality, but makes the code more readable. Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2018-11-06Remove unnecessary scopeMatthias Beyer
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2018-11-06Remove indirectionMatthias Beyer
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2018-11-06Remove scope for better readabilityMatthias Beyer
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2018-11-06Format codeMatthias Beyer
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2018-11-06FS backend: Safe allocation of new PathBuf objectMatthias Beyer
::stf::fs::create_dir_all() takes any ref to `Path`, which is what we have here, so we can leave out the allocation of a new PathBuf object here. Also remove the match by a `if let Some(_)`, which increases the readability a bit. Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2018-11-06Adapt Store::get()/Store::create() to check cache before FSMatthias Beyer
With this change, the cache is tested before accessing the filesystem, which probably increases the speed if the cache has the entry, because we avoid the slow IO operation. Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2018-11-06Fix: In-Memory test backend: Actually remove the old entry on "move"Matthias Beyer
This fixes a really ugly bug where the in-memory backend for the store did not remove the entry from the in-memory hashmap on "move", but simply copied it from the old location to the new one. That caused tests to fail after the fixes introduced for the Store::get() function which checked the filesystem and the internal cache whether an entry exists before the actual "get" operation, because an old entry would still exist after a move (only in the testcases). Signed-off-by: Matthias Beyer <mail@beyermatthias.de> Fixes: 09e8619cf5 ("libimagstore: Move from error-chain to failure")
2018-11-06Make assert!() output more verboseMatthias Beyer
By printing the actual `Result<>` object that failed the assertion. Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2018-11-06Rewrite Debug for FileLockEntryMatthias Beyer
This changes the implementation of Debug for the FileLockEntry to be more explanatory of how the entry actually looks like. It does not only print the path of the store anymore, but also the location of the Entry. Printing header and content would be still too much, tho. Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2018-11-06Fix: Remove call to deprecated functionMatthias Beyer
2018-11-01Remove logging calls in favour of debug callsMatthias Beyer
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2018-11-01Add debugging output in test via loggerMatthias Beyer