Commit Graph

255 Commits

Author SHA1 Message Date
Matthias Beyer d70092d691 Remove: Store::retrieve_for_module 2018-04-24 13:40:42 +02:00
Matthias Beyer 19940d3e1c Set version string by hand here if we do not build with cargo 2018-04-22 13:38:24 +02:00
Matthias Beyer 8262de29fe Update dependency: log: 0.4.0-rc.1 -> 0.4 2018-04-20 20:19:02 +02:00
Matthias Beyer 808689cc05 Suggest imag-init if no config is found 2018-04-19 10:57:13 +02:00
Matthias Beyer d2dceb6640 Update version numbers: 0.7.0 -> 0.8.0 2018-04-19 10:05:53 +02:00
Matthias Beyer 38726c5906 Always use stdout via output proxy
The switching between stdout and stderr on an automated basis caused
errors in the using code, where output was redirected but shouldn't.
2018-04-18 17:58:07 +02:00
Matthias Beyer 542c7e7101 Make stdin always available
Because we do not implement the store piping and pipe magic, the stdin
stream should always be available.
2018-04-18 17:42:04 +02:00
Matthias Beyer 4568b1f625
Merge pull request #1380 from matthiasbeyer/minor
Minor patches
2018-04-18 16:46:41 +02:00
Matthias Beyer 88b57910df
Merge pull request #1403 from matthiasbeyer/remove-pipe-magic
Revert "Implement pipe magic in libimagrt"
2018-04-17 17:39:54 +02:00
Matthias Beyer 98f8366e4c Fix documentation in crate metadata 2018-04-17 15:55:08 +02:00
Matthias Beyer d7cfab797f Revert "Implement pipe magic in libimagrt"
This reverts commit ce0bd9298a.

Pipe magic is removed with this patch.

We remove pipe magic because its implementation in libimagstore is too
complicated and the benefits are too small.
Having this functionality would be really nice, but the cost-benefit
ratio would still be too high.
The implementation in the store would require a rewrite of the internal
caching functionality in the store, plus some functionality to serialize
and deserialize the cache. This is theoretically possible, but as the
store only knows about "StoreEntry" objects, and only the backend knows
of "Entry" (which would be simply de/serializeable), the complexity
increases a _lot_.

Hence, we drop this feature-idea here.

Maybe, at some later point, this functionality will be in imag. The
history of development of this feature is in the history, we just don't
have it merged.

Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2018-04-16 13:30:59 +02:00
Matthias Beyer 0f19b7e4b2 Use --verbose with "info" level by default 2018-04-15 08:38:11 +02:00
Matthias Beyer c0607ba2e2 Fix log level setting in runtime
Do not immediately set log level to Level::Info if argument is present,
but check value, too.
2018-04-14 21:27:16 +02:00
Matthias Beyer 604f350340 Add logging in store 2018-04-14 16:55:36 +02:00
Matthias Beyer fb4917d050 Remove feature to generate commandline completion scripts 2018-04-14 14:35:28 +02:00
Matthias Beyer aeec10bf76 Use clap with wrap_help feature 2018-04-13 16:19:10 +02:00
Matthias Beyer b59c234588 Use clap "^2.29" instead of ">=2.29" 2018-04-13 16:17:43 +02:00
Matthias Beyer c27dc79afe
Merge pull request #1383 from matthiasbeyer/libimagrt/handler-exit-if-subcommand-not-found
libimagrt: Exit if handler does not find subcommand
2018-04-08 22:21:19 +02:00
Matthias Beyer 16a76f6213 Exit if handler does not find subcommand 2018-04-08 20:38:46 +02:00
Matthias Beyer c5c9c7b9ba Fix: Editor commands should be split at whitespace
This fixes the following problem:

If the editor setting was "vim " instead of "vim", the editor was called
with `"vim" " "`, which resulted in unexpected behaviour.

The patch fixes this.
2018-04-08 20:28:11 +02:00
Matthias Beyer a769186cd7 Make iterator lifetimes less restricting 2018-04-07 13:55:54 +02:00
Matthias Beyer 93195b3bad Default clap app builder: Allow external subcommands 2018-04-04 19:34:13 +02:00
Matthias Beyer cb8b5a0cf6 Add helper for handling unknown subcommands 2018-04-03 18:23:01 +02:00
Matthias Beyer e61ccc9561 Fix: Entry::to_str() should return Result<_>
Because serializing might fail.

Also fixes all usages of the API.
2018-03-26 14:24:42 +02:00
Matthias Beyer ea38f2ffbf Fix: Pass /dev/tty as stdin for editor
This fixes the issue that spawning the editor trashes the terminal.

