Merge branch 'minor'

Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
This commit is contained in:
Matthias Beyer 2018-10-24 22:47:24 +02:00
commit e1aeb558dc
10 changed files with 79 additions and 53 deletions

View file

@ -45,6 +45,16 @@ matrix:
script:
- cargo build --all --all-features -j 1 || exit 1
- cargo test --all --all-features -j 1 || exit 1
- language: rust
rust: beta
cache:
directories:
- /home/travis/.cargo
before_cache:
- rm -rf /home/travis/.cargo/registry
script:
- cargo build --all --all-features -j 1 || exit 1
- cargo test --all --all-features -j 1 || exit 1
addons:

View file

@ -2,12 +2,6 @@
`imag` is a commandline personal information management suite.
[![Build Status](https://travis-ci.org/matthiasbeyer/imag.svg?branch=master)](https://travis-ci.org/matthiasbeyer/imag)
[![Issue Stats](http://www.issuestats.com/github/matthiasbeyer/imag/badge/pr?style=flat-square)](http://www.issuestats.com/github/matthiasbeyer/imag)
[![Issue Stats](http://www.issuestats.com/github/matthiasbeyer/imag/badge/issue?style=flat-square)](http://www.issuestats.com/github/matthiasbeyer/imag)
[![license](https://img.shields.io/github/license/matthiasbeyer/imag.svg?maxAge=2592000?style=flat-square)]()
[![Tokei](https://tokei.rs/b1/github/matthiasbeyer/imag)](https://github.com/matthiasbeyer/imag)
**This application is in early development. There are _some_ things that work,
but we do not consider anything stable or usable at this moment. Feel free to
play around anyways.**
@ -19,8 +13,7 @@ early 2019. I hope I can continue develop imag during that time, but I cannot
guarantee that. I hope I can continue development of imag after that and I
certainly plan to do so.
But from May 2018 until early 2019, expect long response times on issues and
pull requests.
But from May 2018 until early 2019, expect long response times.
## Goal / What is imag?
@ -50,24 +43,14 @@ All subdirectories prefixed with "`libimag"` are libraries.
All subdirectories prefixed with `"imag-"` are binaries and compiling them will
give you a commandline application.
### Building
We use `cargo` for building all crates in this repository.
Make sure to use a recent `cargo`, at least one with workspace support.
Building all crates works with `cargo build --all`, building individual crates
by `cd`ing to their directory and calling `cargo build`.
by specifying the `--manifest-path` flag to cargo.
For building all commandline applications:
```bash
find bin -maxdepth 3 -name Cargo.toml -exec cargo build --manifest-path {} \;
```
For building only the core functionality
```bash
find bin/core -maxdepth 3 -name Cargo.toml -exec cargo build --manifest-path {} \;
```
### Running
@ -75,8 +58,10 @@ After you build the module you want to play with, you can simply call the binary
itself with the `--help` flag, to get some help what the module is capable of.
If you installed the module, you can either call `imag-<modulename>` (if the
install-directory is in your `$PATH`), or install the `imag` binary to call `imag
<modulename>` (also if everything is in your `$PATH`).
install-directory is in your `$PATH`), or install the `imag` binary to call
`imag <modulename>` (also if everything is in your `$PATH`).
Call `imag --help` to see which modules are found and can be used.
Call `imag --versions` to print the versions of all modules.
## Example usage
@ -97,7 +82,7 @@ imag contact create --file /home/user/contacts/private
# Add a diary entry
imag diary -p private create
# Uh, I forgot something in a diary entry, select one and edit it
# Uh, I forgot something in a diary entry, select one (or multiple) and edit it
# use the `fzf` tool here (not a part of imag) to select from the IDs
imag diary -p private list | fzf -m | imag edit -I
@ -111,7 +96,7 @@ imag annotate add contact/bc222298-casf-40a4-bda1-50aa980a68c9 contact-notes
imag notes create "pineapple"
# Where was that contact again?
imag grep Eva
imag grep Eva # also possible with `imag contact find Eva`
# Okay, we need to add some imag-internal notes to that contact
imag grep Eva -l | imag edit -I
@ -124,7 +109,7 @@ imag git commit -m 'Commit message'
## Staying up-to-date
We have a [official website for imag](https://imag-pim.org), where I post
[release notes](http://imag-pim.org/releases/) and monthly(ish) updates what's
[release notes](https://imag-pim.org/releases/) and monthly(ish) updates what's
happening in the source tree ([RSS here](https://imag-pim.org/index.xml)).
We also have a [mailinglist](https://imag-pim.org/mailinglist/) where I post
@ -134,7 +119,7 @@ updates and where discussion and questions are encouraged.
## Documentation
We have some documentation in [the ./doc subtree](./doc/)
which can be compiled to PDF or a website.
which can be compiled to PDF or a website using pandoc.
It might not be up to date, though.
Developer documentation for the last release is available
[on docs.rs](https://docs.rs/releases/search?query=imag).
@ -143,8 +128,9 @@ Developer documentation for the last release is available
## Please contribute!
We are looking for contributors!
Feel free to open issues for asking questions, suggesting features or other
things!
Feel free to open issues (by writing to
[the mailinglist](https://imag-pim.org/mailinglist/))
for asking questions, suggesting features or other things!
Also have a look at [the CONTRIBUTING.md file](./CONTRIBUTING.md)!

View file

@ -68,7 +68,7 @@ fn main() {
let version = make_imag_version!();
let rt = generate_runtime_setup("imag-ids",
&version,
"print all ids",
"Print all ids, optionally filtered with a user-defined filter",
build_ui);
let print_storepath = rt.cli().is_present("print-storepath");

View file

@ -80,7 +80,7 @@ fn main() {
let version = make_imag_version!();
let rt = generate_runtime_setup("imag-link",
&version,
"Link entries",
"Add/Remove links between entries",
build_ui);
if rt.cli().is_present("check-consistency") {
let exit_code = match rt.store().check_link_consistency() {

View file

@ -80,7 +80,7 @@ fn main() {
let version = make_imag_version!();
let rt = generate_runtime_setup("imag-tag",
&version,
"Direct interface to the store. Use with great care!",
"Add and remove tags for entries",
build_ui);
let ids : Vec<PathBuf> = rt

View file

@ -91,7 +91,7 @@ fn help_text(cmds: Vec<String>) -> String {
Call a command with 'imag <command> <args>'
Each command can be called with "--help" to get the respective helptext.
Please visit https://github.com/matthiasbeyer/imag to view the source code,
Please visit https://git.imag-pim.org/imag to view the source code,
follow the development of imag or maybe even contribute to imag.
imag is free software. It is released under the terms of LGPLv2.1

View file

@ -48,7 +48,7 @@ fn main() {
let version = make_imag_version!();
let rt = generate_runtime_setup("imag-wiki",
&version,
"Personal wiki",
"Manage a personal Wiki",
build_ui);
let wiki_name = rt.cli().value_of("wikiname").unwrap_or("default");

View file

@ -174,28 +174,35 @@ impl Log for ImagLogger {
self.module_settings
.get(record_target)
.map(|module_setting| {
// We have a module setting some
// * Check whether logging is enabled for this module and
// * check whether the module logging level is >= or, if there is no module logging
// level,
// * check whether the global logging level is >= the record level.
let set = module_setting.enabled &&
module_setting.level.unwrap_or(self.global_loglevel) >= record.level();
if set {
if set { // if we want to log from a setting standpoint
// get the destinations for the module and log to all of them
module_setting.destinations.as_ref().map(|destinations| for d in destinations {
// If there's an error, we cannot do anything, can we?
let _ = log_to_destination(&d);
let _ = log_to_destination(&d); // ignore errors, because what else?
});
// after that, log to the global destinations as well
for d in self.global_destinations.iter() {
// If there's an error, we cannot do anything, can we?
let _ = log_to_destination(&d);
let _ = log_to_destination(&d); // ignore errors, because what else?
}
}
})
// if we do not have a setting for the record target
.unwrap_or_else(|| {
if self.global_loglevel >= record.level() {
// Yes, we log
for d in self.global_destinations.iter() {
// If there's an error, we cannot do anything, can we?
let _ = log_to_destination(&d);
}
if self.global_loglevel >= record.level() { // if logging is enabled for that level
self.global_destinations
.iter()
.for_each(|d| { // log to all global destinations
let _ = log_to_destination(&d); // ignore errors, because what else?
});
}
});
}
@ -287,14 +294,14 @@ fn translate_destinations(raw: &Vec<Value>) -> Result<Vec<LogDestination>> {
fn aggregate_global_destinations(matches: &ArgMatches, config: Option<&Value>)
-> Result<Vec<LogDestination>>
{
let config_log_dest_path = "imag.logging.destinations";
match config {
Some(cfg) => cfg
.read("imag.logging.destinations")?
.read(&config_log_dest_path)?
.ok_or_else(|| RE::from_kind(EK::GlobalDestinationConfigMissing))?
.as_array()
.ok_or_else(|| {
let path = "imag.logging.destinations".to_owned();
let path = config_log_dest_path.to_owned();
let ty = "Array";
RE::from_kind(EK::ConfigTypeError(path, ty))
})

View file

@ -128,6 +128,18 @@ impl StoreId {
.ok_or_else(|| SE::from_kind(SEK::StoreIdHandlingError))
}
/// Helper function for creating a displayable String from StoreId
///
/// This is safe because the
///
/// impl<T: fmt::Display + ?Sized> ToString for T
///
/// does only fail if Display::display() failed. The implementation of ::std::path::Display and
/// the implementation ::std::fmt::Display for ::std::path::Display do not return errors though.
pub fn local_display_string(&self) -> String {
self.local().display().to_string()
}
/// Returns the components of the `id` part of the StoreId object.
///
/// Can be used to check whether a StoreId points to an entry in a specific collection of

View file

@ -2,11 +2,22 @@
# Find all imag commands which changed since last install
imag versions |\
imag versions 2>&1 | \
grep "imag-" | \
sed 's,v.*-g,,' |\
sed 's,\ *->.*\ , ,' | \
while read binary hash; do
git diff "$hash..master" --name-only | \
if [[ "$hash" =~ v.*\..*\..*- ]]; then
hash="$(echo "$hash" | sed 's,.*-g,,')"
fi
log="$(git diff --name-only ${hash}..master 2>/dev/null)"
if [[ $? -eq 0 ]]; then
echo "$log" | \
grep "$binary" >/dev/null 2>/dev/null && \
echo "$binary changed since last install (was $hash)"
echo -e "changed since last install ($hash): $binary"
else
echo "WARN: Could not check $binary because git hash '$hash' is not present"
fi
done