Recent changes to this wiki:

Added a comment: make install
diff --git a/doc/todo/Porting_to_LEDE___40__OpenWRT__41___opkg/comment_2_8524d920029e401175ab6d2fe1362cc5._comment b/doc/todo/Porting_to_LEDE___40__OpenWRT__41___opkg/comment_2_8524d920029e401175ab6d2fe1362cc5._comment
new file mode 100644
index 0000000..21aa24a
--- /dev/null
+++ b/doc/todo/Porting_to_LEDE___40__OpenWRT__41___opkg/comment_2_8524d920029e401175ab6d2fe1362cc5._comment
@@ -0,0 +1,37 @@
+[[!comment format=mdwn
+ username="http://roschacker.id.mail.ru/"
+ subject="make install"
+ date="2017-07-15T13:52:11Z"
+ content="""
+root@LEDE:~/etckeeper.branchable.com# make
+sed -i~ \"s/Version:.*/Version: $(perl -e '$_=<>;m/\((.*?)(-.*)?\)/;print $1;'<debian/changelog)/\" etckeeper.spec
+/bin/sh: perl: not found
+rm -f etckeeper.spec~
+sed -i~ \"s/Version:.*/Version: $(perl -e '$_=<>;m/\((.*?)(-.*)?\)/;print $1;' <debian/changelog)\\"/\" etckeeper
+/bin/sh: perl: not found
+rm -f etckeeper~
+python ./etckeeper-bzr/__init__.py build || echo \"** bzr support not built\"
+Traceback (most recent call last):
+  File \"./etckeeper-bzr/__init__.py\", line 6, in <module>
+    from bzrlib.errors import BzrError
+ImportError: No module named bzrlib.errors
+** bzr support not built
+python ./etckeeper-dnf/etckeeper.py build || echo \"** DNF support not built\"
+Traceback (most recent call last):
+  File \"./etckeeper-dnf/etckeeper.py\", line 10, in <module>
+    from dnfpluginscore import logger
+ImportError: No module named dnfpluginscore
+** DNF support not built
+root@LEDE:~/etckeeper.branchable.com#
+root@LEDE:~/etckeeper.branchable.com#
+root@LEDE:~/etckeeper.branchable.com# make install
+sed -i~ \"s/Version:.*/Version: $(perl -e '$_=<>;m/\((.*?)(-.*)?\)/;print $1;' <debian/changelog)\\"/\" etckeeper
+/bin/sh: perl: not found
+rm -f etckeeper~
+mkdir -p /etc/etckeeper/ /var/cache/etckeeper/
+cp -R *.d /etc/etckeeper/
+install  daily /etc/etckeeper/daily
+make: install: Command not found
+make: *** [Makefile:29: install] Error 127
+root@LEDE:~/etckeeper.branchable.com#
+"""]]

Added a comment: What dependencies we need?
diff --git a/doc/todo/Porting_to_LEDE___40__OpenWRT__41___opkg/comment_1_9131efb9888659f72a55fc732c87a566._comment b/doc/todo/Porting_to_LEDE___40__OpenWRT__41___opkg/comment_1_9131efb9888659f72a55fc732c87a566._comment
new file mode 100644
index 0000000..a88f4bf
--- /dev/null
+++ b/doc/todo/Porting_to_LEDE___40__OpenWRT__41___opkg/comment_1_9131efb9888659f72a55fc732c87a566._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://roschacker.id.mail.ru/"
+ subject="What dependencies we need?"
+ date="2017-07-15T13:09:41Z"
+ content="""
+python is NOT installed by default
+nither perl
+
+but git is present
+"""]]

diff --git a/doc/todo/Porting_to_LEDE___40__OpenWRT__41___opkg.mdwn b/doc/todo/Porting_to_LEDE___40__OpenWRT__41___opkg.mdwn
new file mode 100644
index 0000000..46d6f38
--- /dev/null
+++ b/doc/todo/Porting_to_LEDE___40__OpenWRT__41___opkg.mdwn
@@ -0,0 +1,5 @@
+Hello
+
+What we need to do (to code)
+for working etckeeper under LEDE/OpenWRT?
+

Added a comment: comment 3
diff --git a/doc/todo/Truly-quiet_when_there__39__s_nothing_to_commit/comment_3_d88dfbf82994d484a50a8fb751fc4c83._comment b/doc/todo/Truly-quiet_when_there__39__s_nothing_to_commit/comment_3_d88dfbf82994d484a50a8fb751fc4c83._comment
new file mode 100644
index 0000000..c6494db
--- /dev/null
+++ b/doc/todo/Truly-quiet_when_there__39__s_nothing_to_commit/comment_3_d88dfbf82994d484a50a8fb751fc4c83._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="truist"
+ avatar="http://cdn.libravatar.org/avatar/cbb99b0a9724faf8fc7f4464b7bfab11"
+ subject="comment 3"
+ date="2017-06-29T16:30:56Z"
+ content="""
+I see why I used `--cached` - because `30git-add` runs before this script, so the files to be added are always already cached by the time this script runs. Doing the diff without `--cached` wouldn't work.
+
+However, your solution is still better, in case users have customized the scripts. 
+"""]]

Added a comment: comment 2
diff --git a/doc/todo/Truly-quiet_when_there__39__s_nothing_to_commit/comment_2_21482b7d984aabd310c09539f1dc8f0b._comment b/doc/todo/Truly-quiet_when_there__39__s_nothing_to_commit/comment_2_21482b7d984aabd310c09539f1dc8f0b._comment
new file mode 100644
index 0000000..6ac374b
--- /dev/null
+++ b/doc/todo/Truly-quiet_when_there__39__s_nothing_to_commit/comment_2_21482b7d984aabd310c09539f1dc8f0b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="truist"
+ avatar="http://cdn.libravatar.org/avatar/cbb99b0a9724faf8fc7f4464b7bfab11"
+ subject="comment 2"
+ date="2017-06-29T16:17:33Z"
+ content="""
+Wow - I'm not sure how I missed that behavior. Sorry about that. And yes, it sounds like `etckeeper unclean` is a much better option.
+"""]]

Added a comment: never added this patch
diff --git a/doc/todo/Fix_warnings_on_netbsd/comment_1_03217ebec4076aa066df755c99ba92fd._comment b/doc/todo/Fix_warnings_on_netbsd/comment_1_03217ebec4076aa066df755c99ba92fd._comment
new file mode 100644
index 0000000..25ce37e
--- /dev/null
+++ b/doc/todo/Fix_warnings_on_netbsd/comment_1_03217ebec4076aa066df755c99ba92fd._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="http://schmonz.livejournal.com/"
+ subject="never added this patch"
+ date="2017-06-28T17:43:39Z"
+ content="""
+pkgsrc had been on a really old version (1.3!) until mid-May, when Nathan sent me these patches. I brought us up to 1.18.5.1, saw that this patch was unneeded, and applied just [[the other one|Truly-quiet when there's nothing to commit]]. Hoping for a 1.18.7 distfile to appear (maybe [here](https://packages.debian.org/stretch/etckeeper)?) so I can keep pkgsrc at the latest.
+"""]]

close
diff --git a/doc/todo/Truly-quiet_when_there__39__s_nothing_to_commit.mdwn b/doc/todo/Truly-quiet_when_there__39__s_nothing_to_commit.mdwn
index d135afe..5732719 100644
--- a/doc/todo/Truly-quiet_when_there__39__s_nothing_to_commit.mdwn
+++ b/doc/todo/Truly-quiet_when_there__39__s_nothing_to_commit.mdwn
@@ -29,3 +29,6 @@ index 2a2176a..bcd02df 100755
 ~~~
 
 Thank you!
+
+> [[closed|done]] because `etckeeper unclean` is a better way to do this.
+> --[[Joey]]

comment
diff --git a/doc/todo/Truly-quiet_when_there__39__s_nothing_to_commit/comment_1_22aeb26fb522fb0806a2791970369080._comment b/doc/todo/Truly-quiet_when_there__39__s_nothing_to_commit/comment_1_22aeb26fb522fb0806a2791970369080._comment
new file mode 100644
index 0000000..610598d
--- /dev/null
+++ b/doc/todo/Truly-quiet_when_there__39__s_nothing_to_commit/comment_1_22aeb26fb522fb0806a2791970369080._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2017-06-28T16:33:30Z"
+ content="""
+That patch makes etckeeper only commit changes that have been 
+staged (eg added with `git add`). If a file has been changed,
+but not staged, `git diff --cached` will ignore the change,
+and it won't get committed. So the patch is broken.
+
+On debian, a daily cron job uses `etckeeper unclean` to determine if there
+are any changes in need of committing. That works with every VCS that
+etckeeper supports, and my suggestion is that netbsd use the same
+mechanism.
+"""]]
diff --git a/etckeeper.spec b/etckeeper.spec
index 3de5b98..880969b 100644
--- a/etckeeper.spec
+++ b/etckeeper.spec
@@ -1,5 +1,5 @@
 Name: etckeeper
-Version: 1.18.7
+Vaersion: 1.18.7
 Release: 4%{?dist}
 Summary: store /etc in git, mercurial, bzr or darcs
 

fixed long ago
diff --git a/doc/todo/Fix_warnings_on_netbsd.mdwn b/doc/todo/Fix_warnings_on_netbsd.mdwn
index f8e3796..1ed2b08 100644
--- a/doc/todo/Fix_warnings_on_netbsd.mdwn
+++ b/doc/todo/Fix_warnings_on_netbsd.mdwn
@@ -40,3 +40,8 @@ index f7c7580..f28d5ac 100755
 ~~~
 
 Thanks!
+
+> This change was already made to etckeeper back in 2014, there
+> is no "-not" in the etckeeper source code anywhere now.
+> I wonder why netbsd is apparently using such an out of date etckeeper.
+> Anyway, [[done]] --[[Joey]]

Describe patch for quieting commits when there's nothing to do
diff --git a/doc/todo/Truly-quiet_when_there__39__s_nothing_to_commit.mdwn b/doc/todo/Truly-quiet_when_there__39__s_nothing_to_commit.mdwn
new file mode 100644
index 0000000..d135afe
--- /dev/null
+++ b/doc/todo/Truly-quiet_when_there__39__s_nothing_to_commit.mdwn
@@ -0,0 +1,31 @@
+I use etckeeper from [pkgsrc](http://pkgsrc.se/sysutils/etckeeper) on NetBSD in a nightly cron job. My configuration for git includes `-q` but that isn't enough to fully silence it when there's nothing to commit, so I get an email from cron every night, even when there's nothing to commit. Amitai (schmonz) applied this patch to pkgsrc, and I thought you might like it upstream.
+
+Note that the patch will always skip attempting the commit, if there is nothing to commit, which is maybe not what you intended. But it's the only way to actually get silent nightlies. If you wanted to preserve backwards compatibility, it would be tricky, I think.
+
+There are also more-efficient ways to do this; the `diff` could be run right at the top of this script, and the rest of it skipped. But I wanted to be minimally-invasive, so I did it this way. 
+
+~~~
+diff --git a/etckeeper/commit.d/50vcs-commit b/etckeeper/commit.d/50vcs-commit
+index 2a2176a..bcd02df 100755
+--- a/etckeeper/commit.d/50vcs-commit
++++ b/etckeeper/commit.d/50vcs-commit
+@@ -87,10 +87,12 @@ if [ "$VCS" = git ] && [ -d .git ]; then
+                        export GIT_COMMITTER_EMAIL
+                fi
+        fi
+-       if [ -n "$logfile" ]; then
+-               git commit $GIT_COMMIT_OPTIONS -F "$logfile"
+-       else
+-               git commit $GIT_COMMIT_OPTIONS
++       if ! git diff --cached --quiet; then
++               if [ -n "$logfile" ]; then
++                       git commit $GIT_COMMIT_OPTIONS -F "$logfile"
++               else
++                       git commit $GIT_COMMIT_OPTIONS
++               fi
+        fi
+ elif [ "$VCS" = hg ] && [ -d .hg ]; then
+        if [ -n "$USER" ]; then
+~~~
+
+Thank you!

Describe patch to fix netbsd warnings
diff --git a/doc/todo/Fix_warnings_on_netbsd.mdwn b/doc/todo/Fix_warnings_on_netbsd.mdwn
new file mode 100644
index 0000000..f8e3796
--- /dev/null
+++ b/doc/todo/Fix_warnings_on_netbsd.mdwn
@@ -0,0 +1,42 @@
+I use etckeeper from [pkgsrc](http://pkgsrc.se/sysutils/etckeeper) on NetBSD with a nightly cron job, and it generates warnings each night:
+
+~~~
+dnsdomainname: not found
+find: -not: unknown option
+find: -not: unknown option
+[master e4e5623] Daily autocommit
+ 5 files changed, 90 deletions(-)
+...and so on...
+~~~
+
+I've traced the issue to not-quite-POSIX args to `find` in `pre-commit.d/20warn-problem-files`, made a patch, and Amitai (schmonz) has applied the patch to the pkgsrc version. I thought you might want to include it at the source:
+
+~~~
+diff --git a/etckeeper/pre-commit.d/20warn-problem-files b/etckeeper/pre-commit.d/20warn-problem-files
+index f7c7580..f28d5ac 100755
+--- a/etckeeper/pre-commit.d/20warn-problem-files
++++ b/etckeeper/pre-commit.d/20warn-problem-files
+@@ -6,14 +6,14 @@ exclude_internal () {
+ }
+ 
+ if [ "$VCS" = bzr ] || [ "$VCS" = darcs ]; then
+-       special=$(find . -not -type d -not -type f -not -type l | exclude_internal) || true
+-       hardlinks=$(find . -type f -not -links 1 | exclude_internal ) || true
++       special=$(find . ! -type d ! -type f ! -type l | exclude_internal) || true
++       hardlinks=$(find . -type f ! -links 1 | exclude_internal ) || true
+ elif [ "$VCS" = hg ]; then
+-       special=$(find . -not -type d -not -type f -not -type l | exclude_internal) || true
+-       hardlinks=$(find . -type f -not -links 1 -exec hg status {} \; | exclude_internal ) || true
++       special=$(find . ! -type d ! -type f ! -type l | exclude_internal) || true
++       hardlinks=$(find . -type f ! -links 1 -exec hg status {} \; | exclude_internal ) || true
+ elif [ "$VCS" = git ]; then
+-       special=$(find . -not -type d -not -type f -not -type l -exec git ls-files --exclude-standard --cached --others {} \; | exclude_internal) || true
+-       hardlinks=$(find . -type f -not -links 1 -exec git ls-files --exclude-standard --cached --others {} \; | exclude_internal) || true
++       special=$(find . ! -type d ! -type f ! -type l -exec git ls-files --exclude-standard --cached --others {} \; | exclude_internal) || true
++       hardlinks=$(find . -type f ! -links 1 -exec git ls-files --exclude-standard --cached --others {} \; | exclude_internal) || true
+ else
+        special=""
+ fi
+~~~
+
+Thanks!

Work around git commit's lack of robustness, by providing reasonable default values for GIT_COMMITTER_EMAIL etc.
This was already done as part of the su/sudo handling, and is now always
done.
This commit was sponsored by Trenton Cronholm on Patreon.
diff --git a/commit.d/50vcs-commit b/commit.d/50vcs-commit
index 55f0db2..f970d3d 100755
--- a/commit.d/50vcs-commit
+++ b/commit.d/50vcs-commit
@@ -41,9 +41,16 @@ else
 fi
 
 if [ "$VCS" = git ] && [ -d .git ]; then
+	# When not su'd to root, still set environment variables, 
+	# since git's own code to determine the author and committer
+	# has several edge cases where it fails and would prevent the
+	# commit.
+	if [ -z "$USER" ]; then
+		USER="$(whoami)"
+	fi
 	if [ -n "$USER" ]; then
 		# Use user.name and user.email from the gitconfig belonging
-		# to the user who became root.
+		# to USER.
 		USER_HOME="$(getent passwd "$USER" | cut -d: -f6)"
 		if [ -n "$USER_HOME" ] && [ -e "$USER_HOME/.gitconfig" ]; then
 			if [ -z "$GIT_AUTHOR_NAME" ]; then
diff --git a/debian/changelog b/debian/changelog
index 23783bd..46df223 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,12 @@
+etckeeper (1.18.8) UNRELEASED; urgency=medium
+
+  * Work around git commit's lack of robustness, by providing
+    reasonable default values for GIT_COMMITTER_EMAIL etc.
+    This was already done as part of the su/sudo handling,
+    and is now always done.
+
+ -- Joey Hess <id@joeyh.name>  Thu, 08 Jun 2017 13:22:01 -0400
+
 etckeeper (1.18.7) unstable; urgency=medium
 
   * Added some unit tests.
diff --git a/doc/todo/requires___96__user.email__96___be_set_under_undocumented_circumstances.mdwn b/doc/todo/requires___96__user.email__96___be_set_under_undocumented_circumstances.mdwn
index 93177d8..5ddd8ad 100644
--- a/doc/todo/requires___96__user.email__96___be_set_under_undocumented_circumstances.mdwn
+++ b/doc/todo/requires___96__user.email__96___be_set_under_undocumented_circumstances.mdwn
@@ -34,3 +34,5 @@ This is not Ansible-specific: the last two conditions will also arise in the dai
 
 
 IMO, considering how to document this behaviour shows it to be user-unfriendly.  Therefore, it would be simplest if etckeeper could fall back to using `$(id -un)`, once `$(tty)` fails.
+
+> Set `USER=$(whoami)`, for git only. [[done]] --[[Joey]]
diff --git a/doc/todo/requires___96__user.email__96___be_set_under_undocumented_circumstances/comment_1_f8399058ebbf3059000e6528296cc1e9._comment b/doc/todo/requires___96__user.email__96___be_set_under_undocumented_circumstances/comment_1_f8399058ebbf3059000e6528296cc1e9._comment
new file mode 100644
index 0000000..16e907f
--- /dev/null
+++ b/doc/todo/requires___96__user.email__96___be_set_under_undocumented_circumstances/comment_1_f8399058ebbf3059000e6528296cc1e9._comment
@@ -0,0 +1,26 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2017-06-08T17:00:19Z"
+ content="""
+What actually requires user.email be set under
+undocumented circumstances? git does. Personally, I feel this is a total
+misfeature on git's part; git commit should succeed under all
+configuraations. Every single program that automates `git commit`
+is potentially buggy otherwise.
+
+Anyway, yes, setting `USER=$(id -un)` (or whoami) would make
+the code that currently is used to handle sudo users be always
+run, and so git and any other VCSs that break in unusual circumstances
+would always work (at least as far as username and email goes, who knows
+what other requirements VCSs may have).
+
+The downside is that this could change etckeeper's behavior, since
+it would now be guessing at the user name and email, and may make
+different choices than git does.
+
+Setting USER would also impact the code for other VCSs than git. For
+example, the code for hg always sets HGUSER when USER is set. I don't know
+if the others VCSs are as picky as git; if this kind of breakage is not a
+problem for them it might be best to only set USER when using git.
+"""]]

