What's coming up in imag (10)
imag has made little progress in the last 14 days, as I'm really focusing on my bachelors thesis and exams right now. Anyways, I got some neat things done. Read here what happened in the last 14 days.
The past
Yes, my thesis is my main focus right now. This does not mean that imag is stalled, indeed I got four merges done in the last 14 days, and some more are waiting.
Developers Certificate of Origin
I added a Developers Certificate of Origin in a pull request. This means, that all developers/contributors of imag agree to the terms listed in this certificate.
Within this pull request I also added some notes how to contribute to imag
without having a github account. People are welcome to send me patches for
imag via mail! They just have to acknowledge that I will integrate them by
opening a PR on github myself. Also, they have to add a "Signed-off-by:" tag
in their commit messages, I will not include patches send by mail without this
line.
I think that shouldn't be an issue.
Result::map_err_into()
This was the second pull request. It was followed by two pull requests which moved the codebase to use the feature from this PR.
What it implements: An additional method for the Result type, so one can use
the Result::map_err_into() method now to minify error handling code in a
sane way.
Before this pull request, one had to write the following code over and over again, to wrap an error type into the module-specific error type:
some_operation_that_might_fail()
.map_err(Box::new)
.map_err(|e| ModuleError::new(ModuleErrorKind::FailingOperation, Some(e)))
This quickly became rather ugly. With the new feature applied, we can write this now in a really short and neat way. The following is equal to the code snippet above:
some_operation_that_might_fail()
.map_err_into(ModuleErrorKind::FailingOperation)
With the map_err_into() method doing the heavy lifting of packing the error
into a new Box and creating an error instance with the passed error kind.
As this was implemented in the libimagerror code generator macro, this is
available for all crates which use the libimagerror macro
generate_error_types automatically.
The PRs that followed that improvement removed a lot of boilerplate code:
4 files changed, 63 insertions(+), 113 deletions(-)
The Future
Lets see what's in the pipeline. Most of the following things are “I want to do this” things, and I won't be able to do them that soon, as the exams are coming up. I really hope I can get some progress, still.
References
The libimagref library is in progress. This library will enable the user to
reference files outside of the store.
The imag-ref binary crate will be a frontend to use this library.
This is in progress and I'm really looking forward to it.
I will use the libimagref library to write a wiki module with vimwiki as
backend, after this gets merged.
store hooks: git
I want to continue to work on the git hook layer, so we finally have a version control system in the store.
Filter language
Another thing I really want to do is to implement the filter language
frontend, so one can use libimagentryfilter to implement a filter right on
the commandline.
The best option would be to add two/multiple frontends for this:
so one can select one of these languages by commandline and then filter entries.
That would be a really huge amount of work, but it would be fun, really.
LGPL checker
Another thing what I want to do is to add the LGPL header in each source file. The point is: I want to check this via the travis CI setup, so travis checks whether all files contain the LGPL header. That is possible, I did not yet figure out how to do it properly, though.
tags: #linux #open source #programming #rust #software #tools #imag