summaryrefslogtreecommitdiffstats
path: root/content/blog/2018-11-10-imag-0-9-0.md
blob: a731c304b69d2af181faf935e666e9f603ca66d3 (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
---
title: "imag 0.9.0"
slug: "imag-0-9-0"
date: "2018-11-10T11:10:09"
tags: [ "linux", "open source", "programming", "rust", "software", "tools", "imag" ]
---

<!-- more -->

# What's in there

* 297 commits
* 39 merge-commits / 258 non-merge commits
* 306 files changed
* 4845 insertions(+), 5334 deletions(-)

Some more statistics about the codebase (thank you,
[tokei](https://github.com/Aaronepower/tokei)), because why not:

```
-------------------------------------------------------------------------------
 Language            Files        Lines         Code     Comments       Blanks
-------------------------------------------------------------------------------
 BASH                    8          151           96           17           38
 CSS                     1           27           24            0            3
 Makefile                1          161           97           29           35
 Markdown               99         4814         4814            0            0
 Nix                     2           98           66           11           21
 Rust                  258        33292        21849         6320         5123
 Shell                  14          519          280          157           82
 TOML                   60         3134         2104          422          608
-------------------------------------------------------------------------------
 Total                 443        42196        29330         6956         5910
-------------------------------------------------------------------------------
```


# What changed

This release is rather small in number of changes, but rather big in impact of
changes and complexity of the introduced changes.
For a complete list of changes, have a look at the
[CHANGELOG file in the repository](http://git.imag-pim.org/imag/tree/doc/src/09020-changelog.md).

* The filesystem backend was optimized so that imag does not keep the handles
  to the opened files, but reads the files in one go and then drops the
  filedescriptors. This way it is possible to read a large number of files
  with imag without running into filedescriptor limits.
* The `Store::entries()` function interface was changed and now gives you an
  iterator which can be optimized to iterate only over subsets of imag
  entries. This speeds up several operations.
* imag now uses a uniform IO system where the runtime library automatically
  detects pipes and handels them accordingly to our standard behaviour. With
  this, command-chaining (piping like with normal shell commands) is possible,
  because if imag detects a pipe in the output, it automatically reports
  "touched" store entries. For example, `imag ids | cat` automatically prints
  the output of `imag ids` on stderr and the "touched entries" to the pipe.
  These can then be re-used, for example for another imag command or for
  something else.
  Example: Tagging some entries, by interactively selecting them with `fzf`:
  `imag ids | fzf -m | imag tag add "foobar"`.
* imag now uses `failure` for error handling.
* imag-diagnostics got a progress bar.

Of course there were also a large number of fixes, updates of dependencies and
other patches.
For a even more detailed list, see the
[git history](https://git.imag-pim.org/imag/).


# What's coming

Lets have a look into the future, what will happen until the next release?


## Workflow changes

As we moved away from github, the workflow will now change a bit.

1. The most important bit: This is only _my_ workflow, things do not change
   for contributors!
1. First of all, minor patches and fixups will not be merged
   "non-fast-forward" anymore. I will push "minor" changes to branches on
   github (usually the "minor" branch or some "fix-*" branch) to CI-test them,
   but if they succeed, I will fast-forward merge them into master from now on.
   This only applies to patches where _one_ patch is the whole change and does
   not relate to other patches. So feature branches and multi-patch changes
   will still be merged with `--no-ff`.
1. We tried to use `git notes` for keeping the changelog. Unfortunately, it
   proofed too clumsy. From 0.9.0 onwards, we will keep the changelog via the
   merge commit message, so the changelog will be gernerated using a new
   script which does: List there major changes with
   `git log --merges --first-parent <latest-release>..master` and the minor
   changes and fixes with
   `git log --no-merges --first-parent <latest-release>..master`.


## What will be in imag 0.10.0

imag 0.10.0 will be a tooling release. `imag-calendar` and `imag-mail` will be
written and added in imag 0.10.0. `libimagentryref` has to be reimplemented
for that, which makes it another requirement for the release. But that's it -
I'm trying to keep the 0.10.0 release small. Maybe I opt to release it with
only one of the tools (`imag-calendar`/`imag-mail`), depending on how fast
we get there.

**When** will that be? Well, as I'm back on the road (traveling) until
mid-february 2019, the release won't be this year. It will definitively be
next year, ... when it is ready! :-)