add news item for etckeeper 1.18.7
diff --git a/doc/news/version_1.18.2.mdwn b/doc/news/version_1.18.2.mdwn
deleted file mode 100644
index fe38994..0000000
--- a/doc/news/version_1.18.2.mdwn
+++ /dev/null
@@ -1,7 +0,0 @@
-etckeeper 1.18.2 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Use getent utility instead of perl. (Elan Ruusamäe)
-   * Initial FreeBSD support with pkgng plugin. (William Johansson)
-   * Fix README.md symlink in package (Sebastian Schmidt, Antoine Beaupré,
-     closes: #[791566](http://bugs.debian.org/791566))
-   * Fix typo of GIT\_COMMITTER\_EMAIL."""]]
\ No newline at end of file
diff --git a/doc/news/version_1.18.7.mdwn b/doc/news/version_1.18.7.mdwn
new file mode 100644
index 0000000..8259825
--- /dev/null
+++ b/doc/news/version_1.18.7.mdwn
@@ -0,0 +1,8 @@
+etckeeper 1.18.7 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Added some unit tests.
+     Thanks, Henrik Riomar.
+   * etckeeper will work on systems that do not have perl installed.
+     (perl is still used when available as it's faster)
+     Thanks, William Johansson and radhus.
+   * Prevent LC\_ALL overriding the LC\_COLLATE used to sort metadata."""]]
\ No newline at end of file

diff --git a/doc/todo/requires___96__user.email__96___be_set_under_undocumented_circumstances.mdwn b/doc/todo/requires___96__user.email__96___be_set_under_undocumented_circumstances.mdwn
index fc45abc..93177d8 100644
--- a/doc/todo/requires___96__user.email__96___be_set_under_undocumented_circumstances.mdwn
+++ b/doc/todo/requires___96__user.email__96___be_set_under_undocumented_circumstances.mdwn
@@ -6,9 +6,31 @@ In common usage, this expectation is masked.  I believe the conditions for it br
 
 1. user.email is not set in git, AND
 2. the system hostname cannot be resolved to an FQDN, AND
-3. etckeeper is not run from sudo AND
-4. etckeeper is not run from a tty
+3. /etc/mailname does not exist (it is created by the Debian exim packages?) AND
+4. etckeeper is not run from sudo AND
+5. etckeeper is not run from a tty
+
+In this situation, etckeeper requires users to set `user.email` in /root/.gitconfig, or to have set it in /etc/.git/config immediately after `etckeeper init`.
+
+This is not Ansible-specific: the last two conditions will also arise in the daily autocommit script.
+
+    ● etckeeper.service - Autocommit of changes in /etc directory
+       Loaded: loaded (/lib/systemd/system/etckeeper.service; static; vendor preset: enabled)
+       Active: failed (Result: exit-code) since Sat 2017-06-03 00:22:20 BST; 5s ago
+         Docs: man:etckeeper(8)
+      Process: 2989 ExecStart=/etc/etckeeper/daily (code=exited, status=128)
+     Main PID: 2989 (code=exited, status=128)
+
+    Jun 03 00:22:20 unstable daily[2989]: Run
+    Jun 03 00:22:20 unstable daily[2989]:   git config --global user.email "you@example.com"
+    Jun 03 00:22:20 unstable daily[2989]:   git config --global user.name "Your Name"
+    Jun 03 00:22:20 unstable daily[2989]: to set your account's default identity.
+    Jun 03 00:22:20 unstable daily[2989]: Omit --global to set the identity only in this repository.
+    Jun 03 00:22:20 unstable daily[2989]: fatal: unable to auto-detect email address (got 'root@unstable.(none)')
+    Jun 03 00:22:20 unstable systemd[1]: etckeeper.service: Main process exited, code=exited, status=128/n/a
+    Jun 03 00:22:20 unstable systemd[1]: Failed to start Autocommit of changes in /etc directory.
+    Jun 03 00:22:20 unstable systemd[1]: etckeeper.service: Unit entered failed state.
+    Jun 03 00:22:20 unstable systemd[1]: etckeeper.service: Failed with result 'exit-code'.
 
-In this situation, etckeeper requires users to set `user.email` in /root/.gitconfig, or to have set it in /etc/.git/config immediately after `etckeeper init`.  As per link, these situations can occur when using Ansible.
 
 IMO, considering how to document this behaviour shows it to be user-unfriendly.  Therefore, it would be simplest if etckeeper could fall back to using `$(id -un)`, once `$(tty)` fails.

diff --git a/doc/todo/requires___96__user.email__96___be_set_under_undocumented_circumstances.mdwn b/doc/todo/requires___96__user.email__96___be_set_under_undocumented_circumstances.mdwn
new file mode 100644
index 0000000..fc45abc
--- /dev/null
+++ b/doc/todo/requires___96__user.email__96___be_set_under_undocumented_circumstances.mdwn
@@ -0,0 +1,14 @@
+[[https://unix.stackexchange.com/questions/368850/ansible-role-why-do-i-have-to-set-user-email-in-etckeeper/368851]]
+
+etckeeper expects that users set git `user.email`.  But it does not document this, or suggest a best way to do it.
+
+In common usage, this expectation is masked.  I believe the conditions for it breaking are:
+
+1. user.email is not set in git, AND
+2. the system hostname cannot be resolved to an FQDN, AND
+3. etckeeper is not run from sudo AND
+4. etckeeper is not run from a tty
+
+In this situation, etckeeper requires users to set `user.email` in /root/.gitconfig, or to have set it in /etc/.git/config immediately after `etckeeper init`.  As per link, these situations can occur when using Ansible.
+
+IMO, considering how to document this behaviour shows it to be user-unfriendly.  Therefore, it would be simplest if etckeeper could fall back to using `$(id -un)`, once `$(tty)` fails.

done link has to be in the page, not in the comment?
diff --git a/doc/todo/Doesn__39__t_work_for_symlinks_to_dev-null__44___used_by_systemd.mdwn b/doc/todo/Doesn__39__t_work_for_symlinks_to_dev-null__44___used_by_systemd.mdwn
index a9e3709..4d5b108 100644
--- a/doc/todo/Doesn__39__t_work_for_symlinks_to_dev-null__44___used_by_systemd.mdwn
+++ b/doc/todo/Doesn__39__t_work_for_symlinks_to_dev-null__44___used_by_systemd.mdwn
@@ -4,4 +4,4 @@ This is because git refuses to track symlinks to files which lie outside the git
 
 Supporting symlinks outside the repository is also required for /etc/alternatives.
 
-- Huh, I was 100% wrong. [done](../done). Some user error, I can't work out what though.
+- Huh, I was 100% wrong. [[done]]. Some user error, I can't work out what though.

diff --git a/doc/todo/Doesn__39__t_work_for_symlinks_to_dev-null__44___used_by_systemd.mdwn b/doc/todo/Doesn__39__t_work_for_symlinks_to_dev-null__44___used_by_systemd.mdwn
index 95ad9ef..a9e3709 100644
--- a/doc/todo/Doesn__39__t_work_for_symlinks_to_dev-null__44___used_by_systemd.mdwn
+++ b/doc/todo/Doesn__39__t_work_for_symlinks_to_dev-null__44___used_by_systemd.mdwn
@@ -4,4 +4,4 @@ This is because git refuses to track symlinks to files which lie outside the git
 
 Supporting symlinks outside the repository is also required for /etc/alternatives.
 
-- Huh, I was 100% wrong. [done](/done). Some user error, I can't work out what though.
+- Huh, I was 100% wrong. [done](../done). Some user error, I can't work out what though.

diff --git a/doc/todo/Doesn__39__t_work_for_symlinks_to_dev-null__44___used_by_systemd.mdwn b/doc/todo/Doesn__39__t_work_for_symlinks_to_dev-null__44___used_by_systemd.mdwn
index 5f80356..95ad9ef 100644
--- a/doc/todo/Doesn__39__t_work_for_symlinks_to_dev-null__44___used_by_systemd.mdwn
+++ b/doc/todo/Doesn__39__t_work_for_symlinks_to_dev-null__44___used_by_systemd.mdwn
@@ -4,4 +4,4 @@ This is because git refuses to track symlinks to files which lie outside the git
 
 Supporting symlinks outside the repository is also required for /etc/alternatives.
 
-- Huh, I was 100% wrong. [done](done). Some user error, I can't work out what though.
+- Huh, I was 100% wrong. [done](/done). Some user error, I can't work out what though.

diff --git a/doc/todo/Doesn__39__t_work_for_symlinks_to_dev-null__44___used_by_systemd.mdwn b/doc/todo/Doesn__39__t_work_for_symlinks_to_dev-null__44___used_by_systemd.mdwn
index db4cb40..5f80356 100644
--- a/doc/todo/Doesn__39__t_work_for_symlinks_to_dev-null__44___used_by_systemd.mdwn
+++ b/doc/todo/Doesn__39__t_work_for_symlinks_to_dev-null__44___used_by_systemd.mdwn
@@ -3,3 +3,5 @@ etckeeper fails to track symlinks to /dev/null, as created by `systemctl mask X`
 This is because git refuses to track symlinks to files which lie outside the git repository.
 
 Supporting symlinks outside the repository is also required for /etc/alternatives.
+
+- Huh, I was 100% wrong. [done](done). Some user error, I can't work out what though.

changelog and close for perl patch
diff --git a/debian/changelog b/debian/changelog
index 54276dc..7d965c2 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -2,6 +2,9 @@ etckeeper (1.18.7) UNRELEASED; urgency=medium
 
   * Added some unit tests.
     Thanks, Henrik Riomar.
+  * etckeeper will work on systems that do not have perl installed.
+    (perl is still used when available as it's faster)
+    Thanks, William Johansson and radhus.
 
  -- Joey Hess <id@joeyh.name>  Mon, 10 Apr 2017 10:32:53 -0400
 
diff --git a/doc/todo/make_Perl_optional.mdwn b/doc/todo/make_Perl_optional.mdwn
index d689735..2640106 100644
--- a/doc/todo/make_Perl_optional.mdwn
+++ b/doc/todo/make_Perl_optional.mdwn
@@ -15,3 +15,5 @@ Thanks,
 
 this change replaces:
  https://etckeeper.branchable.com/todo/remove_remaining_perl_usage/
+
+> merge [[done]] thank you! --[[Joey]]
diff --git a/doc/todo/remove_remaining_perl_usage.mdwn b/doc/todo/remove_remaining_perl_usage.mdwn
index baa593a..7f64840 100644
--- a/doc/todo/remove_remaining_perl_usage.mdwn
+++ b/doc/todo/remove_remaining_perl_usage.mdwn
@@ -2,3 +2,6 @@ In order to run etckeeper on e.g. embedded systems which does not have perl, I'v
 I have run this on my custom system and it works as expected for me.
 
 Link to github commit: <https://github.com/radhus/etckeeper/commit/d05837ed617bac0163a158ba1cfeca68994bc8f3>
+
+> [[done]]; another patch updated this one to address my review and has
+> been merged. --[[Joey]]

make Perl optional
diff --git a/doc/todo/make_Perl_optional.mdwn b/doc/todo/make_Perl_optional.mdwn
new file mode 100644
index 0000000..d689735
--- /dev/null
+++ b/doc/todo/make_Perl_optional.mdwn
@@ -0,0 +1,17 @@
+Hi Joey,
+
+New change making Perl optional, on smaller systems:
+https://gitlab.com/HRio/etckeeper/tree/remove-perl-3-rebased
+
+It will use Perl if its installed or else fall back to Bourne Shell.
+
+"make test" passes on Alpine Linux without Perl installed.
+
+Can you please review?
+
+Thanks,
+ Henrik
+
+
+this change replaces:
+ https://etckeeper.branchable.com/todo/remove_remaining_perl_usage/

merged fakeroot tests
added fakeroot to debian package build-depends so all tests will get run
diff --git a/debian/control b/debian/control
index 6395e86..7e3b8dc 100644
--- a/debian/control
+++ b/debian/control
@@ -1,7 +1,7 @@
 Source: etckeeper
 Section: admin
 Priority: optional
-Build-Depends: debhelper (>= 7), dpkg-dev (>= 1.9.0), bzr (>= 1.5~), python, dh-python, bats
+Build-Depends: debhelper (>= 7), dpkg-dev (>= 1.9.0), bzr (>= 1.5~), python, dh-python, bats, fakeroot
 Maintainer: Antoine Beaupré <anarcat@debian.org>
 Standards-Version: 3.9.8
 XS-Python-Version: all
diff --git a/doc/todo/unit_tests_with_bats_and_fakeroot.mdwn b/doc/todo/unit_tests_with_bats_and_fakeroot.mdwn
index 318f08d..0a82f7a 100644
--- a/doc/todo/unit_tests_with_bats_and_fakeroot.mdwn
+++ b/doc/todo/unit_tests_with_bats_and_fakeroot.mdwn
@@ -7,3 +7,5 @@ Can you please have a look?
 
 Thanks,
  Henrik
+
+> merged [[done]] --[[Joey]]

Added a comment: added
diff --git a/doc/todo/unit_tests_with_bats_and_fakeroot/comment_2_891753882055435d7ed3a31c6d4666eb._comment b/doc/todo/unit_tests_with_bats_and_fakeroot/comment_2_891753882055435d7ed3a31c6d4666eb._comment
new file mode 100644
index 0000000..b76aa09
--- /dev/null
+++ b/doc/todo/unit_tests_with_bats_and_fakeroot/comment_2_891753882055435d7ed3a31c6d4666eb._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="HRio"
+ avatar="http://cdn.libravatar.org/avatar/1e868a9a6e947b63de9250e8775c73ef"
+ subject="added"
+ date="2017-05-26T18:59:45Z"
+ content="""
+added fakeroot check to Makefile. Thanks for a very good suggestion.
+"""]]

response
diff --git a/doc/todo/unit_tests_with_bats_and_fakeroot/comment_1_a110104aeb4642c02fd71065b83e8377._comment b/doc/todo/unit_tests_with_bats_and_fakeroot/comment_1_a110104aeb4642c02fd71065b83e8377._comment
new file mode 100644
index 0000000..b0c301b
--- /dev/null
+++ b/doc/todo/unit_tests_with_bats_and_fakeroot/comment_1_a110104aeb4642c02fd71065b83e8377._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2017-05-25T16:37:08Z"
+ content="""
+This looks good (and all passes here both under and not under fakeroot).
+
+Would it make sense for the Makefile to run the test using fakeroot if
+fakeroot is in PATH?
+"""]]