The signature of the Runtime::editor() function changed, which has to be
fixed in using code.
2018-03-23 23:55:06 +01:00
Matthias Beyer 9e0d0d9f6c Add Entry::replace_from_buffer() 2018-03-23 15:44:34 +01:00
Matthias Beyer 7e623f39b8 Add message why panic
So we see that when grepping the source for `unimplemented!()`.
2018-03-23 10:05:58 +01:00
Matthias Beyer 41f7bab1c5 Fix: Store::create() should fail if the entry exists 2018-03-22 21:16:11 +01:00
Matthias Beyer a23afa7772 Ensure command and args are provided correctly 2018-03-13 08:32:40 +01:00
Matthias Beyer b8c3f7f834 Read editor from configuration, ignore errors 2018-03-13 08:32:40 +01:00
Matthias Beyer 43a3f4a5db Fix editor command
do inherit stdin and stderr from parent process, to not break terminal
editors when editing stuff.

vim printed "Input not from terminal" warning messages. This was fixed
by this commit.
2018-03-12 20:08:10 +01:00
Matthias Beyer 68ace5d147 Fix typo 2018-03-12 13:32:23 +01:00
Matthias Beyer d3b38b5a90
Merge pull request #1330 from matthiasbeyer/libimagrt/pipe-magic
Implement pipe magic in libimagrt
2018-03-10 16:20:36 +01:00
Matthias Beyer ce0bd9298a Implement pipe magic in libimagrt
When we merged the changes in libimagrt so that it automatically detects
whether stdin/stdout is a TTY and provides the user with stderr in case
stdout is not a TTY, we forgot that things like

    imag foo | grep bar

becomes impossible with that, because imag detects that stdout is not a
tty and automatically uses stderr for output.

But in this case, we don't want that. The output has to be stdout in
this case.

With this change, we have a flag in the runtime ("--pipe-magic" or "-P",
globally available) which turns on "pipe magic".

The expected behaviour is the following, if "-P" is passed:

* If stdout is a TTY, we print to stdout
* If stdout is not a TTY, we print to stderr
* If stdin is not a TTY, we do not provide it

If "-P" is not passed, we allow the user of libimagrt to use stdin for
interactive stuff (the interactive stuff is not yet implemented).

Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2018-03-10 15:43:44 +01:00
Matthias Beyer da408b9e67 This fixes the file parsing (again)
Unfortunately, our latest fix to file parsing did not solve all issues.
So we have to fix it _again_.

The problem was the `std::str::Lines` iterator, which apparently fails
this:

    assert_eq!(1, "".lines().count());

as an empty line seems not to be a line.

Because of that, when reading a file with an empty line at its bottom
got stripped off that line.

This patch removes the use of the `lines()` iterator and uses
`split("\n")` instead. This only works on Unix operating systems, but as
we only target unix operating systems with imag, this is not considered
an issue right now.

This patch also adds extensive tests on multiple levels in the
`libimagstore` implementation:

* On the parsing level, for the function which implements the parsing
* On the filesystem abstraction levels
* On the `Store` levels

to make sure that everything is parsed correctly.
2018-03-10 14:53:15 +01:00
Matthias Beyer 579c00b62a Replace hard coded version strings with compiletime env 2018-03-06 12:45:41 +01:00
Matthias Beyer 3cb7372b67 Provide LockedOutputProxy which holds locked variants of Stdout/Stderr 2018-03-04 15:42:00 +01:00
Matthias Beyer 0b593d6635 Let the OutputProxy hold Stdout/Stderr objects, so we do not have to aquire them each write!() 2018-03-04 15:41:32 +01:00
Matthias Beyer 19e9dfe33c Implement proxy object where runtime configures output
This is another approach for providing access to stdin/out/err via
libimagrt::runtime::Runtime.

The Runtime object does configure which output gets returned (stdout if
stdout is a tty, else stderr).

With this we can change libimagrt to read/write the store from/to
stdin/stdout without the user noticing that she does not write to stdout
but stderr.
Reading from stdin is not possible then, though.
2018-03-04 13:57:44 +01:00
Matthias Beyer c18c0bbbe4 Provide stdin/out/err resources via Runtime object
This way we can control whether "out" output goes to stdout or stderr
without the user of the functionality knowing.

This is useful for later when we use libimagrt to automatically
read and write the store from and to stdout/in depending on whether we
are talking to a TTY or a pipe.
2018-03-04 13:57:02 +01:00
Matthias Beyer c9af23f663
Merge pull request #1314 from matthiasbeyer/imag/do-not-instantiate-runtime
Change "imag" impl to not instantiate Runtime object
2018-03-02 23:28:10 +01:00
Matthias Beyer ee5a17790f Fix multi-line reading
Reading entries with multiple entries caused all lines to be read as one
line.

