summaryrefslogtreecommitdiffstats
path: root/content/blog/2017-12-12-imag-0-5-0.md
blob: b34a5461396f3e9731cec2327c92818aa0ac2f52 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
---
title: "imag 0.5.0"
slug: "imag-0-5-0"
date: "2017-12-24T13:22:06"
tags: [ "linux", " open source", " programming", " rust", " software", " tools", " imag" ]
---

<!-- more -->

**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](https://github.com/Aaronepower/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/release.sh` 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](https://github.com/matthiasbeyer/imag/milestone/6)
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.

# Changelog

Finally, here again the changelog. You can also find it
[in the repository](http://git.imag-pim.org/imag/tree/doc/src/09020-changelog.md).

* 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.