add
diff --git a/doc/comments.mdwn b/doc/comments.mdwn
new file mode 100644
index 0000000..e19962b
--- /dev/null
+++ b/doc/comments.mdwn
@@ -0,0 +1,9 @@
+[[!sidebar content="""
+[[!inline pages="comment_pending(*)" feedfile=pendingmoderation
+description="comments pending moderation" show=-1]]
+Comments in the [[!commentmoderation desc="moderation queue"]]:
+[[!pagecount pages="comment_pending(*)"]]
+"""]]
+
+Recent comments posted to this site:
+[[!inline pages="comment(*)" template="comment"]]

diff --git a/doc/todo/unit_tests_with_bats_and_fakeroot.mdwn b/doc/todo/unit_tests_with_bats_and_fakeroot.mdwn
new file mode 100644
index 0000000..318f08d
--- /dev/null
+++ b/doc/todo/unit_tests_with_bats_and_fakeroot.mdwn
@@ -0,0 +1,9 @@
+Hi Joey,
+
+Here are some more tests that uses fakeroot:
+https://gitlab.com/HRio/etckeeper/commits/fakeroot
+
+Can you please have a look?
+
+Thanks,
+ Henrik

merged
added bats to debian build-deps
diff --git a/debian/changelog b/debian/changelog
index 08067c8..54276dc 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+etckeeper (1.18.7) UNRELEASED; urgency=medium
+
+  * Added some unit tests.
+    Thanks, Henrik Riomar.
+
+ -- Joey Hess <id@joeyh.name>  Mon, 10 Apr 2017 10:32:53 -0400
+
 etckeeper (1.18.6) unstable; urgency=medium
 
   * Only show errors (no progress indicators) when pushing Git/Mercurial repos
diff --git a/debian/control b/debian/control
index 95f9c65..6395e86 100644
--- a/debian/control
+++ b/debian/control
@@ -1,7 +1,7 @@
 Source: etckeeper
 Section: admin
 Priority: optional
-Build-Depends: debhelper (>= 7), dpkg-dev (>= 1.9.0), bzr (>= 1.5~), python, dh-python
+Build-Depends: debhelper (>= 7), dpkg-dev (>= 1.9.0), bzr (>= 1.5~), python, dh-python, bats
 Maintainer: Antoine Beaupré <anarcat@debian.org>
 Standards-Version: 3.9.8
 XS-Python-Version: all
diff --git a/doc/todo/unit_tests_with_bats.mdwn b/doc/todo/unit_tests_with_bats.mdwn
index 1a5a6d5..5e78a20 100644
--- a/doc/todo/unit_tests_with_bats.mdwn
+++ b/doc/todo/unit_tests_with_bats.mdwn
@@ -8,3 +8,5 @@ Could you please review: https://gitlab.com/HRio/etckeeper/commits/unit-test ?
 
 Thanks,
  Henrik
+
+> merged the updated branch [[done]] --[[Joey]]

review
diff --git a/doc/todo/unit_tests_with_bats/comment_1_2f2834a99aa87aa6a5e6a21a4e7f05b0._comment b/doc/todo/unit_tests_with_bats/comment_1_2f2834a99aa87aa6a5e6a21a4e7f05b0._comment
new file mode 100644
index 0000000..94886d1
--- /dev/null
+++ b/doc/todo/unit_tests_with_bats/comment_1_2f2834a99aa87aa6a5e6a21a4e7f05b0._comment
@@ -0,0 +1,38 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2017-04-07T02:40:36Z"
+ content="""
+Wow, it's a very nice gift to add a test suite!
+
+When I tried running it on debian unstable, there were two test failures:
+
+	   (in test file test-etckeeper, line 32)
+	     `[ $(grep -E -c "^${mkdir_str} .*${testdir2}\'$" $metadata) -eq 1 ]' failed
+	 ✗ test: etckeeper commit non-default mode
+	   (in test file test-etckeeper, line 51)
+	     `[ $(grep -E -c "^${chmod_str} ${mode} .*${testfile}\'$" $metadata) -eq 1 ]' failed
+
+Unless your test suite found some bugs (which perhaps it did already, I
+noticed the bugfix commit fad539b0ed762a7f6bc1bd94e64351ef56a25f2a and
+have already merged that one), I think this must be a bug in the test
+suite. Perhaps a portability issue?
+
+Hmm, I think it's shell quoting fun:
+
+	$ grep file2 /tmp/f
+	maybe chmod 0577 './file2'
+	$ grep -E -c "^maybe chmod 0577 .*file2\'$" /tmp/f
+	0
+	$ grep -E -c '^maybe chmod 0577 .*file2'\''$' /tmp/f
+	1
+	$ echo "^maybe chmod 0577 .*file2\'$"
+	^maybe chmod 0577 .*file2\'$
+	$ echo '^maybe chmod 0577 .*file2'\''$'
+	^maybe chmod 0577 .*file2'$
+
+Indeed, when I change all the greps to not slash-escape the single quote,
+the test suite succeeds here. So why are those single quotes being slash-escaped?
+As far as I know, shells don't treat single quotes inside double quotes
+specially, and I don't think that egrep treats single quotes specially either.
+"""]]

diff --git a/doc/todo/unit_tests_with_bats.mdwn b/doc/todo/unit_tests_with_bats.mdwn
new file mode 100644
index 0000000..1a5a6d5
--- /dev/null
+++ b/doc/todo/unit_tests_with_bats.mdwn
@@ -0,0 +1,10 @@
+Hi,
+
+I have started to implement some basic unit test cases using bats for etckeeper.
+
+During that work I found one small issue also fixed in the branch.
+
+Could you please review: https://gitlab.com/HRio/etckeeper/commits/unit-test ?
+
+Thanks,
+ Henrik

clarify sudo etckeeper commit
diff --git a/doc/README.mdwn b/doc/README.mdwn
index 8d28461..2607ef8 100644
--- a/doc/README.mdwn
+++ b/doc/README.mdwn
@@ -222,7 +222,7 @@ letting it git add new files:
 etckeeper will notice if it's being run by way of sudo, and makes a commit
 with the author set to the user who sudoed to root. This is useful when
 a system has multiple admins; as long as they use sudo while doing their
-administration, and run `etckeeper commit` to commit their changes,
+administration, and run `sudo etckeeper commit` to commit their changes,
 `git blame` can show who was responsible for each change.
 
 ## changing VCS

remove flattr button
diff --git a/doc/index.mdwn b/doc/index.mdwn
index da80eb6..666983e 100644
--- a/doc/index.mdwn
+++ b/doc/index.mdwn
@@ -20,5 +20,4 @@ understand the basics of working with version control.
 [[install]]  
 [[news]]  
 [[todo]]  