This bug is fixed with this patch.
2018-03-02 21:48:17 +01:00
Matthias Beyer 87d6f1221f Add testcase for reading multiple lines 2018-03-02 21:48:13 +01:00
Matthias Beyer 78fe9b8cc5 Change "imag" impl to not instantiate Runtime object
Adapt libimagrt interface to export the functions we need to do this.
This is not that nice, but the best approach without rewriting large
parts of libimagrt.
2018-02-26 22:10:23 +01:00
Matthias Beyer 1521005e79
Merge pull request #1307 from matthiasbeyer/libimagstore/entry-parse-fix
Rewrite entry parsing algorithm
2018-02-20 22:03:00 +01:00
Matthias Beyer 9fb5f453fe Rewrite entry parsing algorithm
Rewrite without regex crate.

The regex approach was broken. If the following _content_ was provided
in the entry:

    foo

    ---

    bar

The regex approach parsed the header until the "---" in the content.
This is, of course, not the way to do that.

Now, the parsing is implemented by hand. Should be faster as well,
though I don't care about this.

This fixes a severe bug.
2018-02-20 21:06:36 +01:00
Matthias Beyer 732fc32b75 Fix trace count space width
Was five here, but should be four.
2018-02-20 20:24:27 +01:00
Matthias Beyer 00b86709b6 Use writeln!() instead of write!() 2018-02-20 19:24:34 +01:00
Matthias Beyer 7653a040da
Merge pull request #1294 from matthiasbeyer/libimagstore/store-debug-fix
Simplify Store debug impl
2018-02-19 12:27:37 +01:00
Matthias Beyer 5f99018807 Simplify store debug print 2018-02-19 11:51:21 +01:00
Matthias Beyer c2dfb2ef52 Refactor timetrack subcommands output for broken pipe errors 2018-02-19 11:14:18 +01:00
Matthias Beyer 6a341d3723 Abstract exit code as a type 2018-02-19 11:14:18 +01:00
Matthias Beyer 256bc47222 Refactor into two independent extensions 2018-02-19 10:40:26 +01:00
Matthias Beyer 39107c5296 Add result extension for translating io errors to exit codes 2018-02-19 10:40:26 +01:00
Matthias Beyer 841d3ffb60 Remove OnErr extension which is not used 2018-02-18 20:04:22 +01:00
Matthias Beyer 3341e3640c
Merge pull request #1224 from matthiasbeyer/git-version-in-version
Git version in version
2018-02-18 20:03:09 +01:00
Matthias Beyer 3bd8822f4f Use version string from git, if present 2018-02-13 11:53:51 +01:00
Matthias Beyer f5f4fbc397 Add buildscript and infrastructure to include git information in version 2018-02-13 11:38:34 +01:00
Matthias Beyer 5b07baddf8 Add error convenience extension 2018-02-12 21:22:39 +01:00
Matthias Beyer 074f9826fd Implement own displaying implementation for the chain 2018-02-12 21:19:48 +01:00
Matthias Beyer 503b042690 Adapt libimagrt to new error handling 2018-02-12 21:19:47 +01:00
Matthias Beyer 6dd24f3da3 Keep trace_error{,_dbg} for backwards compatibility 2018-02-12 21:19:47 +01:00
Matthias Beyer e481dbfd12 Rewrite libimagerror to be thin layer over error-chain 2018-02-12 21:19:47 +01:00
Matthias Beyer 9e3c966d84
Merge pull request #1273 from matthiasbeyer/update-version-numbers
Update version string: 0.6.0 -> 0.7.0
2018-02-11 17:50:52 +01:00
Matthias Beyer 2e4c29dd07
Merge pull request #1277 from matthiasbeyer/libimagstore/store-debug-output-prettify
Prettify Store debug output implementation
2018-02-11 15:19:13 +01:00
Matthias Beyer 30d2c28a22 Update version string: 0.6.0 -> 0.7.0 2018-02-11 14:22:24 +01:00
Matthias Beyer 8fcd2a6c8c Prettify Store debug output implementation 2018-02-11 13:36:37 +01:00
Matthias Beyer fa8af0c053
Merge pull request #1275 from matthiasbeyer/clap-features
Clap features
2018-02-11 13:29:17 +01:00
Matthias Beyer 863b52c2f0 Add TraceIterator::trace_unwrap_exit()
* Exits on the first Err(_)
* Introduces new Iterator type for iterating with unwrap and exit on
  error
