email rss
imag 0.5.0
Dec 24, 2017
4 minutes read

First of all (same as with the 0.4.0 release): This is not production-ready software. Use at your own risk! This is a release for people to notice that some things work and one could start to play around with it. Do not trust imag with your personal data if you do not have backups. There are bugs. This is not perfect. This is alpha quality or pre-alpha quality software!

What’s in there

In this release, which is fairly not that big (which is good), we had

  • 227 commits
  • 51 merge-commits / 176 non-merge commits
  • 2 contributors
  • 186 files changed
  • 6707 insertions(+) / 3255 deletions(-)

Some more statistics about the codebase (thank you, tokei), because why not:

 Language            Files        Lines         Code     Comments       Blanks
 CSS                     1           27           24            0            3
 Makefile                1          161           97           29           35
 Markdown              133         3332         3332            0            0
 Nix                     2           98           77            0           21
 Rust                  262        30367        19298         6253         4816
 Shell                   8          241          143           57           41
 TOML                   50         2112         1447          272          393
 Total                 457        36338        24418         6611         5309

The Markdown files are the documentation, which is good. TOML is our configuration file, the Cargo.toml file and also some test files which are included in the codebase. The Makefile as well as the CSS files are from the documentation as well.

All in all, we have a code/comment ratio of 12.55 / 1 (we have to subtract 18 lines of LGPL header for each file, so 6253 - (262 * 18) = 1537) - which means we have 1 line of comment for 12.55 lines of code. That’s not too bad, though we could do much better.

New things, shiny things

In this release, we had quite a number of new crates - also commandline tools! But lets start with the library crates (for the full changelog, have a look at the bottom of this post).

First of all, we got libimagnotification for doing some nice inotify-send when errors occour. It is not yet integrated into the CLI tools, but I guess it will be in the next release. Configuration via imagrc.toml included, of course. We also got libimaghabit which contains the logic for imag-habit, which was introduced in this release.

We also got imag-mv, imag-annotate and imag-diagnostics as new “core” crates. imag-store is now able to simply dump all store ids. That’s nice for scripting.

We got imag-contact and imag-habit introduced in this release as “domain” crates.

The CLI of imag-link was redesigned and is much nicer now.

The release process

For the release process, I added a scripts/ file in the repository. Unfortunately, I ran into [a bug] in cargo which caused some crates to fail in the compile process (only when releasing them). After building cargo 0.18 from source, I was able to release my crates.

This is really unfortunate and I hope that this bug will be fixed in future cargo releases.

Also, because nobody is perfect, I accidentially released libimagnotification in 0.4.0 rather than in 0.5.0 (libimagnotificaion is a new crate). I yanked the crate afterwards, but that really shows that we should harden our release process.

What’s coming

The 0.6.0 milestone already exists and there are a lot of things already added to it.

When will I be there? The next version will be there if its ready. Honestly I don’t know. We have a lot of things to tackle and this is growing to be a really huge project, especially for a one-man-show, which it almost is, still.


Finally, here again the changelog. You can also find it in the repository.

  • Major changes

    • imag-counter and libimagcounter was removed.
    • imag-mv was introduced
    • imag-view uses positional args now
    • imag-view uses the configuration file now to find the command to call for viewing the entry. This way one can view the entry in an editor or the browser or on the toaster.
    • The logger is now able to handle multiple destinations (file and “-” for stderr)
    • imag-store can dump all storeids now
    • imag-annotate was introduced
    • imag-diagnostics was added
    • The runtime does not read the config file for editor settings anymore. Specifying an editor either via CLI or via the $EDITOR environment variable still possible.
    • imag-contact was added (with basic contact support so far).
    • imag-habit was introduced
    • imag-link commandline was redesigned to be easier but with the same features.
  • Minor changes

    • libimagentryannotation got a rewrite, is not based on libimagnotes anymore. This is minor because libimagentryanntation is not yet used by any other crate.
    • imag now reads the IMAG_RTP environment variable before trying to access $HOME/.imag for its runtimepath.
    • libimagnotification was introduced, though not yet integrated into the CLI tools
  • Bugfixes

    • Store::entries() does not yield StoreIds which point to directories anymore, only StoreIds pointing to files.

Back to posts