-[Flattr this](http://flattr.com/thing/39940/etckeeper)  
 """]]

Added a comment: Agreed! Please implement pushing to branches!
diff --git a/doc/todo/push_remote_branch/comment_1_f56144bea11901b8b1df4bcf552df801._comment b/doc/todo/push_remote_branch/comment_1_f56144bea11901b8b1df4bcf552df801._comment
new file mode 100644
index 0000000..5855b86
--- /dev/null
+++ b/doc/todo/push_remote_branch/comment_1_f56144bea11901b8b1df4bcf552df801._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="jim"
+ avatar="http://cdn.libravatar.org/avatar/b538cf412c3060bed47b86676cd7cba1"
+ subject="Agreed! Please implement pushing to branches!"
+ date="2017-01-31T23:56:51Z"
+ content="""
+Kind of a pain to constantly edit commit.d/99push to change the branch.
+An easy fix for a much needed feature.
+Please implement!
+"""]]

add news item for etckeeper 1.18.6
diff --git a/doc/news/version_1.18.6.mdwn b/doc/news/version_1.18.6.mdwn
new file mode 100644
index 0000000..c83b9da
--- /dev/null
+++ b/doc/news/version_1.18.6.mdwn
@@ -0,0 +1,8 @@
+etckeeper 1.18.6 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Only show errors (no progress indicators) when pushing Git/Mercurial repos
+     to avoid unncessary cron mails.
+     Thanks, Nils Steinger.
+   * Fix regex in 20-warn-problem-files.
+   * Added support for apk (alpine linux)
+     Thanks, Henrik Riomar."""]]
\ No newline at end of file
diff --git a/doc/news/version_1.18.mdwn b/doc/news/version_1.18.mdwn
deleted file mode 100644
index b2a9088..0000000
--- a/doc/news/version_1.18.mdwn
+++ /dev/null
@@ -1,6 +0,0 @@
-etckeeper 1.18 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Send yum pre-commit output to /dev/null
-     Thanks, Andrew Colin Kissa
-   * Set LANG=C internally when doing some operations that have
-     been reported to fail in other locales."""]]
\ No newline at end of file

Added support for apk (alpine linux) Thanks, Henrik Riomar.
diff --git a/debian/changelog b/debian/changelog
index 9d93e6b..a5f087b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -4,6 +4,8 @@ etckeeper (1.18.6) UNRELEASED; urgency=medium
     to avoid unncessary cron mails.
     Thanks, Nils Steinger.
   * Fix regex in 20-warn-problem-files.
+  * Added support for apk (alpine linux)
+    Thanks, Henrik Riomar.
 
  -- Joey Hess <id@joeyh.name>  Mon, 01 Aug 2016 13:29:54 -0400
 
diff --git a/doc/todo/basic_alpine_linux_support.mdwn b/doc/todo/basic_alpine_linux_support.mdwn
index a454ee4..5719ea7 100644
--- a/doc/todo/basic_alpine_linux_support.mdwn
+++ b/doc/todo/basic_alpine_linux_support.mdwn
@@ -7,3 +7,5 @@ The change can be found here: https://github.com/HRio/etckeeper/commit/0afeb5b45
 Thanks,
 
 / Henrik
+
+> applied, thanks [[done]] --[[Joey]]

diff --git a/doc/todo/basic_alpine_linux_support.mdwn b/doc/todo/basic_alpine_linux_support.mdwn
new file mode 100644
index 0000000..a454ee4
--- /dev/null
+++ b/doc/todo/basic_alpine_linux_support.mdwn
@@ -0,0 +1,9 @@
+Hi,
+
+I have prepared a small change with very basic support for Alpine Linux.
+
+The change can be found here: https://github.com/HRio/etckeeper/commit/0afeb5b4585b2251e83cec32687ed6c99a39fb9a
+
+Thanks,
+
+/ Henrik

Added a comment
diff --git a/doc/todo/Doesn__39__t_work_for_symlinks_to_dev-null__44___used_by_systemd/comment_2_ec7b55ad5d6b13e843e8179266a2f911._comment b/doc/todo/Doesn__39__t_work_for_symlinks_to_dev-null__44___used_by_systemd/comment_2_ec7b55ad5d6b13e843e8179266a2f911._comment
new file mode 100644
index 0000000..8c7654b
--- /dev/null
+++ b/doc/todo/Doesn__39__t_work_for_symlinks_to_dev-null__44___used_by_systemd/comment_2_ec7b55ad5d6b13e843e8179266a2f911._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="https://openid.stackexchange.com/user/9df74bc5-3799-4cb1-8f54-971c8423ddaa"
+ nickname="alan.christopher.jenkins"
+ avatar="http://cdn.libravatar.org/avatar/8e723c6cf403714781c6f1ca93551ac5f15f1c982669ab553fb2b73bb896a69a"
+ subject="comment 2"
+ date="2017-01-21T11:50:59Z"
+ content="""
+Huh, I was 100% wrong.  [[done]].  Some user error, I can't work out what though.
+
+I'm fairly sure this was when I masked fwupd.service.  That was on Fedora 25 Workstation, my current laptop.
+
+I can successfully use `git log` on either /etc/systemd/system or `-- /etc/systemd/system/fwupd.service`, and I see the service being masked and later unmasked.
+"""]]

hm
diff --git a/doc/todo/Doesn__39__t_work_for_symlinks_to_dev-null__44___used_by_systemd/comment_1_f17abb85a67bae90ee485d2eb5be183b._comment b/doc/todo/Doesn__39__t_work_for_symlinks_to_dev-null__44___used_by_systemd/comment_1_f17abb85a67bae90ee485d2eb5be183b._comment
new file mode 100644
index 0000000..1ed93b0
--- /dev/null
+++ b/doc/todo/Doesn__39__t_work_for_symlinks_to_dev-null__44___used_by_systemd/comment_1_f17abb85a67bae90ee485d2eb5be183b._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2017-01-06T00:11:26Z"
+ content="""
+git has no trouble storing a symlink to /dev/null here. AFAIK, git doesn't
+care in the slightest where a symlink points and never has.
+
+And, I have a /etc/systemd/system/minetest-server.service link to /dev/null
+here which etckeeper committed in 2015.
+"""]]

diff --git a/doc/todo/Doesn__39__t_work_for_symlinks_to_dev-null__44___used_by_systemd.mdwn b/doc/todo/Doesn__39__t_work_for_symlinks_to_dev-null__44___used_by_systemd.mdwn
new file mode 100644
index 0000000..db4cb40
--- /dev/null
+++ b/doc/todo/Doesn__39__t_work_for_symlinks_to_dev-null__44___used_by_systemd.mdwn
@@ -0,0 +1,5 @@
+etckeeper fails to track symlinks to /dev/null, as created by `systemctl mask X`.
+
+This is because git refuses to track symlinks to files which lie outside the git repository.
+
+Supporting symlinks outside the repository is also required for /etc/alternatives.

Added a comment
diff --git a/doc/todo/what_if_there_is_a_Git_repo_somewhere_underneath___47__etc__63__/comment_1_3d18e005c10b5f3e671fe6c12e5aa03d._comment b/doc/todo/what_if_there_is_a_Git_repo_somewhere_underneath___47__etc__63__/comment_1_3d18e005c10b5f3e671fe6c12e5aa03d._comment
new file mode 100644
index 0000000..ba15913
--- /dev/null
+++ b/doc/todo/what_if_there_is_a_Git_repo_somewhere_underneath___47__etc__63__/comment_1_3d18e005c10b5f3e671fe6c12e5aa03d._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://openid.stackexchange.com/user/9df74bc5-3799-4cb1-8f54-971c8423ddaa"
+ nickname="alan.christopher.jenkins"
+ avatar="http://cdn.libravatar.org/avatar/8e723c6cf403714781c6f1ca93551ac5f15f1c982669ab553fb2b73bb896a69a"
+ subject="comment 1"
+ date="2017-01-05T12:41:13Z"
+ content="""
+What happened to me was that .etckeeper bloats up with files from the .git directories. Also it behaved confusingly different depending on the exact sequence of events. My notes on this are [here](https://unix.stackexchange.com/questions/323489/i-have-nested-git-repos-will-it-cause-a-problem)
+"""]]

removed
diff --git a/doc/todo/what_if_there_is_a_Git_repo_somewhere_underneath___47__etc__63__/comment_1_9dd9c6fd8f808d7476c75c70e73ee50c._comment b/doc/todo/what_if_there_is_a_Git_repo_somewhere_underneath___47__etc__63__/comment_1_9dd9c6fd8f808d7476c75c70e73ee50c._comment
deleted file mode 100644
index 5bb6f10..0000000
--- a/doc/todo/what_if_there_is_a_Git_repo_somewhere_underneath___47__etc__63__/comment_1_9dd9c6fd8f808d7476c75c70e73ee50c._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="https://openid.stackexchange.com/user/9df74bc5-3799-4cb1-8f54-971c8423ddaa"
- nickname="alan.christopher.jenkins"
- avatar="http://cdn.libravatar.org/avatar/8e723c6cf403714781c6f1ca93551ac5f15f1c982669ab553fb2b73bb896a69a"
- subject="comment 1"
- date="2017-01-05T12:39:02Z"
- content="""
-What happened to me was that .etckeeper bloats up with files from the .git directories.  Also it behaved confusingly different depending on the exact sequence of events.  https://unix.stackexchange.com/questions/323489/i-have-nested-git-repos-will-it-cause-a-problem
-"""]]

Added a comment
diff --git a/doc/todo/what_if_there_is_a_Git_repo_somewhere_underneath___47__etc__63__/comment_1_9dd9c6fd8f808d7476c75c70e73ee50c._comment b/doc/todo/what_if_there_is_a_Git_repo_somewhere_underneath___47__etc__63__/comment_1_9dd9c6fd8f808d7476c75c70e73ee50c._comment
new file mode 100644
index 0000000..5bb6f10
--- /dev/null
+++ b/doc/todo/what_if_there_is_a_Git_repo_somewhere_underneath___47__etc__63__/comment_1_9dd9c6fd8f808d7476c75c70e73ee50c._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://openid.stackexchange.com/user/9df74bc5-3799-4cb1-8f54-971c8423ddaa"
+ nickname="alan.christopher.jenkins"
+ avatar="http://cdn.libravatar.org/avatar/8e723c6cf403714781c6f1ca93551ac5f15f1c982669ab553fb2b73bb896a69a"
+ subject="comment 1"
+ date="2017-01-05T12:39:02Z"
+ content="""
+What happened to me was that .etckeeper bloats up with files from the .git directories.  Also it behaved confusingly different depending on the exact sequence of events.  https://unix.stackexchange.com/questions/323489/i-have-nested-git-repos-will-it-cause-a-problem
+"""]]

diff --git a/doc/todo/30store-metadata_stores_metadata_for_untracked_files.mdwn b/doc/todo/30store-metadata_stores_metadata_for_untracked_files.mdwn
new file mode 100644
index 0000000..f093b08
--- /dev/null
+++ b/doc/todo/30store-metadata_stores_metadata_for_untracked_files.mdwn
@@ -0,0 +1,3 @@
+I am trying to use etckeeper to track `/`  (We need to track /etc and also /unionfs/overlay/etc, which is an etc that gets loaded onto a second computer).
+
+`git ls-files` lists only the files we want to track, and `.gitignore` correctly excludes all the files we don't want to match (such as `./home`, `./proc`, ), yet somehow `.etckeeper` contains metadata for a bunch of files that I don't want etckeeper to touch.

Fix regex in 20-warn-problem-files.
diff --git a/debian/changelog b/debian/changelog
index c212b34..9d93e6b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -3,6 +3,7 @@ etckeeper (1.18.6) UNRELEASED; urgency=medium
   * Only show errors (no progress indicators) when pushing Git/Mercurial repos
     to avoid unncessary cron mails.
     Thanks, Nils Steinger.
+  * Fix regex in 20-warn-problem-files.
 
  -- Joey Hess <id@joeyh.name>  Mon, 01 Aug 2016 13:29:54 -0400
 
diff --git a/doc/todo/regex_in_20-warn-problem-files.mdwn b/doc/todo/regex_in_20-warn-problem-files.mdwn
index 73c076e..b3f5e79 100644
--- a/doc/todo/regex_in_20-warn-problem-files.mdwn
+++ b/doc/todo/regex_in_20-warn-problem-files.mdwn
@@ -8,3 +8,4 @@ should probably escape the `.`s.
             egrep -v '(^|/)(\.git|\.hg|\.bzr|_darcs)/'
     }
 
+> [[fixed|done]] --[[Joey]]
diff --git a/pre-commit.d/20warn-problem-files b/pre-commit.d/20warn-problem-files
index 4ffbfd1..6bd5c2b 100755
--- a/pre-commit.d/20warn-problem-files
+++ b/pre-commit.d/20warn-problem-files
@@ -2,7 +2,7 @@
 set -e
 
 exclude_internal () {
-	egrep -v '(^|/)(.git|.hg|.bzr|_darcs)/'
+	egrep -v '(^|/)(\.git|\.hg|\.bzr|_darcs)/'
 }
 
 if [ "$VCS" = bzr ] || [ "$VCS" = darcs ]; then
diff --git a/pre-commit.d/30store-metadata b/pre-commit.d/30store-metadata
index 2b77c8e..6d7d4b1 100755
--- a/pre-commit.d/30store-metadata
+++ b/pre-commit.d/30store-metadata
@@ -1,6 +1,10 @@
 #!/bin/sh
 set -e
 
+# Make sure sort always sorts in same order.
+LANG=C
+export LANG
+
 filter_ignore() {
 	case "$VCS" in
 		darcs) ignorefile=.darcsignore ;;

diff --git a/doc/todo/running___96__find_.__96___in___47___prints_warnings.mdwn b/doc/todo/running___96__find_.__96___in___47___prints_warnings.mdwn
index 2d1a510..94a6733 100644
--- a/doc/todo/running___96__find_.__96___in___47___prints_warnings.mdwn
+++ b/doc/todo/running___96__find_.__96___in___47___prints_warnings.mdwn
@@ -10,3 +10,6 @@ However the script `20-warn-problem-files` reports many errors like
     find: `./proc/7010/task/7010/fdinfo/5': No such file or directory
 
 Due to files in `/proc` being created and deleted while `find` is running.
+
+
+I am not sure why `find` needs to run at all, when instead one could analyze the output of git ls-files and see if any of those files are problematic.

diff --git a/doc/todo/running___96__find_.__96___in___47___prints_warnings.mdwn b/doc/todo/running___96__find_.__96___in___47___prints_warnings.mdwn
index 14820fd..2d1a510 100644
--- a/doc/todo/running___96__find_.__96___in___47___prints_warnings.mdwn
+++ b/doc/todo/running___96__find_.__96___in___47___prints_warnings.mdwn
@@ -1,6 +1,6 @@
 I am trying to make etckeeper track `/etc` and another folder in `/`.
 
-However the script 20-warn-problem-files reports many errors like
+However the script `20-warn-problem-files` reports many errors like
 
     find: `./proc/7010/task/7010/fd/5': No such file or directory
     find: `./proc/7010/task/7010/fd/5': No such file or directory

diff --git a/doc/todo/running___96__find_.__96___in___47___prints_warnings.mdwn b/doc/todo/running___96__find_.__96___in___47___prints_warnings.mdwn
index 6b5f059..14820fd 100644
--- a/doc/todo/running___96__find_.__96___in___47___prints_warnings.mdwn
+++ b/doc/todo/running___96__find_.__96___in___47___prints_warnings.mdwn
@@ -2,11 +2,11 @@ I am trying to make etckeeper track `/etc` and another folder in `/`.
 
 However the script 20-warn-problem-files reports many errors like
 
-  find: `./proc/7010/task/7010/fd/5': No such file or directory
-  find: `./proc/7010/task/7010/fd/5': No such file or directory
-  find: `./proc/7010/task/7010/fd/5': No such file or directory
-  find: `./proc/7010/task/7010/fdinfo/5': No such file or directory
-  find: `./proc/7010/task/7010/fdinfo/5': No such file or directory
-  find: `./proc/7010/task/7010/fdinfo/5': No such file or directory
+    find: `./proc/7010/task/7010/fd/5': No such file or directory
+    find: `./proc/7010/task/7010/fd/5': No such file or directory
+    find: `./proc/7010/task/7010/fd/5': No such file or directory
+    find: `./proc/7010/task/7010/fdinfo/5': No such file or directory
+    find: `./proc/7010/task/7010/fdinfo/5': No such file or directory
+    find: `./proc/7010/task/7010/fdinfo/5': No such file or directory
 
 Due to files in `/proc` being created and deleted while `find` is running.

diff --git a/doc/todo/running___96__find_.__96___in___47___prints_warnings.mdwn b/doc/todo/running___96__find_.__96___in___47___prints_warnings.mdwn
index a52b9bc..6b5f059 100644
--- a/doc/todo/running___96__find_.__96___in___47___prints_warnings.mdwn
+++ b/doc/todo/running___96__find_.__96___in___47___prints_warnings.mdwn
@@ -1,4 +1,4 @@
-I am trying to make etckeeper track /etc and another folder in `/`.
+I am trying to make etckeeper track `/etc` and another folder in `/`.
 
 However the script 20-warn-problem-files reports many errors like
 
@@ -9,4 +9,4 @@ However the script 20-warn-problem-files reports many errors like
   find: `./proc/7010/task/7010/fdinfo/5': No such file or directory
   find: `./proc/7010/task/7010/fdinfo/5': No such file or directory
 
-Due to files in /proc being created and deleted file find is running.
+Due to files in `/proc` being created and deleted while `find` is running.

diff --git a/doc/todo/running___96__find_.__96___in___47___prints_warnings.mdwn b/doc/todo/running___96__find_.__96___in___47___prints_warnings.mdwn
new file mode 100644
index 0000000..a52b9bc
--- /dev/null
+++ b/doc/todo/running___96__find_.__96___in___47___prints_warnings.mdwn
@@ -0,0 +1,12 @@
+I am trying to make etckeeper track /etc and another folder in `/`.
+
+However the script 20-warn-problem-files reports many errors like
+
+  find: `./proc/7010/task/7010/fd/5': No such file or directory
+  find: `./proc/7010/task/7010/fd/5': No such file or directory
+  find: `./proc/7010/task/7010/fd/5': No such file or directory
+  find: `./proc/7010/task/7010/fdinfo/5': No such file or directory
+  find: `./proc/7010/task/7010/fdinfo/5': No such file or directory
+  find: `./proc/7010/task/7010/fdinfo/5': No such file or directory
+
+Due to files in /proc being created and deleted file find is running.

diff --git a/doc/todo/regex_in_20-warn-problem-files.mdwn b/doc/todo/regex_in_20-warn-problem-files.mdwn
index 15a12de..73c076e 100644
--- a/doc/todo/regex_in_20-warn-problem-files.mdwn
+++ b/doc/todo/regex_in_20-warn-problem-files.mdwn
@@ -4,7 +4,7 @@
 
 should probably escape the `.`s. 
 
-exclude_internal () {
-        egrep -v '(^|/)(\.git|\.hg|\.bzr|_darcs)/'
-}
+    exclude_internal () {
+            egrep -v '(^|/)(\.git|\.hg|\.bzr|_darcs)/'
+    }
 

diff --git a/doc/todo/regex_in_20-warn-problem-files.mdwn b/doc/todo/regex_in_20-warn-problem-files.mdwn
new file mode 100644
index 0000000..15a12de
--- /dev/null
+++ b/doc/todo/regex_in_20-warn-problem-files.mdwn
@@ -0,0 +1,10 @@
+    exclude_internal () {
+            egrep -v '(^|/)(.git|.hg|.bzr|_darcs)/'
+    }
+
+should probably escape the `.`s. 
+
+exclude_internal () {
+        egrep -v '(^|/)(\.git|\.hg|\.bzr|_darcs)/'
+}
+

Added a comment: In that case git has a crazy notion about "needed"...
diff --git a/doc/todo/automatic_git_gc/comment_2_1af062eb15d4b90644a5a67e31916657._comment b/doc/todo/automatic_git_gc/comment_2_1af062eb15d4b90644a5a67e31916657._comment
new file mode 100644
index 0000000..a322f9b
--- /dev/null
+++ b/doc/todo/automatic_git_gc/comment_2_1af062eb15d4b90644a5a67e31916657._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://marcussundberg.com/openid/"
+ avatar="http://cdn.libravatar.org/avatar/12ed25dc622fa3b47194a892662e9131c7e70a4d65d9453cba062f2c6487c9d5"
+ subject="In that case git has a crazy notion about &quot;needed&quot;..."
+ date="2016-11-19T13:55:35Z"
+ content="""
+Running gc in one of my etckeeper repos shrunk the .git directory from 500+ MiB to ~45 MiB.
+"""]]

close
diff --git a/doc/todo/fixed_typo_in_README.mdwn b/doc/todo/fixed_typo_in_README.mdwn
index c7af702..bd5f5aa 100644
--- a/doc/todo/fixed_typo_in_README.mdwn
+++ b/doc/todo/fixed_typo_in_README.mdwn
@@ -1,3 +1,5 @@
 fixed typo in README
 
 https://github.com/Yky/etckeeper/commit/5f2556abbc404eb0d06b31f620fe655c8802d8e7
+
+> applied [[done]] --[[Joey]]

diff --git a/doc/todo/fixed_typo_in_README.mdwn b/doc/todo/fixed_typo_in_README.mdwn
new file mode 100644
index 0000000..c7af702
--- /dev/null
+++ b/doc/todo/fixed_typo_in_README.mdwn
@@ -0,0 +1,3 @@
+fixed typo in README
+
+https://github.com/Yky/etckeeper/commit/5f2556abbc404eb0d06b31f620fe655c8802d8e7

diff --git a/doc/todo/.mdwn b/doc/todo/.mdwn
new file mode 100644
index 0000000..c7af702
--- /dev/null
+++ b/doc/todo/.mdwn
@@ -0,0 +1,3 @@
+fixed typo in README
+
+https://github.com/Yky/etckeeper/commit/5f2556abbc404eb0d06b31f620fe655c8802d8e7

fixed typo
diff --git a/doc/README.mdwn b/doc/README.mdwn
index 97bc3fc..8d28461 100644
--- a/doc/README.mdwn
+++ b/doc/README.mdwn
@@ -163,7 +163,7 @@ transport like ssh, and only to a server you trust.)
 	git remote add backup ssh://server/etc-clone
 	git push backup --all
 
-If you have several machine's using etckeeper, you can start with a
+If you have several machines using etckeeper, you can start with a
 etckeeper repository on one machine, then add another machine's etckeeper
 repository as a git remote. Then you can diff against it, examine its
 history, merge with it, and so on. It would probably not, however, be wise

Added a comment
diff --git a/doc/todo/metadata_changes_don__39__t_cause_a_new_commit/comment_1_760124afc8a858dc1e407c9126d606b8._comment b/doc/todo/metadata_changes_don__39__t_cause_a_new_commit/comment_1_760124afc8a858dc1e407c9126d606b8._comment
new file mode 100644
index 0000000..42c2798
--- /dev/null
+++ b/doc/todo/metadata_changes_don__39__t_cause_a_new_commit/comment_1_760124afc8a858dc1e407c9126d606b8._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="lukeshu"
+ avatar="http://cdn.libravatar.org/avatar/002a91d6bdfd6cfecde043c0a7f39123"
+ subject="comment 1"
+ date="2016-11-08T14:40:31Z"
+ content="""
+Relatedly, `etckeeper unclean` won't show metadata changes, which means that things like `/etc/etckeeper/daily` won't end up making a commit.
+"""]]

Added a comment
diff --git a/doc/todo/Detailed_post-install_commit_messages/comment_5_2264f62f2b9c86e019fa8bacac699e81._comment b/doc/todo/Detailed_post-install_commit_messages/comment_5_2264f62f2b9c86e019fa8bacac699e81._comment
new file mode 100644
index 0000000..c54018d
--- /dev/null
+++ b/doc/todo/Detailed_post-install_commit_messages/comment_5_2264f62f2b9c86e019fa8bacac699e81._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="emkael"
+ avatar="http://cdn.libravatar.org/avatar/c2b5d5c4ae4866f14e2f42274f3ebc2d"
+ subject="comment 5"
+ date="2016-10-23T12:49:46Z"
+ content="""
+Yeah, `xargs` should do the trick. I've updated the patch or, if you prefer, pushed it to my local fork at: `http://emkael.info/cgit/etckeeper/`
+"""]]

followup
diff --git a/doc/todo/Detailed_post-install_commit_messages/comment_3_f6b7ece8bb96a69d1fbc4e3abf12929f._comment b/doc/todo/Detailed_post-install_commit_messages/comment_3_f6b7ece8bb96a69d1fbc4e3abf12929f._comment
new file mode 100644
index 0000000..6b9cd75
--- /dev/null
+++ b/doc/todo/Detailed_post-install_commit_messages/comment_3_f6b7ece8bb96a69d1fbc4e3abf12929f._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2016-10-21T19:13:48Z"
+ content="""
+
+"""]]
diff --git a/doc/todo/Detailed_post-install_commit_messages/comment_4_bf387e2effc4e14e331610e7e588693a._comment b/doc/todo/Detailed_post-install_commit_messages/comment_4_bf387e2effc4e14e331610e7e588693a._comment
new file mode 100644
index 0000000..be18e05
--- /dev/null
+++ b/doc/todo/Detailed_post-install_commit_messages/comment_4_bf387e2effc4e14e331610e7e588693a._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 4"""
+ date="2016-10-21T19:14:23Z"
+ content="""
+Good thought about argument length limit. Use xargs?
+
+There is a disturbing lack of quoting on `$FILELIST` which I think could be
+a problem with filenames containing spaces etc. Using xargs with `-d \n`
+should also avoid that problem.
+"""]]