2018-02-10 16:41:06 +01:00
Matthias Beyer 8656a38c50 Update dependency: clap: 2.17 -> 2.29 2018-02-10 16:40:34 +01:00
Matthias Beyer 9d2900a7dc Compile clap with suggestions and color support 2018-02-10 16:40:34 +01:00
Matthias Beyer d5a9e4930d Update dates in license header
And add missing header in one file
2018-02-07 02:48:53 +01:00
Matthias Beyer de613c9ebd
Merge pull request #1227 from matthiasbeyer/libimagentryutil/filtered-iterators
libimagentryutil: filtered iterators
2018-02-01 20:22:12 +01:00
Matthias Beyer 06cb8d50fb Make StoreId::is_in_collection() generic over AsRef<str> 2018-02-01 16:46:57 +01:00
Matthias Beyer b3f546129a Add StoreIdIteratorWithStore::without_store() 2018-02-01 16:46:38 +01:00
Matthias Beyer 8e931cd79f Change calls to into_get_iter() to not take argument 2018-02-01 16:46:38 +01:00
Matthias Beyer 3b01a9eb2f Add API in StoreIdIteratorWithStore to get acting iterators
This patch adds API functions in the StoreIdIteratorWithStore iterator
type to transform it into a iterator which _does_ something (as in the
`libimagstore::iter` API).

It mimics the API which is offered by `libimagstore::iter`.
2018-02-01 15:47:39 +01:00
Matthias Beyer 030e32e44f Provide StoreId Iterator which has a ref to the Store
This change is needed so we can refactor the "get" iterator to not take
an argument (the store) later, which improves the API.
2018-02-01 15:47:39 +01:00
Matthias Beyer 164b6b7f10 Move documentation to appropriate place 2018-01-29 09:38:32 +01:00
Matthias Beyer 7731b88c97 Remove map_err_trace_exit() calls in favour of map_err_trace_exit_unwrap() 2018-01-29 09:38:32 +01:00
Matthias Beyer fcfc397fc8 env_logger: 0.5.0-rc.2 -> 0.5 2018-01-18 14:15:40 +01:00
Matthias Beyer 8d9c7dce4f env_logger: 0.5.0-rc.1 -> 0.5.0-rc.2 2018-01-15 11:22:09 +01:00
Matthias Beyer 635d000344 log: 0.4.0-rc.1 -> 0.4.0 2018-01-15 11:21:52 +01:00
Matthias Beyer c45130ddd0 env_logger: 0.4.* -> 0.5.0-rc.1 2018-01-15 11:20:27 +01:00
Matthias Beyer 0aba7d2939 Adapt libimagrt for new log setup 2018-01-15 11:20:07 +01:00
Matthias Beyer f209e12410 Update dependency: log: 0.3.* -> 0.4.0-rc.1 2018-01-15 11:20:07 +01:00
Matthias Beyer 3ef5fcfab6 libimagstore: Replace read with typed read 2018-01-13 01:14:03 +01:00
Matthias Beyer febecd85e5 libimagrt: Replace read with typed read 2018-01-13 01:14:03 +01:00
Matthias Beyer 0c4be78223 Update dependency: toml-query -> 0.6 2018-01-13 01:14:03 +01:00
Matthias Beyer bfc35e0517 Remove dependency "version"
Because the "version" crate is licensed as GPL, which would us require
to release imag as GPL, we remove the crate now.
2018-01-12 13:33:40 +01:00
Matthias Beyer 689310edfe Rename `Store::retrieve_copy` to `Store::get_copy`
The function was named falsely and nobody noticed. So nobody uses this
function yet - hopefully - as this change is a breaking API change.
2018-01-08 15:16:41 +01:00
Matthias Beyer d5ce99b170 Refactor toml destructure matching.
Use accessor functionality and function chaining now.
2018-01-05 11:37:09 +01:00
Matthias Beyer 4184a1e5d0 Replace matching with function chaining 2018-01-05 11:37:09 +01:00
Matthias Beyer fa8ac03701 Replace matching with function chaining 2018-01-05 11:37:09 +01:00
Matthias Beyer 7d1d41884c Replace matching with function chaining 2018-01-05 11:37:09 +01:00
Matthias Beyer 529f3f83da
Merge pull request #1187 from matthiasbeyer/libimagerror/display-fix
Improve error output
2018-01-01 20:47:24 +01:00
Matthias Beyer 774933ae4a
Merge pull request #1163 from matthiasbeyer/libimagstore/mighty-iters
libimagstore: More powerful iterator extensions
2017-12-25 22:02:56 +01:00
Matthias Beyer 9890371652
Merge pull request #1185 from matthiasbeyer/bump-version-strings
Update version strings: 0.5.0 -> 0.6.0
2017-12-25 21:06:14 +01:00
Matthias Beyer 0ae7b6b387 Do not call description() when displaying the error 2017-12-25 19:44:29 +01:00
Matthias Beyer 46a8d373b3 Allow dead code in whole module 2017-12-25 19:23:41 +01:00