Added a comment
diff --git a/doc/todo/Detailed_post-install_commit_messages/comment_2_e7bb6d14f2362997f1e15ea3bc448788._comment b/doc/todo/Detailed_post-install_commit_messages/comment_2_e7bb6d14f2362997f1e15ea3bc448788._comment
new file mode 100644
index 0000000..faeb289
--- /dev/null
+++ b/doc/todo/Detailed_post-install_commit_messages/comment_2_e7bb6d14f2362997f1e15ea3bc448788._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="emkael"
+ avatar="http://cdn.libravatar.org/avatar/c2b5d5c4ae4866f14e2f42274f3ebc2d"
+ subject="comment 2"
+ date="2016-10-18T17:28:56Z"
+ content="""
+The per-file lookup was just a way to catch non-package files without too much hassle with splitting piped output.  
+Since that section is dropped, the updated patch provides lookup on one run of dpkg -S (and similar, for all package managers), plus some cleanup of the sort/uniq \"post-processing\".  
+The only thing I'm worried about is argument length limit - from what I was able to see, dpkg -S does not read arguments from stdin, so I'm just storing the file list in a variable. Is that much of a risk?
+
+Just updated the previous gist: <https://gist.github.com/emkael/364f701a5342978e6e79c2368b905565>
+"""]]

review
diff --git a/doc/todo/Detailed_post-install_commit_messages/comment_1_817aca821300362a4c4582bb8fb1dc8c._comment b/doc/todo/Detailed_post-install_commit_messages/comment_1_817aca821300362a4c4582bb8fb1dc8c._comment
new file mode 100644
index 0000000..f37b89e
--- /dev/null
+++ b/doc/todo/Detailed_post-install_commit_messages/comment_1_817aca821300362a4c4582bb8fb1dc8c._comment
@@ -0,0 +1,24 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2016-10-18T14:57:14Z"
+ content="""
+Good idea!
+
+Reviewing the patch, I noticed that dpkg -S is run once per changed file.
+It should be faster to pass all the changed files to it, and parse the
+output.
+
+(Other package managers may also be able to be optimised this way,
+but I only care about dpkg, and happen to know dpkg -S can be pretty
+slow.. rpm -qf may be fast enough that running repeatedly is not a
+problem.)
+
+I think that the "Non-package (maintainer script/removed package)
+configuration files changed" list can be omitted. At least on debian there
+are unfortunately going to be a lot of such files, and it seems just added
+noise in the commit log, and added complication to build the list.
+
+Please use tabs and not spaces for indentation, in keeping with the rest of
+etckeeper's code.
+"""]]

diff --git a/doc/todo/Detailed_post-install_commit_messages.mdwn b/doc/todo/Detailed_post-install_commit_messages.mdwn
new file mode 100644
index 0000000..517506f
--- /dev/null
+++ b/doc/todo/Detailed_post-install_commit_messages.mdwn
@@ -0,0 +1,9 @@
+I've written some code to extend the VCS hook to provide more detailed log messages for post-install commits.
+
+Basically, it matches the list of altered files against package manager file list and lists packages with actual configuration changes (plus non-package files) in addition to the list of all changed packages that's listed now.
+
+I find it useful on large system updates, when the package list gets long and commit message consists mostly of irrelevant package names.
+
+I have to note that I don't use package managers other than apt/rpm or vcs other than git on regular basis, so it would be useful if someone with more experience on those takes a look at mercurial/bazaar/darcs and pacman/pkgng implementations of the functions.
+
+Patch for the post-install.d/50vcs-commit file is available at: <https://gist.github.com/emkael/364f701a5342978e6e79c2368b905565>

comment
diff --git a/doc/todo/include_mtime_into_metadata/comment_1_9e75c36722c194fecef316ae99d1d75e._comment b/doc/todo/include_mtime_into_metadata/comment_1_9e75c36722c194fecef316ae99d1d75e._comment
new file mode 100644
index 0000000..ebe5e94
--- /dev/null
+++ b/doc/todo/include_mtime_into_metadata/comment_1_9e75c36722c194fecef316ae99d1d75e._comment
@@ -0,0 +1,25 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2016-09-27T13:31:57Z"
+ content="""
+Are there any config files in /etc whose mtime influences the program they
+configure in some way? That would be a very good reason to include the
+mtime.
+
+If the goal is to keep track of multiple manual changes to /etc, the best
+thing to do is to manually run etckeeper commit after making the change.
+Relying on the daily autocommit is at best a fallback.
+
+Need to consider the resource impact of adding mtimes to /etc/.etckeeper 
+would not be very bad. The files are already statted, so no extra overhead
+there. 
+
+How about the size increase of /etc/.etckeeper?
+For each file in /etc, a line like `maybe touch -d '1970-01-01 00:00Z' foo` would
+be needed. (That seems the most compact available way to specifiy a time to
+touch.) On my system, that adds 136kb to /etc/.etckeeper, a little bit more
+than doubling its size.
+
+That doesn't seem too bad a resource impact. 
+"""]]

diff --git a/doc/todo/include_mtime_into_metadata.mdwn b/doc/todo/include_mtime_into_metadata.mdwn
new file mode 100644
index 0000000..1be3ab6
--- /dev/null
+++ b/doc/todo/include_mtime_into_metadata.mdwn
@@ -0,0 +1,5 @@
+It's impossible to know file modification time using git.
+etckeeper also saves some metadata, but not mtimes.
+
+Per-file mtimes are very useful to determine later when exactly change was happened.
+As of now, only date could be known, knowing there is `daily autocommit`, but time information is lost. Date is very imprecise, because there can be many changes per day.

Added a comment
diff --git a/doc/todo/track_multiple_directories/comment_11_353f4ec6cb4c575c9459b430236e27d1._comment b/doc/todo/track_multiple_directories/comment_11_353f4ec6cb4c575c9459b430236e27d1._comment
new file mode 100644
index 0000000..ee04de0
--- /dev/null
+++ b/doc/todo/track_multiple_directories/comment_11_353f4ec6cb4c575c9459b430236e27d1._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="doneg"
+ subject="comment 11"
+ date="2016-09-23T09:14:21Z"
+ content="""
+You already have -d support, now can you do, please, another step to track multiple dirs by adding cycle into `/etc/cron.daily/etckeeper` which would commit from multiple dirs. This could be variable in `/etc/etckeeper/etckeeper.conf`, for example `ADD_DIRS=\"/usr/local/etc /boot/grub\"`, and cron.daily script could just `for dir in $ADD_DIRS` and `commit -d $dir` them all. This requires just few lines to acquire such great functionality.
+
+For example, `/etc/grub2.cfg` is very important for the health of a system and it's never tracked by etckeeper by default because it's symlink to `/boot/grub2/grub.cfg`. We just have another server not survive reboot after simple `yum update` because grub.conf got wrong lvm parameters, and we unable to track when this change was happened first time.
+"""]]

Title case
diff --git a/doc/README.mdwn b/doc/README.mdwn
index 1877124..97bc3fc 100644
--- a/doc/README.mdwn
+++ b/doc/README.mdwn
@@ -12,7 +12,7 @@ It's quite modular and configurable, while also being simple to use if you
 understand the basics of working with version control.
 
 
-## security warnings
+## Security warnings
 
 First, a big warning: By checking /etc into version control, you are
 creating a copy of files like /etc/shadow that must remain secret. Anytime
@@ -35,7 +35,7 @@ Also note that `etckeeper init` runs code stored in the repository.
 So don't use it on repositories from untrusted sources.
 
 
-## what etckeeper does
+## What etckeeper does
 
 etckeeper has special support to handle changes to /etc caused by
 installing and upgrading packages. Before apt installs packages,
@@ -79,7 +79,7 @@ Darcs doesn't support symlinks, so they are also stored in
 `/etc/.etckeeper`.
 
 
-## tutorial
+## Tutorial
 
 A quick walkthrough of using etckeeper.
 
@@ -194,7 +194,7 @@ machines, to deploy changes to /etc. Once /etc is under version control, the
 sky's the limit..
 
 
-## configuration
+## Configuration
 
 The main configuration file is `/etc/etckeeper/etckeeper.conf`
 
@@ -257,7 +257,7 @@ edit `etckeeper.conf` to change the VCS setting, and finally
 `etckeeper init`. This procedure is clearly only for the brave.
 
 
-## inspiration
+## Inspiration
 
 Two blog posts provided inspiration for techniques used by etckeeper:
 
@@ -272,16 +272,16 @@ setup procedure and hooks for setting up an /etc repository, and then gets
 out of your way; you manage the repository using regular VCS commands.
 
 
-## license
+## License
 
 etckeeper is licensed under version 2 or greater of the GNU GPL.
 
 
-## website
+## Website
 
 <https://etckeeper.branchable.com/>
 
 
-## author
+## Author
 
 Joey Hess <id@joeyh.name>

add news item for etckeeper 1.18.5
diff --git a/doc/news/version_1.17.mdwn b/doc/news/version_1.17.mdwn
deleted file mode 100644
index 2858376..0000000
--- a/doc/news/version_1.17.mdwn
+++ /dev/null
@@ -1,7 +0,0 @@
-etckeeper 1.17 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Fix name of DNF plugin.
-   * Add --version
-     Thanks Andreas Wansner.
-   * New website, http://etckeeper.branchable.com/
-   * Add build-depends on dh-python."""]]
\ No newline at end of file
diff --git a/doc/news/version_1.18.5.mdwn b/doc/news/version_1.18.5.mdwn
new file mode 100644
index 0000000..0d44e7b
--- /dev/null
+++ b/doc/news/version_1.18.5.mdwn
@@ -0,0 +1,8 @@
+etckeeper 1.18.5 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Make etckeeper commit store metadata changes. The pre-commit
+     hook has always (and continues) to do that, but pre-commit is only
+     run when there are changes to tommit. This makes metadata-only
+     changes get committed.
+   * Move systemd files to /lib/systemd; /usr/lib/systemd is not used
+     on Debian."""]]
\ No newline at end of file

Make etckeeper commit store metadata changes.
The pre-commit hook has always (and continues) to do that, but pre-commit
is only run when there are changes to tommit. This makes metadata-only
changes get committed.
Note that the reason the pre-commit hook continues to also store metadata
changes is to support manual git commit run in /etc.
diff --git a/commit.d/20store-metadata b/commit.d/20store-metadata
new file mode 120000
index 0000000..5698d64
--- /dev/null
+++ b/commit.d/20store-metadata
@@ -0,0 +1 @@
+../pre-commit.d/30store-metadata
\ No newline at end of file
diff --git a/debian/changelog b/debian/changelog
index bfbf713..36521e5 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,12 @@
+etckeeper (1.18.5) UNRELEASED; urgency=medium
+
+  * Make etckeeper commit store metadata changes. The pre-commit
+    hook has always (and continues) to do that, but pre-commit is only
+    run when there are changes to tommit. This makes metadata-only
+    changes get committed.
+
+ -- Joey Hess <id@joeyh.name>  Sun, 17 Jul 2016 18:45:18 -0400
+
 etckeeper (1.18.4) unstable; urgency=medium
 
   * Optimised find for special and hard linked files.
diff --git a/doc/todo/metadata_changes_don__39__t_cause_a_new_commit.mdwn b/doc/todo/metadata_changes_don__39__t_cause_a_new_commit.mdwn
index 5d4c9db..ad1813a 100644
--- a/doc/todo/metadata_changes_don__39__t_cause_a_new_commit.mdwn
+++ b/doc/todo/metadata_changes_don__39__t_cause_a_new_commit.mdwn
@@ -3,3 +3,5 @@ If the only changes in /etc are metadata changes that the VCS doesn't natively t
 This is because the metadata in `/etc/.etckeeper` is only updated from `etckeeper pre-commit`, which is only called by the VCS pre-commit hook; and since the VCS doesn't track the metadata changes, it doesn't think that a new commit needs to be made, and doesn't call the hook!
 
 I think the best solution might be to call `etckeeper pre-commit` from in `etckeeper commit`.
+
+> [[fixed|done]] --[[Joey]]

diff --git a/doc/todo/metadata_changes_don__39__t_cause_a_new_commit.mdwn b/doc/todo/metadata_changes_don__39__t_cause_a_new_commit.mdwn
new file mode 100644
index 0000000..5d4c9db
--- /dev/null
+++ b/doc/todo/metadata_changes_don__39__t_cause_a_new_commit.mdwn
@@ -0,0 +1,5 @@
+If the only changes in /etc are metadata changes that the VCS doesn't natively track, then etckeeper refuses to make a new commit for them.  At least with git.
+
+This is because the metadata in `/etc/.etckeeper` is only updated from `etckeeper pre-commit`, which is only called by the VCS pre-commit hook; and since the VCS doesn't track the metadata changes, it doesn't think that a new commit needs to be made, and doesn't call the hook!
+
+I think the best solution might be to call `etckeeper pre-commit` from in `etckeeper commit`.

add news item for etckeeper 1.18.4
diff --git a/doc/news/version_1.18.4.mdwn b/doc/news/version_1.18.4.mdwn
new file mode 100644
index 0000000..9b9bf0a
--- /dev/null
+++ b/doc/news/version_1.18.4.mdwn
@@ -0,0 +1,12 @@
+etckeeper 1.18.4 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Optimised find for special and hard linked files.
+     Thanks, Rike-Benjamin Schuppner.
+   * Adjust when Pacman 5 calls etckeeper hooks.
+     Thanks, Tilman Blumenbach and Christian Hesse.
+   * Only run Pacman hooks when files in /etc have changed.
+     Thanks, Christian Hesse.
+   * Added systemd timer that can run etckeeper 10 minutes after boot, and also
+     daily. It's not enabled by default, partly because of overlap with the
+     cron job.
+     Thanks, Christian Hesse."""]]
\ No newline at end of file

diff --git a/doc/todo/Give_preference_to_etckeeper.conf_over_existing_repository_for_defining___36__VCS.mdwn b/doc/todo/Give_preference_to_etckeeper.conf_over_existing_repository_for_defining___36__VCS.mdwn
new file mode 100644
index 0000000..da2f113
--- /dev/null
+++ b/doc/todo/Give_preference_to_etckeeper.conf_over_existing_repository_for_defining___36__VCS.mdwn
@@ -0,0 +1,41 @@
+I'm using etckeeper with hg and I will use git to manage some files under /etc apart from etckeeper for some reason.
+
+However, after I initialize new git repository as /etc/.git, etckeeper starts to use git as $VCS contrary to definition in etckeeper.conf. So I think that definition in etckeeper.conf should be given priority over existing repository.
+
+The patch is below (from https://github.com/hiraku/etckeeper/commit/02f6d37e50cacddc9605dcbc5c8844b3f4658d6e ):
+
+```diff
+diff --git a/etckeeper b/etckeeper
+index 93f2b00..6c63ffb 100755
+--- a/etckeeper
++++ b/etckeeper
+@@ -109,14 +109,16 @@ fi
+ cd "$ETCKEEPER_DIR"
+ export ETCKEEPER_DIR
+ 
+-if [ -d ".git" ]; then
+-       VCS=git
+-elif [ -d ".hg" ]; then
+-       VCS=hg
+-elif [ -d "_darcs" ]; then
+-       VCS=darcs
+-elif [ -d ".bzr" ]; then
+-       VCS=bzr
++if [ -z "$VCS" ]; then
++       if [ -d ".git" ]; then
++               VCS=git
++       elif [ -d ".hg" ]; then
++               VCS=hg
++       elif [ -d "_darcs" ]; then
++               VCS=darcs
++       elif [ -d ".bzr" ]; then
++               VCS=bzr
++       fi
+ fi
+ 
+ if [ -z "$VCS" ]; then
+```
+
+I would appreciate your consideration.
+
+Thank you.

Added a comment: This is needed for FreeBSD
diff --git a/doc/todo/track_multiple_directories/comment_10_89b0ea104e18ec73f743b6d3e9aee1a9._comment b/doc/todo/track_multiple_directories/comment_10_89b0ea104e18ec73f743b6d3e9aee1a9._comment
new file mode 100644
index 0000000..61f73d6
--- /dev/null
+++ b/doc/todo/track_multiple_directories/comment_10_89b0ea104e18ec73f743b6d3e9aee1a9._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="voltagex@69f6e3462800a695a8565ddc064de13207caf99f"
+ nickname="voltagex"
+ subject="This is needed for FreeBSD"
+ date="2016-03-20T04:43:30Z"
+ content="""
+FreeBSD splits configuration across /etc and /usr/local/etc
+"""]]

Adjust when Pacman 5 calls etckeeper hooks.
diff --git a/debian/changelog b/debian/changelog
index 33f2755..5ffa2f6 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -2,7 +2,7 @@ etckeeper (1.18.4) UNRELEASED; urgency=medium
 
   * Optimised find for special and hard linked files.
     Thanks, Rike-Benjamin Schuppner.
-  * Make Pacman 5 call etckeeper hooks as late as possible.
+  * Adjust when Pacman 5 calls etckeeper hooks.
     Thanks, Tilman Blumenbach.
 
  -- Joey Hess <id@joeyh.name>  Mon, 29 Feb 2016 11:12:08 -0400
diff --git a/doc/todo/Yet_another_patch_for_the_Pacman_5_hooks.mdwn b/doc/todo/Yet_another_patch_for_the_Pacman_5_hooks.mdwn
index b85e13a..e386b8e 100644
--- a/doc/todo/Yet_another_patch_for_the_Pacman_5_hooks.mdwn
+++ b/doc/todo/Yet_another_patch_for_the_Pacman_5_hooks.mdwn
@@ -18,3 +18,5 @@ My patch which makes Pacman call the pre-transaction hook as early as possible c
 <https://github.com/Tblue/etckeeper/commit/6ff4f922cd34689e0d61359ebd822af5f82c40a6.patch>
 
 Hopefully, this will be the last patch related to the Pacman hooks for some time... Sorry for the noise.
+
+> [[done]] --[[Joey]]

diff --git a/doc/todo/Yet_another_patch_for_the_Pacman_5_hooks.mdwn b/doc/todo/Yet_another_patch_for_the_Pacman_5_hooks.mdwn
new file mode 100644
index 0000000..b85e13a
--- /dev/null
+++ b/doc/todo/Yet_another_patch_for_the_Pacman_5_hooks.mdwn
@@ -0,0 +1,20 @@
+It turns out that my last patch ([[Patch:_Make_Pacman_5_call_etckeeper_hooks_as_late_as_possible]])
+was not perfect after all.
+
+Calling both the pre-transaction and the post-transaction hook as late as possible seemed to make
+sense at the time, but now that I think about it, I would say that only the post-transaction hook should be
+called after all other hooks; the **pre-transaction** hook should be called as **early** as possible.
+
+That way, the pre-transaction hook can make sure that...
+
+- ...everything in `/etc` gets committed before any other hook gets the chance to introduce more changes
+  (therefore making any changes made by other hooks part of the post-transaction commit) *and*...
+- ...it can abort the transaction and thus all hooks that come after the pre-transaction hook if `/etc`
+  is not clean and the user wants to prevent the package manager from running in that case. This prevents
+  any later hooks from making changes that should not be made in the first place (since the entire transaction
+  is being aborted due to a dirty `/etc`).
+
+My patch which makes Pacman call the pre-transaction hook as early as possible can be found here:
+<https://github.com/Tblue/etckeeper/commit/6ff4f922cd34689e0d61359ebd822af5f82c40a6.patch>
+
+Hopefully, this will be the last patch related to the Pacman hooks for some time... Sorry for the noise.

Added a comment
diff --git a/doc/todo/automatic_git_gc/comment_1_a0d10512edff8765066bac4bbc8a0561._comment b/doc/todo/automatic_git_gc/comment_1_a0d10512edff8765066bac4bbc8a0561._comment
new file mode 100644
index 0000000..b0413df
--- /dev/null
+++ b/doc/todo/automatic_git_gc/comment_1_a0d10512edff8765066bac4bbc8a0561._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="florian.kaiser@0f461a60da03d93431a5fdc965f53e6265e3f91e"
+ nickname="florian.kaiser"
+ subject="comment 1"
+ date="2016-03-08T13:32:03Z"
+ content="""
+Git does git gc automatically when needed.
+"""]]

Make Pacman 5 call etckeeper hooks as late as possible. Thanks, Tilman Blumenbach.
diff --git a/debian/changelog b/debian/changelog
index 7952bc7..33f2755 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -2,6 +2,8 @@ etckeeper (1.18.4) UNRELEASED; urgency=medium
 
   * Optimised find for special and hard linked files.
     Thanks, Rike-Benjamin Schuppner.
+  * Make Pacman 5 call etckeeper hooks as late as possible.
+    Thanks, Tilman Blumenbach.
 
  -- Joey Hess <id@joeyh.name>  Mon, 29 Feb 2016 11:12:08 -0400
 
diff --git a/doc/todo/Patch:_Make_Pacman_5_call_etckeeper_hooks_as_late_as_possible.mdwn b/doc/todo/Patch:_Make_Pacman_5_call_etckeeper_hooks_as_late_as_possible.mdwn
index 08f6721..59a42c8 100644
--- a/doc/todo/Patch:_Make_Pacman_5_call_etckeeper_hooks_as_late_as_possible.mdwn
+++ b/doc/todo/Patch:_Make_Pacman_5_call_etckeeper_hooks_as_late_as_possible.mdwn
@@ -3,3 +3,5 @@ have no numerical prefix -- which is needed in order to ensure that Pacman calls
 
 My patch remedies that minor issue by adding the proper numerical prefix to the filenames of the Pacman 5 hooks. It may be found here:
 <https://github.com/Tblue/etckeeper/commit/33b2d1edb9dac1ad04cf8ab100b8edff0b004dd1.patch>
+
+> [[done]] thanks --[[Joey]] 

Fix typo in my comment.
diff --git a/doc/todo/Patch:_Make_Pacman_5_call_etckeeper_hooks_as_late_as_possible.mdwn b/doc/todo/Patch:_Make_Pacman_5_call_etckeeper_hooks_as_late_as_possible.mdwn
index 6b076af..08f6721 100644
--- a/doc/todo/Patch:_Make_Pacman_5_call_etckeeper_hooks_as_late_as_possible.mdwn
+++ b/doc/todo/Patch:_Make_Pacman_5_call_etckeeper_hooks_as_late_as_possible.mdwn
@@ -1,5 +1,5 @@
 Pacman 5 calls its hooks in alphabetical order. The hooks I added in my previous patch (see [[__91__Patch__93___Support_Pacman_5.x_hooks]])
-have no numerical prefix -- which are needed in order to ensure that pacman calls the hooks as late as possible (i. e. after all other hooks).
+have no numerical prefix -- which is needed in order to ensure that Pacman calls the hooks as late as possible (i. e. after all other hooks).
 
 My patch remedies that minor issue by adding the proper numerical prefix to the filenames of the Pacman 5 hooks. It may be found here:
 <https://github.com/Tblue/etckeeper/commit/33b2d1edb9dac1ad04cf8ab100b8edff0b004dd1.patch>

diff --git a/doc/todo/Patch:_Make_Pacman_5_call_etckeeper_hooks_as_late_as_possible.mdwn b/doc/todo/Patch:_Make_Pacman_5_call_etckeeper_hooks_as_late_as_possible.mdwn
new file mode 100644
index 0000000..6b076af
--- /dev/null
+++ b/doc/todo/Patch:_Make_Pacman_5_call_etckeeper_hooks_as_late_as_possible.mdwn
@@ -0,0 +1,5 @@
+Pacman 5 calls its hooks in alphabetical order. The hooks I added in my previous patch (see [[__91__Patch__93___Support_Pacman_5.x_hooks]])
+have no numerical prefix -- which are needed in order to ensure that pacman calls the hooks as late as possible (i. e. after all other hooks).
+
+My patch remedies that minor issue by adding the proper numerical prefix to the filenames of the Pacman 5 hooks. It may be found here:
+<https://github.com/Tblue/etckeeper/commit/33b2d1edb9dac1ad04cf8ab100b8edff0b004dd1.patch>

add news item for etckeeper 1.18.3
diff --git a/doc/news/version_1.18.3.mdwn b/doc/news/version_1.18.3.mdwn
new file mode 100644
index 0000000..e713eae
--- /dev/null
+++ b/doc/news/version_1.18.3.mdwn
@@ -0,0 +1,14 @@
+etckeeper 1.18.3 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Added support for pacmatic, contributed by nicolaichuk.
+   * bzr: make sure EMAIL is defined
+     Thanks, Serge E. Hallyn
+   * Fix Makefile version patterns to ignore non-native version number
+     (Antoine Beaupré)
+   * Support ~/.config/git/config when determining the author name and email.
+     Thanks, Richard Savio
+   * Added support for Arch's pacman package manager version 5.
+     Thanks, Tilman Blumenbach.
+   * Set HOME if it's not set, as is the case when using ubuntu's
+     update-manager.
+   * Move bash completion out of etc and into usr."""]]
\ No newline at end of file

Set HOME if it's not set, as is the case when using ubuntu's update-manager.
diff --git a/debian/changelog b/debian/changelog
index 133618f..aecd60f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -9,6 +9,7 @@ etckeeper (1.18.3) UNRELEASED; urgency=medium
     Thanks, Richard Savio
   * Added support for Arch's pacman package manager version 5.
     Thanks, Tilman Blumenbach.
+  * Set HOME if it's not set, as is the case when using ubuntu's update-manager.
 
  -- Joey Hess <id@joeyh.name>  Mon, 21 Sep 2015 16:38:03 -0400
 
diff --git a/doc/todo/etckeeper_with_git_breaks_update-manager_.mdwn b/doc/todo/etckeeper_with_git_breaks_update-manager_.mdwn
index b74f97c..b2bfe96 100644
--- a/doc/todo/etckeeper_with_git_breaks_update-manager_.mdwn
+++ b/doc/todo/etckeeper_with_git_breaks_update-manager_.mdwn
@@ -28,3 +28,5 @@ But when the update-manger install new packet versions it ends with an "installa
     SourcePackage: etckeeper
     UpgradeStatus: No upgrade log present (probably fresh install)
     mtime.conffile..etc.etckeeper.etckeeper.conf: 2014-03-30T16:33:03.109833
+
+> [[done]] --[[Joey]]
diff --git a/doc/todo/etckeeper_with_git_breaks_update-manager_/comment_2_0324393d5a4f4e6a6174c27f1a53e886._comment b/doc/todo/etckeeper_with_git_breaks_update-manager_/comment_2_0324393d5a4f4e6a6174c27f1a53e886._comment
new file mode 100644
index 0000000..8a25023
--- /dev/null
+++ b/doc/todo/etckeeper_with_git_breaks_update-manager_/comment_2_0324393d5a4f4e6a6174c27f1a53e886._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2016-02-15T17:09:15Z"
+ content="""
+user.email and user.name are set by etckeeper to sane fallback defaults.
+ubuntu has a seriously ancient version of etckeeper, which predates that.
+
+I've added a default for HOME.
+"""]]
diff --git a/etckeeper b/etckeeper
index d85ebb6..5a3ca25 100755
--- a/etckeeper
+++ b/etckeeper
@@ -59,6 +59,11 @@ if [ ! -z "$PUSH_REMOTE" ]; then
 	export PUSH_REMOTE
 fi
 
+if [ -z "$HOME" ]; then
+	HOME=~root
+	export HOME
+fi
+
 if [ -z "$1" ]; then
 	usage
 elif [ "x$1" = "x-h" ] || [ "x$1" = "x--help" ]; then

Added a comment: Workaround
diff --git a/doc/todo/etckeeper_with_git_breaks_update-manager_/comment_1_2ae8af745340c6f4d5ee87c74c96e870._comment b/doc/todo/etckeeper_with_git_breaks_update-manager_/comment_1_2ae8af745340c6f4d5ee87c74c96e870._comment
new file mode 100644
index 0000000..de0814d
--- /dev/null
+++ b/doc/todo/etckeeper_with_git_breaks_update-manager_/comment_1_2ae8af745340c6f4d5ee87c74c96e870._comment
@@ -0,0 +1,26 @@
+[[!comment format=mdwn
+ username="https://launchpad.net/~codex24"
+ nickname="codex24"
+ subject="Workaround"
+ date="2016-02-14T23:12:10Z"
+ content="""
+With etckeeper installed in Ubuntu using git as its VCS, using the Ubuntu Software Center fails with errors 
+
+    installArchives() failed: fatal: $HOME not set
+
+Correct this by adding the following file, /etc/etckeeper/pre-install.d/20setenv:
+
+    #!/bin/sh
+    # /etc/etckeeper/pre-install.d/20setenv: set HOME dir due to 
+    # unpassed environment in priviledge escallation of Ubuntu Software Center.
+    # see https://bugs.launchpad.net/ubuntu/+source/etckeeper/+bug/1335391
+    if \[[ -z \"$HOME\" ]]; then
+        export HOME=$(getent passwd root | cut -d: -f6)
+    fi
+
+Also, ensure that the root account's git environment is properly initialized:
+
+    root@janus:/etc# git config -l
+    user.name=Root Janus
+    user.email=codex24@gmail.com
+"""]]

removed
diff --git a/doc/todo/etckeeper_with_git_breaks_update-manager_/comment_1_edc0c3a66c1118fefd952b7a9b3c1057._comment b/doc/todo/etckeeper_with_git_breaks_update-manager_/comment_1_edc0c3a66c1118fefd952b7a9b3c1057._comment
deleted file mode 100644
index 9374da4..0000000
--- a/doc/todo/etckeeper_with_git_breaks_update-manager_/comment_1_edc0c3a66c1118fefd952b7a9b3c1057._comment
+++ /dev/null
@@ -1,26 +0,0 @@
-[[!comment format=mdwn
- username="https://launchpad.net/~codex24"
- nickname="codex24"
- subject="comment 1"
- date="2016-02-14T23:06:05Z"
- content="""
-With etckeeper installed in Ubuntu using git as its VCS, using the Ubuntu Software Center fails with errors 
-
-    installArchives() failed: fatal: $HOME not set
-
-Correct this by adding the following file, /etc/etckeeper/pre-install.d/20setenv:
-
-    #!/bin/sh
-    # /etc/etckeeper/pre-install.d/20setenv: set HOME dir due to 
-    # unpassed environment in priviledge escallation of Ubuntu Software Center.
-    # see https://bugs.launchpad.net/ubuntu/+source/etckeeper/+bug/1335391
-    if [[ -z \"$HOME\" ]]; then
-        export HOME=$(getent passwd root | cut -d: -f6)
-    fi
-
-Also, ensure that the root account's git environment is properly initialized:
-
-    root@janus:/etc# git config -l
-    user.name=Root Janus
-    user.email=codex24@gmail.com
-"""]]

Added a comment
diff --git a/doc/todo/etckeeper_with_git_breaks_update-manager_/comment_1_edc0c3a66c1118fefd952b7a9b3c1057._comment b/doc/todo/etckeeper_with_git_breaks_update-manager_/comment_1_edc0c3a66c1118fefd952b7a9b3c1057._comment
new file mode 100644
index 0000000..9374da4
--- /dev/null
+++ b/doc/todo/etckeeper_with_git_breaks_update-manager_/comment_1_edc0c3a66c1118fefd952b7a9b3c1057._comment
@@ -0,0 +1,26 @@
+[[!comment format=mdwn
+ username="https://launchpad.net/~codex24"
+ nickname="codex24"
+ subject="comment 1"
+ date="2016-02-14T23:06:05Z"
+ content="""
+With etckeeper installed in Ubuntu using git as its VCS, using the Ubuntu Software Center fails with errors 
+
+    installArchives() failed: fatal: $HOME not set
+
+Correct this by adding the following file, /etc/etckeeper/pre-install.d/20setenv:
+
+    #!/bin/sh
+    # /etc/etckeeper/pre-install.d/20setenv: set HOME dir due to 
+    # unpassed environment in priviledge escallation of Ubuntu Software Center.
+    # see https://bugs.launchpad.net/ubuntu/+source/etckeeper/+bug/1335391
+    if [[ -z \"$HOME\" ]]; then
+        export HOME=$(getent passwd root | cut -d: -f6)
+    fi
+
+Also, ensure that the root account's git environment is properly initialized:
+
+    root@janus:/etc# git config -l
+    user.name=Root Janus
+    user.email=codex24@gmail.com
+"""]]

fix formatting of example text
diff --git a/doc/todo/etckeeper_with_git_breaks_update-manager_.mdwn b/doc/todo/etckeeper_with_git_breaks_update-manager_.mdwn
index 1b76c8d..b74f97c 100644
--- a/doc/todo/etckeeper_with_git_breaks_update-manager_.mdwn
+++ b/doc/todo/etckeeper_with_git_breaks_update-manager_.mdwn
@@ -1,29 +1,30 @@
 [Ubuntu LaunchPad bug #1335391](https://bugs.launchpad.net/ubuntu/+source/etckeeper/+bug/1335391)
+(Quoting the LaunchPad bug below, but I have experienced this issue in an identical manner.)
 
-I have configured etckeeper to use git. It works fine if I use apt-get or synaptic paket manager.
+I have configured etckeeper to use git. It works fine if I use apt-get or synaptic packet manager.
 
-But when the update-manger install new packet versions it ends with an "installation falied" message. When I check the status of the git repository in the etc directory, some changes are not commited, e.g.:
+But when the update-manger install new packet versions it ends with an "installation failed" message. When I check the status of the git repository in the etc directory, some changes are not commited, e.g.:
 
-On branch master
-Changes to be committed:
-  (use "git reset HEAD <file>..." to unstage)
+    On branch master
+    Changes to be committed:
+      (use "git reset HEAD <file>..." to unstage)
+    
+      modified: apt/apt.conf.d/01autoremove-kernels
+      modified: init.d/resolvconf
 
- modified: apt/apt.conf.d/01autoremove-kernels
- modified: init.d/resolvconf
-
-ProblemType: Bug
-DistroRelease: Ubuntu 14.04
-Package: etckeeper 1.9ubuntu2
-ProcVersionSignature: Ubuntu 3.13.0-29.53-generic 3.13.11.2
-Uname: Linux 3.13.0-29-generic x86_64
-NonfreeKernelModules: wl tbs6982fe tbs6680fe tbs6923fe tbs6985se tbs6928se tbs6982se tbs6991fe tbs6618fe tbs6922fe tbs6928fe tbs6991se
-ApportVersion: 2.14.1-0ubuntu3.2
-Architecture: amd64
-CurrentDesktop: Unity
-Date: Sat Jun 28 09:42:13 2014
-InstallationDate: Installed on 2014-03-30 (89 days ago)
-InstallationMedia: Ubuntu 14.04 LTS "Trusty Tahr" - Daily amd64 (20140329)
-PackageArchitecture: all
-SourcePackage: etckeeper
-UpgradeStatus: No upgrade log present (probably fresh install)
-mtime.conffile..etc.etckeeper.etckeeper.conf: 2014-03-30T16:33:03.109833
+    ProblemType: Bug
+    DistroRelease: Ubuntu 14.04
+    Package: etckeeper 1.9ubuntu2
+    ProcVersionSignature: Ubuntu 3.13.0-29.53-generic 3.13.11.2
+    Uname: Linux 3.13.0-29-generic x86_64
+    NonfreeKernelModules: wl tbs6982fe tbs6680fe tbs6923fe tbs6985se tbs6928se tbs6982se tbs6991fe tbs6618fe tbs6922fe tbs6928fe tbs6991se
+    ApportVersion: 2.14.1-0ubuntu3.2
+    Architecture: amd64
+    CurrentDesktop: Unity
+    Date: Sat Jun 28 09:42:13 2014
+    InstallationDate: Installed on 2014-03-30 (89 days ago)
+    InstallationMedia: Ubuntu 14.04 LTS "Trusty Tahr" - Daily amd64 (20140329)
+    PackageArchitecture: all
+    SourcePackage: etckeeper
+    UpgradeStatus: No upgrade log present (probably fresh install)
+    mtime.conffile..etc.etckeeper.etckeeper.conf: 2014-03-30T16:33:03.109833

Pointer to etckeeper in Ubuntu LaunchPad
diff --git a/doc/todo/etckeeper_with_git_breaks_update-manager_.mdwn b/doc/todo/etckeeper_with_git_breaks_update-manager_.mdwn
new file mode 100644
index 0000000..1b76c8d
--- /dev/null
+++ b/doc/todo/etckeeper_with_git_breaks_update-manager_.mdwn
@@ -0,0 +1,29 @@
+[Ubuntu LaunchPad bug #1335391](https://bugs.launchpad.net/ubuntu/+source/etckeeper/+bug/1335391)
+
+I have configured etckeeper to use git. It works fine if I use apt-get or synaptic paket manager.
+
+But when the update-manger install new packet versions it ends with an "installation falied" message. When I check the status of the git repository in the etc directory, some changes are not commited, e.g.:
+
+On branch master
+Changes to be committed:
+  (use "git reset HEAD <file>..." to unstage)
+
+ modified: apt/apt.conf.d/01autoremove-kernels
+ modified: init.d/resolvconf
+
+ProblemType: Bug
+DistroRelease: Ubuntu 14.04
+Package: etckeeper 1.9ubuntu2
+ProcVersionSignature: Ubuntu 3.13.0-29.53-generic 3.13.11.2
+Uname: Linux 3.13.0-29-generic x86_64
+NonfreeKernelModules: wl tbs6982fe tbs6680fe tbs6923fe tbs6985se tbs6928se tbs6982se tbs6991fe tbs6618fe tbs6922fe tbs6928fe tbs6991se
+ApportVersion: 2.14.1-0ubuntu3.2
+Architecture: amd64
+CurrentDesktop: Unity
+Date: Sat Jun 28 09:42:13 2014
+InstallationDate: Installed on 2014-03-30 (89 days ago)
+InstallationMedia: Ubuntu 14.04 LTS "Trusty Tahr" - Daily amd64 (20140329)
+PackageArchitecture: all
+SourcePackage: etckeeper
+UpgradeStatus: No upgrade log present (probably fresh install)
+mtime.conffile..etc.etckeeper.etckeeper.conf: 2014-03-30T16:33:03.109833

Added support for Arch's pacman package manager version 5. Thanks, Tilman Blumenbach.
diff --git a/debian/changelog b/debian/changelog
index f47b051..133618f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -7,6 +7,8 @@ etckeeper (1.18.3) UNRELEASED; urgency=medium
     (Antoine Beaupré)
   * Support ~/.config/git/config when determining the author name and email.
     Thanks, Richard Savio
+  * Added support for Arch's pacman package manager version 5.
+    Thanks, Tilman Blumenbach.
 
  -- Joey Hess <id@joeyh.name>  Mon, 21 Sep 2015 16:38:03 -0400
 
diff --git a/doc/todo/__91__Patch__93___Support_Pacman_5.x_hooks.mdwn b/doc/todo/__91__Patch__93___Support_Pacman_5.x_hooks.mdwn
index 2854740..02c8ff5 100644
--- a/doc/todo/__91__Patch__93___Support_Pacman_5.x_hooks.mdwn
+++ b/doc/todo/__91__Patch__93___Support_Pacman_5.x_hooks.mdwn
@@ -6,3 +6,5 @@ I have added the necessary hook files to etckeeper and also modified the `Makefi
 `pacman` as the `LOWLEVEL_PACKAGE_MANAGER`.
 
 You can find my patch [here](https://github.com/joeyh/etckeeper/compare/master...Tblue:master.patch). Please consider applying it. :-)
+
+> merged, thanks. [[done]] --[[Joey]]

diff --git a/doc/todo/__91__Patch__93___Support_Pacman_5.x_hooks.mdwn b/doc/todo/__91__Patch__93___Support_Pacman_5.x_hooks.mdwn
new file mode 100644
index 0000000..2854740
--- /dev/null
+++ b/doc/todo/__91__Patch__93___Support_Pacman_5.x_hooks.mdwn
@@ -0,0 +1,8 @@
+The 5.0.0 release of Arch Linux' *Pacman* package manager
+[finally supports hooks](https://projects.archlinux.org/pacman.git/tree/NEWS?id=fea9abc8db3b8161ab32774a0ddd7c405cfbe44f),
+making it possible to properly integrate etckeeper with it.
+
+I have added the necessary hook files to etckeeper and also modified the `Makefile` to install them if the user chooses
+`pacman` as the `LOWLEVEL_PACKAGE_MANAGER`.
+
+You can find my patch [here](https://github.com/joeyh/etckeeper/compare/master...Tblue:master.patch). Please consider applying it. :-)

close this
diff --git a/doc/todo/freebsd_pkgng_plugin.mdwn b/doc/todo/freebsd_pkgng_plugin.mdwn
index 359f37b..431562f 100644
--- a/doc/todo/freebsd_pkgng_plugin.mdwn
+++ b/doc/todo/freebsd_pkgng_plugin.mdwn
@@ -4,4 +4,5 @@ Basic working plugin available at: <https://github.com/radhus/etckeeper/commit/f
 
 > I've merged this. Of course it would be good to get the main Makefile
 > able to install it. Please open new todos if you have updates and thanks!
+> [[done]]
 > --[[Joey]]

Added a comment: Track multiple dirs for all commands
diff --git a/doc/todo/track_multiple_directories/comment_9_63c1293cf56b1229d3b7e454306b74e0._comment b/doc/todo/track_multiple_directories/comment_9_63c1293cf56b1229d3b7e454306b74e0._comment
new file mode 100644
index 0000000..381a2c7
--- /dev/null
+++ b/doc/todo/track_multiple_directories/comment_9_63c1293cf56b1229d3b7e454306b74e0._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="abozhenko@10aed7e09adef30729c54d5f74e1d94bc22dc6e2"
+ nickname="abozhenko"
+ subject="Track multiple dirs for all commands"
+ date="2015-11-22T04:03:37Z"
+ content="""
+Hello. 
+Please take a look:
+https://github.com/joeyh/etckeeper/pull/30
+
+I tried to add support for multiple dirs for all commands, and leave it compatible with default old config and cli.
+
+This feature may be useful when you want to have more control on your system. There are other locations which do contain config/code that may be changed, and affects system, e.g.: 
+python code at /usr/lib/python2.7/dist-packages/
+pacemaker scripts at /usr/lib/ocf/resource.d/fuel
+libvirt vms xmls at /var/lib/nova/instances/*/*.xml
+...
+"""]]

Added support for pacmatic, contributed by nicolaichuk.
diff --git a/debian/changelog b/debian/changelog
index 23996b8..5e6dba2 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+etckeeper (1.18.3) UNRELEASED; urgency=medium
+
+  * Added support for pacmatic, contributed by nicolaichuk.
+
+ -- Joey Hess <id@joeyh.name>  Mon, 21 Sep 2015 16:38:03 -0400
+
 etckeeper (1.18.2) unstable; urgency=medium
 
   * Use getent utility instead of perl. (Elan Ruusamäe)
diff --git a/doc/todo/add_support_pacmatic_http:__47____47__kmkeen.com__47__pacmatic__47__.mdwn b/doc/todo/add_support_pacmatic_http:__47____47__kmkeen.com__47__pacmatic__47__.mdwn
index a2bec83..a1e71fe 100644
--- a/doc/todo/add_support_pacmatic_http:__47____47__kmkeen.com__47__pacmatic__47__.mdwn
+++ b/doc/todo/add_support_pacmatic_http:__47____47__kmkeen.com__47__pacmatic__47__.mdwn
@@ -3,3 +3,5 @@ Please add support pacmatic http://kmkeen.com/pacmatic/
 https://github.com/nicolaichuk/etckeeper/commit/52846aebb91770e3bbc466881998714c88cbcaa6
 
 Patch attached: 'add_support_pacmatic.patch'
+
+> [[merged|done]] --[[Joey]]

Patch for support pacmatic
diff --git a/doc/todo/add_support_pacmatic_http:__47____47__kmkeen.com__47__pacmatic__47__.mdwn b/doc/todo/add_support_pacmatic_http:__47____47__kmkeen.com__47__pacmatic__47__.mdwn
new file mode 100644
index 0000000..a2bec83
--- /dev/null
+++ b/doc/todo/add_support_pacmatic_http:__47____47__kmkeen.com__47__pacmatic__47__.mdwn
@@ -0,0 +1,5 @@
+Please add support pacmatic http://kmkeen.com/pacmatic/
+
+https://github.com/nicolaichuk/etckeeper/commit/52846aebb91770e3bbc466881998714c88cbcaa6
+
+Patch attached: 'add_support_pacmatic.patch'

diff --git a/doc/todo/Do_not_recreate_ignored_empty_directory.mdwn b/doc/todo/Do_not_recreate_ignored_empty_directory.mdwn
new file mode 100644
index 0000000..ee13ae6
--- /dev/null
+++ b/doc/todo/Do_not_recreate_ignored_empty_directory.mdwn
@@ -0,0 +1,8 @@
+Hi
+
+* I made some change to have a more powerful ignore_filter https://github.com/jeremiejig/etckeeper/commit/faed9ba87a71a2d09cf078c0154bd3a6bd36786a
+The filtering process concern only **git**.
+
+* And I filter the empty directories to avoid creating ignored empty directories https://github.com/jeremiejig/etckeeper/commit/4f257707ed85097a93289b4a33f18ea21dcf3a6e
+
+Tell me what you think.

Added a comment: Very good idea
diff --git a/doc/todo/track_multiple_directories/comment_8_98d099e5947fb750e5ae9f79b70e318e._comment b/doc/todo/track_multiple_directories/comment_8_98d099e5947fb750e5ae9f79b70e318e._comment
new file mode 100644
index 0000000..c01841b
--- /dev/null
+++ b/doc/todo/track_multiple_directories/comment_8_98d099e5947fb750e5ae9f79b70e318e._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="godblessfq@70ee431d0873d190e6376c984749de668791e42c"
+ nickname="godblessfq"
+ subject="Very good idea"
+ date="2015-08-14T20:40:28Z"
+ content="""
+It would be very nice to keep all my configuration in one repo. 
+"""]]

add news item for etckeeper 1.18.2
diff --git a/doc/news/version_1.18.2.mdwn b/doc/news/version_1.18.2.mdwn
new file mode 100644
index 0000000..fe38994
--- /dev/null
+++ b/doc/news/version_1.18.2.mdwn
@@ -0,0 +1,7 @@
+etckeeper 1.18.2 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Use getent utility instead of perl. (Elan Ruusamäe)
+   * Initial FreeBSD support with pkgng plugin. (William Johansson)
+   * Fix README.md symlink in package (Sebastian Schmidt, Antoine Beaupré,
+     closes: #[791566](http://bugs.debian.org/791566))
+   * Fix typo of GIT\_COMMITTER\_EMAIL."""]]
\ No newline at end of file

Fix typo of GIT_COMMITTER_EMAIL.
diff --git a/commit.d/50vcs-commit b/commit.d/50vcs-commit
index 1d9ade4..43af353 100755
--- a/commit.d/50vcs-commit
+++ b/commit.d/50vcs-commit
@@ -55,8 +55,8 @@ if [ "$VCS" = git ] && [ -d .git ]; then
 			fi
 		fi
 		if [ -z "$GIT_COMMITTER_EMAIL" ]; then
-			GIT_COMMITER_EMAIL="$(git config --global user.email)" || true
-			export GIT_COMMITER_EMAIL
+			GIT_COMMITTER_EMAIL="$(git config --global user.email)" || true
+			export GIT_COMMITTER_EMAIL
 		fi
 
 		if [ -z "$GIT_AUTHOR_NAME" ]; then
diff --git a/debian/changelog b/debian/changelog
index cd12ca5..7f99d09 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -4,6 +4,7 @@ etckeeper (1.18.2) UNRELEASED; urgency=medium
   * Initial FreeBSD support with pkgng plugin. (William Johansson)
   * Fix README.md symlink in package (Sebastian Schmidt, Antoine Beaupré,
     closes: #791566)
+  * Fix typo of GIT_COMMITTER_EMAIL.
 
  -- Joey Hess <id@joeyh.name>  Mon, 01 Jun 2015 09:15:34 -0400
 
diff --git a/doc/todo/Correct_misspelling_of___34__committer__34__.mdwn b/doc/todo/Correct_misspelling_of___34__committer__34__.mdwn
index 9ecd90d..2f0fc92 100644
--- a/doc/todo/Correct_misspelling_of___34__committer__34__.mdwn
+++ b/doc/todo/Correct_misspelling_of___34__committer__34__.mdwn
@@ -4,3 +4,4 @@ https://github.com/joeyh/etckeeper/blob/master/commit.d/50vcs-commit#L58-L59
 
 This is causing git to incorrectly attribute commits to root instead of the name and email specified in ~/.gitconfig.
 
+> [[fixed|done]] --[[Joey]]

diff --git a/doc/todo/Correct_misspelling_of___34__committer__34__.mdwn b/doc/todo/Correct_misspelling_of___34__committer__34__.mdwn
new file mode 100644
index 0000000..9ecd90d
--- /dev/null
+++ b/doc/todo/Correct_misspelling_of___34__committer__34__.mdwn
@@ -0,0 +1,6 @@
+In commit.d/50vcs-commit the word "committer" is misspelled twice (as "commiter"). Here it is in the code:
+
+https://github.com/joeyh/etckeeper/blob/master/commit.d/50vcs-commit#L58-L59
+
+This is causing git to incorrectly attribute commits to root instead of the name and email specified in ~/.gitconfig.
+

Typo
Is it really **h**ackup?
diff --git a/doc/README.mdwn b/doc/README.mdwn
index 4528eb3..1877124 100644
--- a/doc/README.mdwn
+++ b/doc/README.mdwn
@@ -187,7 +187,7 @@ run "etckeeper init" to update file permissions.)
 Incidentially, this also means I have a backup of dodo's /etc on darkstar.
 So if darkstar is compromised, that data could be used to attack dodo
 too. On the other hand, if dodo's disk dies, I can restore it from this
-handy hackup.
+handy backup.
 
 Of course, it's also possible to pull changes from a server onto client
 machines, to deploy changes to /etc. Once /etc is under version control, the

review
diff --git a/doc/todo/remove_remaining_perl_usage/comment_1_c901ff31a0cddf4912123c6443876327._comment b/doc/todo/remove_remaining_perl_usage/comment_1_c901ff31a0cddf4912123c6443876327._comment
new file mode 100644
index 0000000..0841dad
--- /dev/null
+++ b/doc/todo/remove_remaining_perl_usage/comment_1_c901ff31a0cddf4912123c6443876327._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-06-10T19:50:30Z"
+ content="""
+Reviewing this patch, I noticed a bug in the first hunk. lsscripts
+currently limits the files it finds to those matching a regexp. IIRC, this
+is needed, amoung other things, to avoid .dpkg-old files being run.
+
+Looking at the second hunk, I suspect that calling `id` twice per file is
+going to be significantly slower than the perl implementation.
+
+There also seems to be missing escaping of single quotes in filenames in
+the second hunk.
+"""]]

merged pkgng plugin
diff --git a/debian/changelog b/debian/changelog
index 8157f10..6e319fa 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,6 +1,7 @@
 etckeeper (1.18.2) UNRELEASED; urgency=medium
 
   * Use getent utility instead of perl. (Elan Ruusamäe)
+  * Initial FreeBSD support with pkgng plugin. (William Johansson)
 
  -- Joey Hess <id@joeyh.name>  Mon, 01 Jun 2015 09:15:34 -0400
 
diff --git a/doc/todo/freebsd_pkgng_plugin.mdwn b/doc/todo/freebsd_pkgng_plugin.mdwn
index 81edb89..359f37b 100644
--- a/doc/todo/freebsd_pkgng_plugin.mdwn
+++ b/doc/todo/freebsd_pkgng_plugin.mdwn
@@ -1,3 +1,7 @@
 Get the same integration with FreeBSD pkg as with other package managers.
 
 Basic working plugin available at: <https://github.com/radhus/etckeeper/commit/f849bcc558c2c83b8738e31d2aee56d979c39555>
+
+> I've merged this. Of course it would be good to get the main Makefile
+> able to install it. Please open new todos if you have updates and thanks!
+> --[[Joey]]

diff --git a/doc/todo/freebsd_pkgng_plugin.mdwn b/doc/todo/freebsd_pkgng_plugin.mdwn
new file mode 100644
index 0000000..81edb89
--- /dev/null
+++ b/doc/todo/freebsd_pkgng_plugin.mdwn
@@ -0,0 +1,3 @@
+Get the same integration with FreeBSD pkg as with other package managers.
+
+Basic working plugin available at: <https://github.com/radhus/etckeeper/commit/f849bcc558c2c83b8738e31d2aee56d979c39555>