commit etckeeper for openSUSE:Factory
Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package etckeeper for openSUSE:Factory checked in at 2024-09-12 16:56:22 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/etckeeper (Old) and /work/SRC/openSUSE:Factory/.etckeeper.new.17570 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "etckeeper" Thu Sep 12 16:56:22 2024 rev:12 rq:1200140 version:1.18.21 Changes: -------- --- /work/SRC/openSUSE:Factory/etckeeper/etckeeper.changes 2024-02-21 18:02:19.272122275 +0100 +++ /work/SRC/openSUSE:Factory/.etckeeper.new.17570/etckeeper.changes 2024-09-12 16:57:30.087709533 +0200 @@ -1,0 +2,17 @@ +Thu Aug 8 11:16:35 UTC 2024 - ecsos <ecsos@opensuse.org> + +- Update to 1.18.21 + - Consistently use mktemp if available, falling back to tempfile + otherwise. +- Changes from 1.18.20 + - Fix a reversion in etckeeper init in version 1.18.19. +- Changes from 1.18.19 + - Added support for Gentoo (emerge, qlist, and cave) + - Skip running pre-commit hook inside linked worktrees, + to avoid it updating .etckeeper with the permissions of + files not in /etc. + - commit: Run bzr with --quiet, since it outputs non-errors to + stderr. Closes: #1018874 +- Rebase etckeeper-set-package-manager.patch + +------------------------------------------------------------------- @@ -353 +369,0 @@ - Old: ---- etckeeper-1.18.18.tar.gz New: ---- etckeeper-1.18.21.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ etckeeper.spec ++++++ --- /var/tmp/diff_new_pack.T4WIch/_old 2024-09-12 16:57:33.195838977 +0200 +++ /var/tmp/diff_new_pack.T4WIch/_new 2024-09-12 16:57:33.195838977 +0200 @@ -34,7 +34,7 @@ %define make_args systemddir=%{_unitdir} PYTHON=%{python_versioned} %{python_args} Name: etckeeper -Version: 1.18.18 +Version: 1.18.21 Release: 0 Summary: Store /etc under Version Control License: GPL-2.0-or-later ++++++ etckeeper-1.18.18.tar.gz -> etckeeper-1.18.21.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/CHANGELOG new/etckeeper-1.18.21/CHANGELOG --- old/etckeeper-1.18.18/CHANGELOG 2022-09-08 18:13:15.000000000 +0200 +++ new/etckeeper-1.18.21/CHANGELOG 2023-11-28 19:09:38.000000000 +0100 @@ -1,3 +1,31 @@ +etckeeper (1.18.21) upstream; urgency=medium + + * Consistently use mktemp if available, falling back to tempfile + otherwise. + Thanks, Adam Dinwoodie + + -- Joey Hess <id@joeyh.name> Tue, 28 Nov 2023 14:09:16 -0400 + +etckeeper (1.18.20) upstream; urgency=medium + + * Fix a reversion in etckeeper init in version 1.18.19. + Thanks, Georgy Yakovlev + + -- Joey Hess <id@joeyh.name> Wed, 04 Jan 2023 13:23:19 -0400 + +etckeeper (1.18.19) upstream; urgency=medium + + * Added support for Gentoo (emerge, qlist, and cave) + Thanks, Sam James + * Skip running pre-commit hook inside linked worktrees, + to avoid it updating .etckeeper with the permissions of files + not in /etc. + Thanks, Håkon Løvdal + * commit: Run bzr with --quiet, since it outputs non-errors to stderr. + Closes: #1018874 + + -- Joey Hess <id@joeyh.name> Mon, 02 Jan 2023 14:18:29 -0400 + etckeeper (1.18.18) upstream; urgency=medium * Replace deprecated egrep with grep -E. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/commit.d/50vcs-commit new/etckeeper-1.18.21/commit.d/50vcs-commit --- old/etckeeper-1.18.18/commit.d/50vcs-commit 2022-09-08 18:13:15.000000000 +0200 +++ new/etckeeper-1.18.21/commit.d/50vcs-commit 2023-11-28 19:09:38.000000000 +0100 @@ -7,8 +7,17 @@ fi } if [ -n "$1" ]; then + if command -v mktemp >/dev/null; then + tempfile="mktemp -t etckeeper-$VCS.XXXXXXXXXX" + elif command -v tempfile >/dev/null; then + tempfile="tempfile" + else + echo "etckeeper warning: can't find tempfile or mktemp" >&2 + exit 1 + fi + trap cleanup EXIT - logfile="$(mktemp -t etckeeper-$VCS.XXXXXXXXXX)" + logfile="$($tempfile)" if [ "x$1" = "x--stdin" ]; then cat > "$logfile" else @@ -128,7 +137,7 @@ if [ -n "$logfile" ]; then bzr commit $BZR_COMMIT_OPTIONS -F "$logfile" else - bzr commit $BZR_COMMIT_OPTIONS + bzr commit --quiet $BZR_COMMIT_OPTIONS fi elif [ "$VCS" = darcs ] && [ -d _darcs ]; then if [ -z "$USER" ]; then diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/forum/Does_not_create_config/comment_1_295ecd7681224829e833536203269129._comment new/etckeeper-1.18.21/doc/forum/Does_not_create_config/comment_1_295ecd7681224829e833536203269129._comment --- old/etckeeper-1.18.18/doc/forum/Does_not_create_config/comment_1_295ecd7681224829e833536203269129._comment 2022-09-08 18:13:15.000000000 +0200 +++ new/etckeeper-1.18.21/doc/forum/Does_not_create_config/comment_1_295ecd7681224829e833536203269129._comment 1970-01-01 01:00:00.000000000 +0100 @@ -1,9 +0,0 @@ -[[!comment format=mdwn - username="katja.decuir@4e7c83f07a1d91a09af5d3eb1c954d7e0f5bae3a" - nickname="katja.decuir" - avatar="http://cdn.libravatar.org/avatar/133a3d2faf199a882a1ad990659907a0" - subject="edit" - date="2020-07-11T08:51:50Z" - content=""" -i can't even find a default config to copypaste on google. all those websites say \"default is fine\" but i dont even have default and the readme on the website isn't helpful -"""]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/forum/How_to_submit_pull_requests__63__/comment_1_a1ef90ca5f66af6c35ea66b6c520ddd5._comment new/etckeeper-1.18.21/doc/forum/How_to_submit_pull_requests__63__/comment_1_a1ef90ca5f66af6c35ea66b6c520ddd5._comment --- old/etckeeper-1.18.18/doc/forum/How_to_submit_pull_requests__63__/comment_1_a1ef90ca5f66af6c35ea66b6c520ddd5._comment 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/forum/How_to_submit_pull_requests__63__/comment_1_a1ef90ca5f66af6c35ea66b6c520ddd5._comment 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 1""" + date="2022-11-16T20:47:32Z" + content=""" +Just go to [[todo]] and make a post there, and include the url of the git +repository and branch to pull. +"""]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/forum/How_to_submit_pull_requests__63__.mdwn new/etckeeper-1.18.21/doc/forum/How_to_submit_pull_requests__63__.mdwn --- old/etckeeper-1.18.18/doc/forum/How_to_submit_pull_requests__63__.mdwn 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/forum/How_to_submit_pull_requests__63__.mdwn 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1 @@ +I have a few improvements that I'd like to submit, do you accept pull requests? diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/forum/How_would_I_rebase_all_commits_older_than_two_weeks__63__/comment_1_f4d51ea1f265f09ebbc37ef9d3242be1._comment new/etckeeper-1.18.21/doc/forum/How_would_I_rebase_all_commits_older_than_two_weeks__63__/comment_1_f4d51ea1f265f09ebbc37ef9d3242be1._comment --- old/etckeeper-1.18.18/doc/forum/How_would_I_rebase_all_commits_older_than_two_weeks__63__/comment_1_f4d51ea1f265f09ebbc37ef9d3242be1._comment 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/forum/How_would_I_rebase_all_commits_older_than_two_weeks__63__/comment_1_f4d51ea1f265f09ebbc37ef9d3242be1._comment 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,9 @@ +[[!comment format=mdwn + username="hlovdal" + nickname="kode" + avatar="http://cdn.libravatar.org/avatar/e513ee57b6b0d2c0ae8dfa4b9e85f566" + subject="This should not be necessary" + date="2022-11-27T17:50:02Z" + content=""" +Unless you have a super constrained environment like [openwrt](https://openwrt.org/) then disk usage of `/etc/.git` is completely ignorable (and even so, my openwrt router only uses 2.1Mb for `/etc/.git`, initial commit 2016). I checked all my servers and desktops and the largest was 196Mb on a machine that used to be my main desktop with the repository started in 2017. +"""]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/forum/Is_there_a_bug_tracker_for_etckeeper___63__/comment_1_33806aefc8706e6db0afec2a9672f3f0._comment new/etckeeper-1.18.21/doc/forum/Is_there_a_bug_tracker_for_etckeeper___63__/comment_1_33806aefc8706e6db0afec2a9672f3f0._comment --- old/etckeeper-1.18.18/doc/forum/Is_there_a_bug_tracker_for_etckeeper___63__/comment_1_33806aefc8706e6db0afec2a9672f3f0._comment 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/forum/Is_there_a_bug_tracker_for_etckeeper___63__/comment_1_33806aefc8706e6db0afec2a9672f3f0._comment 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,7 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 1""" + date="2022-10-04T16:37:11Z" + content=""" +See [[todo]]. +"""]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/forum/Is_there_a_bug_tracker_for_etckeeper___63__/comment_2_67b06a471f9021ec7e4d41cbaeb8b5bd._comment new/etckeeper-1.18.21/doc/forum/Is_there_a_bug_tracker_for_etckeeper___63__/comment_2_67b06a471f9021ec7e4d41cbaeb8b5bd._comment --- old/etckeeper-1.18.18/doc/forum/Is_there_a_bug_tracker_for_etckeeper___63__/comment_2_67b06a471f9021ec7e4d41cbaeb8b5bd._comment 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/forum/Is_there_a_bug_tracker_for_etckeeper___63__/comment_2_67b06a471f9021ec7e4d41cbaeb8b5bd._comment 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="jerrythepineapple" + avatar="http://cdn.libravatar.org/avatar/d152617d7827ea33fe921456f23a7672" + subject="comment 2" + date="2022-11-17T22:48:28Z" + content=""" +Thanks!! +"""]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/forum/Is_there_a_bug_tracker_for_etckeeper___63__.mdwn new/etckeeper-1.18.21/doc/forum/Is_there_a_bug_tracker_for_etckeeper___63__.mdwn --- old/etckeeper-1.18.18/doc/forum/Is_there_a_bug_tracker_for_etckeeper___63__.mdwn 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/forum/Is_there_a_bug_tracker_for_etckeeper___63__.mdwn 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1 @@ +Hi, I'm having trouble finding the bug tracker for etckeeper is there actually one ? Thanks. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/forum/Is_there_a_workaround_for_a_git_repository_under___47__etc__63__/comment_1_5eb9fcc0e3384f702da7e188b19c3858._comment new/etckeeper-1.18.21/doc/forum/Is_there_a_workaround_for_a_git_repository_under___47__etc__63__/comment_1_5eb9fcc0e3384f702da7e188b19c3858._comment --- old/etckeeper-1.18.18/doc/forum/Is_there_a_workaround_for_a_git_repository_under___47__etc__63__/comment_1_5eb9fcc0e3384f702da7e188b19c3858._comment 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/forum/Is_there_a_workaround_for_a_git_repository_under___47__etc__63__/comment_1_5eb9fcc0e3384f702da7e188b19c3858._comment 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,35 @@ +[[!comment format=mdwn + username="me_and" + avatar="http://cdn.libravatar.org/avatar/f8647c2810c056bbdb8857117708ae3d" + subject="comment 1" + date="2023-02-23T13:27:23Z" + content=""" +What are you trying to achieve here? I'm not sure what your goal is from the question. Would you rather… + +- Have etckeeper ignore the `/etc/myrepo` directory entirely +- Have etckeeper automatically commit changes to `/etc/myrepo` as a submodule, then automatically commit submodule changes to the `/etc` repository +- Have etckeeper not run daily commits at all +- Something else… + +If you _just_ want to disable the non-zero exit status, you can change `/etc/etckeeper/commit.d/50vcs-commit` to suppress the exit status. To do that, change the following lines: + +``` + if [ -n \"$logfile\" ]; then + git $GIT_GC_OPTIONS commit $GIT_COMMIT_OPTIONS -F \"$logfile\" + else + git $GIT_GC_OPTIONS commit $GIT_COMMIT_OPTIONS + fi +``` + +to + +``` + if [ -n \"$logfile\" ]; then + git $GIT_GC_OPTIONS commit $GIT_COMMIT_OPTIONS -F \"$logfile\" || : + else + git $GIT_GC_OPTIONS commit $GIT_COMMIT_OPTIONS || : + fi +``` + +But all that will do is prevent any errors from being reported, which I suspect isn't what you're after! All `etckeeper commit` is doing is running the scripts in `/etc/etckeeper/commit`, though, so you should be able to change it to do whatever you want just by editing those scripts. +"""]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/forum/Is_there_a_workaround_for_a_git_repository_under___47__etc__63__/comment_2_a9d66633132fe5d135499720e0beaaa3._comment new/etckeeper-1.18.21/doc/forum/Is_there_a_workaround_for_a_git_repository_under___47__etc__63__/comment_2_a9d66633132fe5d135499720e0beaaa3._comment --- old/etckeeper-1.18.18/doc/forum/Is_there_a_workaround_for_a_git_repository_under___47__etc__63__/comment_2_a9d66633132fe5d135499720e0beaaa3._comment 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/forum/Is_there_a_workaround_for_a_git_repository_under___47__etc__63__/comment_2_a9d66633132fe5d135499720e0beaaa3._comment 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="pulk" + avatar="http://cdn.libravatar.org/avatar/3aca97ac14e8c43b9da4a9070d45e443" + subject="Comment 2" + date="2023-02-28T11:41:37Z" + content=""" +Hi! And thanks for the tip. I think I am okay with the first and second option (ignore the dir completely or have as submodule) you provided. And I would indeed like to know about any other error messages, I do not wish to ignore them completely. +"""]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/forum/Is_there_a_workaround_for_a_git_repository_under___47__etc__63__/comment_3_39cb7f40edffb43b79fdb275670ffbd9._comment new/etckeeper-1.18.21/doc/forum/Is_there_a_workaround_for_a_git_repository_under___47__etc__63__/comment_3_39cb7f40edffb43b79fdb275670ffbd9._comment --- old/etckeeper-1.18.18/doc/forum/Is_there_a_workaround_for_a_git_repository_under___47__etc__63__/comment_3_39cb7f40edffb43b79fdb275670ffbd9._comment 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/forum/Is_there_a_workaround_for_a_git_repository_under___47__etc__63__/comment_3_39cb7f40edffb43b79fdb275670ffbd9._comment 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,12 @@ +[[!comment format=mdwn + username="me_and" + avatar="http://cdn.libravatar.org/avatar/f8647c2810c056bbdb8857117708ae3d" + subject="comment 3" + date="2023-03-02T20:46:48Z" + content=""" +In that case, I'd recommend just having the directory ignored: + +``` +sudo sed -i 1i/myrepo /etc/.gitignore +``` +"""]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/forum/Is_there_a_workaround_for_a_git_repository_under___47__etc__63__/comment_4_fb987b5a4ea73f83d01536f60f301a1a._comment new/etckeeper-1.18.21/doc/forum/Is_there_a_workaround_for_a_git_repository_under___47__etc__63__/comment_4_fb987b5a4ea73f83d01536f60f301a1a._comment --- old/etckeeper-1.18.18/doc/forum/Is_there_a_workaround_for_a_git_repository_under___47__etc__63__/comment_4_fb987b5a4ea73f83d01536f60f301a1a._comment 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/forum/Is_there_a_workaround_for_a_git_repository_under___47__etc__63__/comment_4_fb987b5a4ea73f83d01536f60f301a1a._comment 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,16 @@ +[[!comment format=mdwn + username="pulk" + avatar="http://cdn.libravatar.org/avatar/3aca97ac14e8c43b9da4a9070d45e443" + subject="comment 4" + date="2023-03-16T14:18:17Z" + content=""" +Unfortunately that does not work. I tried all these in /etc/.gitignore: + + myrepo + myrepo/* + /myrepo + /myrepo/* + +But I still get the error each time. + +"""]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/forum/Is_there_a_workaround_for_a_git_repository_under___47__etc__63__/comment_5_b6a7557835e91cf2e8f362913b6fc6ee._comment new/etckeeper-1.18.21/doc/forum/Is_there_a_workaround_for_a_git_repository_under___47__etc__63__/comment_5_b6a7557835e91cf2e8f362913b6fc6ee._comment --- old/etckeeper-1.18.18/doc/forum/Is_there_a_workaround_for_a_git_repository_under___47__etc__63__/comment_5_b6a7557835e91cf2e8f362913b6fc6ee._comment 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/forum/Is_there_a_workaround_for_a_git_repository_under___47__etc__63__/comment_5_b6a7557835e91cf2e8f362913b6fc6ee._comment 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,17 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 5""" + date="2023-04-21T16:02:43Z" + content=""" +Your repo has already been added as a submodule. That's why git commit is +complaining about it. + +If you put it in /etc/.gitignore before `etckeeper commit`, +it will be ignored from the beginning. + +At this point you will need to remove the submodule as well as ignoring it. + +I was a little surprised to see etckeeper adding git repos within /etc +as submodules, but it turns out that `git add --all` or `git add .` do add +submodules that way. +"""]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/forum/Is_there_a_workaround_for_a_git_repository_under___47__etc__63__/comment_6_cc18dab78617cec7efddb8b0450f7f07._comment new/etckeeper-1.18.21/doc/forum/Is_there_a_workaround_for_a_git_repository_under___47__etc__63__/comment_6_cc18dab78617cec7efddb8b0450f7f07._comment --- old/etckeeper-1.18.18/doc/forum/Is_there_a_workaround_for_a_git_repository_under___47__etc__63__/comment_6_cc18dab78617cec7efddb8b0450f7f07._comment 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/forum/Is_there_a_workaround_for_a_git_repository_under___47__etc__63__/comment_6_cc18dab78617cec7efddb8b0450f7f07._comment 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="pulk" + avatar="http://cdn.libravatar.org/avatar/3aca97ac14e8c43b9da4a9070d45e443" + subject="comment 6" + date="2023-04-25T05:43:57Z" + content=""" +Thanks! That solved the issue. I did not remember that I had previously attempted to add it as submodule to workaround the issue. +"""]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/forum/Is_there_a_workaround_for_a_git_repository_under___47__etc__63__.mdwn new/etckeeper-1.18.21/doc/forum/Is_there_a_workaround_for_a_git_repository_under___47__etc__63__.mdwn --- old/etckeeper-1.18.18/doc/forum/Is_there_a_workaround_for_a_git_repository_under___47__etc__63__.mdwn 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/forum/Is_there_a_workaround_for_a_git_repository_under___47__etc__63__.mdwn 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,17 @@ +I did some research and found out that there is no good way to avoid etckeeper commit "daily autocommit" exiting with status code other than zero if there is a git repository under the /etc hierarchy? This causes the /etc/cron.daily/etckeeper to send an e-mail every day with body "run-parts: /etc/cron.daily/etckeeper exited with return code 1." + +I've attempted to add the repo as git submodule in /etc/.gitmodules and tried to add "-path ./myrepo -prune -o" to the NOVCS in /etc/etckeeper/pre-commit.d/30store-metadata but neither of these fixed the issue. + +If I have a git repo in /etc/myrepo: + + # etckeeper commit "daily autocommit" + On branch master + Changes not staged for commit: + (use "git add <file>..." to update what will be committed) + (use "git restore <file>..." to discard changes in working directory) + (commit or discard the untracked or modified content in submodules) + modified: myrepo (untracked content) + + no changes added to commit (use "git add" and/or "git commit -a") + # echo $? + 1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/forum/List_of_files_or_directories_to_daily_auto_commit_or_commit_before_install.mdwn new/etckeeper-1.18.21/doc/forum/List_of_files_or_directories_to_daily_auto_commit_or_commit_before_install.mdwn --- old/etckeeper-1.18.18/doc/forum/List_of_files_or_directories_to_daily_auto_commit_or_commit_before_install.mdwn 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/forum/List_of_files_or_directories_to_daily_auto_commit_or_commit_before_install.mdwn 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,5 @@ +Hello, + +There is a solution include in etckeeper that allow to create a list of files or directories that can be automatically commit even if we desactivate global daily autocommit or install before install ? + +Regards diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/forum/Prevent_hook_running_during_rebase/comment_1_101f16d09f46b477811b7c864abbc8bb._comment new/etckeeper-1.18.21/doc/forum/Prevent_hook_running_during_rebase/comment_1_101f16d09f46b477811b7c864abbc8bb._comment --- old/etckeeper-1.18.18/doc/forum/Prevent_hook_running_during_rebase/comment_1_101f16d09f46b477811b7c864abbc8bb._comment 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/forum/Prevent_hook_running_during_rebase/comment_1_101f16d09f46b477811b7c864abbc8bb._comment 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,31 @@ +[[!comment format=mdwn + username="hlovdal" + nickname="kode" + avatar="http://cdn.libravatar.org/avatar/e513ee57b6b0d2c0ae8dfa4b9e85f566" + subject="Use git worktree" + date="2022-11-27T22:50:32Z" + content=""" +While cloning and pulling between repos works, it is as you mentioned a bit cumbersome. What works much better is to create a lightweight [worktree](https://git-scm.com/docs/git-worktree), e.g. `git worktree add /root/etc.worktree main.worktree`. Then `/etc` and `/root/etc.worktree` shares all commits and sort of works like instantly synchronised clones. The only limitation is that the same branch cannot be checked out in both worktrees (I use `main.worktree` as a shadow of `main`). + +With that the update scenario will be like + +`cd /root/worktree` + +`git checkout main.worktree # Probably default and not needed` + +`git merge --ff main # Bring it up to date` + +`git rebase --interactive HEAD~10 # Or whatever history modification you want to use` + +`cd /etc` + +Finish with either `git merge main.worktree` +or `git reset --hard main.worktree # NB! reset --hard is a command that might cause you to loose data if you are not careful.` + +I mainly use worktree to painlessly resolve new `*.rpmnew` files which are created if a package is updated and a config file update would overwrite some custom non-package modification, e.g say for instance you have changed `GIT_COMMIT_OPTIONS` in `etckeeper.conf` and a newer version of etckeeper has some other update to that config file. If it is the first time I resolve a update conflict I create a branch `rpmnew/etckeeper.conf` from a commit right before I made the `GIT_COMMIT_OPTIONS` modification (which might have been a while ago, so resetting back to that inside /etc would likely be a disaster. Inside a linked worktree there is no problem). Then I overwrite `/root/etc.worktree/etckeeper/etckeeper.conf` with `/etc/etckeeper/etckeeper.conf.rpmnew` and check in. Then the final step is `git checkout main.worktree && git merge rpmnew/etckeeper.conf`. This could potentially result in merge conflicts, but there are excellent tools like [KDiff3](https://kdiff3.sourceforge.net/) to [u se for that](https://github.com/hlovdal/git-resolve-conflict-using-kdiff3). + + +The problem with the pre-commit hook still applies in this scenario, but I have just [asked for a patch to be applied that will prevent the hook from running inside linked worktrees](https://etckeeper.branchable.com/todo/Skip_running_pre-commit_hook_inside_li...). + + +"""]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/forum/check__95__root_test_does_not_work_in_user__95__namespaces.mdwn new/etckeeper-1.18.21/doc/forum/check__95__root_test_does_not_work_in_user__95__namespaces.mdwn --- old/etckeeper-1.18.18/doc/forum/check__95__root_test_does_not_work_in_user__95__namespaces.mdwn 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/forum/check__95__root_test_does_not_work_in_user__95__namespaces.mdwn 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,7 @@ +when building etckeeper in void linux, which uses user_namespaces(7) to chroot, the tests 8 (and sometimes 7) fail. +see https://github.com/void-linux/void-packages/pull/42192 +and https://github.com/void-linux/void-packages#chroot-methods + +this is (likely) due to the check_root test not detecting that the build is performed inside a chroot. + +any suggestion how one could improve that? diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/forum/git_gc___40__garbage_collection__41___message_triggers_Anacron_mail/comment_1_16b78a25b142a7b9f8cfc52e584a3a22._comment new/etckeeper-1.18.21/doc/forum/git_gc___40__garbage_collection__41___message_triggers_Anacron_mail/comment_1_16b78a25b142a7b9f8cfc52e584a3a22._comment --- old/etckeeper-1.18.18/doc/forum/git_gc___40__garbage_collection__41___message_triggers_Anacron_mail/comment_1_16b78a25b142a7b9f8cfc52e584a3a22._comment 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/forum/git_gc___40__garbage_collection__41___message_triggers_Anacron_mail/comment_1_16b78a25b142a7b9f8cfc52e584a3a22._comment 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,12 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 1""" + date="2023-04-21T16:10:58Z" + content=""" +`etckeeper commit` is what the cron job runs. That does not run +`git gc`. + +I don't think a git commit triggers a gc either, normmally. + +Have you perhaps added a hook or something that causes the git gc? +"""]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/forum/git_gc___40__garbage_collection__41___message_triggers_Anacron_mail.mdwn new/etckeeper-1.18.21/doc/forum/git_gc___40__garbage_collection__41___message_triggers_Anacron_mail.mdwn --- old/etckeeper-1.18.18/doc/forum/git_gc___40__garbage_collection__41___message_triggers_Anacron_mail.mdwn 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/forum/git_gc___40__garbage_collection__41___message_triggers_Anacron_mail.mdwn 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,19 @@ +Hi there, + +I'm using etckeeper 1.18.17 on Ubuntu kinetic (22.10). + +Every few days (roughly 4-8 days, the exact frequency varies, probably depending on how much I change in /etc) I get a mail from Anacron that has the following content: + +``` +/etc/cron.daily/etckeeper: +Auto packing the repository in background for optimum performance. +See "git help gc" for manual housekeeping. +``` + +I guess the automatic garbage collection of git is executed, which prints this unimportant bit of information to stdout, thus triggering an e-mail by Anacron. + +Since there is no actual problem, we should suppress this output, so that no mail will be sent. +One idea would be to just run 'git gc --auto' on a daily basis, I guess? + +Cheers, +Patrick. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/forum/intended_behavior_of_the_sudo_integration__63__/comment_1_a610753a92db835cdeaf3b870b7c72a5._comment new/etckeeper-1.18.21/doc/forum/intended_behavior_of_the_sudo_integration__63__/comment_1_a610753a92db835cdeaf3b870b7c72a5._comment --- old/etckeeper-1.18.18/doc/forum/intended_behavior_of_the_sudo_integration__63__/comment_1_a610753a92db835cdeaf3b870b7c72a5._comment 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/forum/intended_behavior_of_the_sudo_integration__63__/comment_1_a610753a92db835cdeaf3b870b7c72a5._comment 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,17 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 1""" + date="2023-04-21T15:53:20Z" + content=""" +When user.email is not set in the global git config, +etckeeper sets `GIT_COMMITTER_EMAIL` to + + `whoami`"@$hostname" + +Where $hostname is `hostname` with `dnsdomainname` added as the domain if +that outputs anything. + +It's possible etckeeper could be improved, but I don't have a sufficiently +broken system to see it fail, so patches or further analysis would be up to +you. +"""]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/forum/intended_behavior_of_the_sudo_integration__63__.mdwn new/etckeeper-1.18.21/doc/forum/intended_behavior_of_the_sudo_integration__63__.mdwn --- old/etckeeper-1.18.18/doc/forum/intended_behavior_of_the_sudo_integration__63__.mdwn 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/forum/intended_behavior_of_the_sudo_integration__63__.mdwn 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,5 @@ +I noticed that with the `sudo` integration, the author will be set to the +administrator. However, the commiter is still using the automatically-generated +email address for root user. The issue is that I still need to set the full name +for that “user”. How about also generating its full name? Or simply use the +administrator as both author and commiter? diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/forum/move_git_directory_elsewhere__63__/comment_1_1a4787f587c13ec0ce7f59ff52a8ce66._comment new/etckeeper-1.18.21/doc/forum/move_git_directory_elsewhere__63__/comment_1_1a4787f587c13ec0ce7f59ff52a8ce66._comment --- old/etckeeper-1.18.18/doc/forum/move_git_directory_elsewhere__63__/comment_1_1a4787f587c13ec0ce7f59ff52a8ce66._comment 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/forum/move_git_directory_elsewhere__63__/comment_1_1a4787f587c13ec0ce7f59ff52a8ce66._comment 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,11 @@ +[[!comment format=mdwn + username="ch-and-etckeeper.branchable.com@6e0ad263d7466ea3783deb474298632f286b1e3e" + nickname="ch-and-etckeeper.branchable.com" + avatar="http://cdn.libravatar.org/avatar/72e56d8e90557a374d5c1907319b48fc" + subject="Yes, it works" + date="2023-06-27T18:26:39Z" + content=""" +It works! + +In hindsight, I probably just should have tested it instead of bothering to ask the question, but hey, now you know the answer too! +"""]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/forum/move_git_directory_elsewhere__63__.mdwn new/etckeeper-1.18.21/doc/forum/move_git_directory_elsewhere__63__.mdwn --- old/etckeeper-1.18.18/doc/forum/move_git_directory_elsewhere__63__.mdwn 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/forum/move_git_directory_elsewhere__63__.mdwn 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,7 @@ +To increase the reliability of our system (it has daily power outages), we've made the root partition read-only, and only make it writable when we're making a change. + +Etckeeper doesn't like it if /etc is read-only, and generates daily emails to root about it. + +One idea is to move /etc/.git to /var/etckeeper/.git and create a symlink in its place; would it work, or is git fussy about that sort of thing? + +Thanks diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/news/version_1.18.13.mdwn new/etckeeper-1.18.21/doc/news/version_1.18.13.mdwn --- old/etckeeper-1.18.18/doc/news/version_1.18.13.mdwn 2022-09-08 18:13:15.000000000 +0200 +++ new/etckeeper-1.18.21/doc/news/version_1.18.13.mdwn 1970-01-01 01:00:00.000000000 +0100 @@ -1,6 +0,0 @@ -etckeeper 1.18.13 released with [[!toggle text="these changes"]] -[[!toggleable text=""" - * Added zsh completion. - Thanks, James Rowe - * commit: Recent changes added code that does not work on all POSIX shells. - Fixed by Thorsten Glaser."""]] \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/news/version_1.18.14.mdwn new/etckeeper-1.18.21/doc/news/version_1.18.14.mdwn --- old/etckeeper-1.18.18/doc/news/version_1.18.14.mdwn 2022-09-08 18:13:15.000000000 +0200 +++ new/etckeeper-1.18.21/doc/news/version_1.18.14.mdwn 1970-01-01 01:00:00.000000000 +0100 @@ -1,6 +0,0 @@ -etckeeper 1.18.14 released with [[!toggle text="these changes"]] -[[!toggleable text=""" - * pacman 5.2 deprecated File hooks, use Path. - Thanks, Christian Hesse - * Fix vcs subcommand setup for zsh completion. - Thanks, James Rowe."""]] \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/news/version_1.18.15.mdwn new/etckeeper-1.18.21/doc/news/version_1.18.15.mdwn --- old/etckeeper-1.18.18/doc/news/version_1.18.15.mdwn 2022-09-08 18:13:15.000000000 +0200 +++ new/etckeeper-1.18.21/doc/news/version_1.18.15.mdwn 1970-01-01 01:00:00.000000000 +0100 @@ -1,14 +0,0 @@ -etckeeper 1.18.15 released with [[!toggle text="these changes"]] -[[!toggleable text=""" * Use "command -v" rather than "which" to detect installed programs, - as it is more portable. - Thanks, Eli Schwartz. - * Improve commit messages generated by package manager changes, - listing packages that are responsible for the changed config files. - Thanks to emkael for the patch. - * If gc.auto is not configured, override the default to make it gc - ten times more frequently, to avoid wasting space with loose objects. - * update-ignore: Preserve permissions from any preexisting VCS ignore file. - Thanks, Austin Chu. - * Removed the debian directory from the upstream source package as it's - not being maintained; see the debian package for an up-to-date one. - * debian/changelog moved to CHANGELOG and debian/copyright to COPYRIGHT."""]] \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/news/version_1.18.18.mdwn new/etckeeper-1.18.21/doc/news/version_1.18.18.mdwn --- old/etckeeper-1.18.18/doc/news/version_1.18.18.mdwn 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/news/version_1.18.18.mdwn 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,5 @@ +etckeeper 1.18.18 released with [[!toggle text="these changes"]] +[[!toggleable text=""" * Replace deprecated egrep with grep -E. + Thanks, Sam James + * Added support for Void Linux's xbps package manager. + Thanks, Zev Weiss."""]] \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/news/version_1.18.19.mdwn new/etckeeper-1.18.21/doc/news/version_1.18.19.mdwn --- old/etckeeper-1.18.18/doc/news/version_1.18.19.mdwn 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/news/version_1.18.19.mdwn 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,9 @@ +etckeeper 1.18.19 released with [[!toggle text="these changes"]] +[[!toggleable text=""" * Added support for Gentoo (emerge, qlist, and cave) + Thanks, Sam James + * Skip running pre-commit hook inside linked worktrees, + to avoid it updating .etckeeper with the permissions of files + not in /etc. + Thanks, Håkon Løvdal + * commit: Run bzr with --quiet, since it outputs non-errors to stderr. + Closes: #[1018874](http://bugs.debian.org/1018874)"""]] \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/news/version_1.18.20.mdwn new/etckeeper-1.18.21/doc/news/version_1.18.20.mdwn --- old/etckeeper-1.18.18/doc/news/version_1.18.20.mdwn 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/news/version_1.18.20.mdwn 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,3 @@ +etckeeper 1.18.20 released with [[!toggle text="these changes"]] +[[!toggleable text=""" * Fix a reversion in etckeeper init in version 1.18.19. + Thanks, Georgy Yakovlev"""]] \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/todo/50vcs-commit:_add_double_quotes_around_options/comment_1_bece365157ae43694c251ff7866f62f0._comment new/etckeeper-1.18.21/doc/todo/50vcs-commit:_add_double_quotes_around_options/comment_1_bece365157ae43694c251ff7866f62f0._comment --- old/etckeeper-1.18.18/doc/todo/50vcs-commit:_add_double_quotes_around_options/comment_1_bece365157ae43694c251ff7866f62f0._comment 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/todo/50vcs-commit:_add_double_quotes_around_options/comment_1_bece365157ae43694c251ff7866f62f0._comment 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 1""" + date="2023-06-13T15:01:39Z" + content=""" +Wouldn't this break providing multiple space-seperated +options in `GIT_COMMIT_OPTIONS`, when it previously worked? +"""]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/todo/50vcs-commit:_add_double_quotes_around_options.mdwn new/etckeeper-1.18.21/doc/todo/50vcs-commit:_add_double_quotes_around_options.mdwn --- old/etckeeper-1.18.18/doc/todo/50vcs-commit:_add_double_quotes_around_options.mdwn 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/todo/50vcs-commit:_add_double_quotes_around_options.mdwn 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,69 @@ +I'm using Arch Linux, and the version number of etckeeper is 1.18.20-2. + +Background information: I utilize GitHub to automatically push my /etc directory to a repository. However, when etckeeper uses my GitHub account's git author information, it affects the contribution graph. Unfortunately, GitHub doesn't offer an option to exclude a single repository from the contribution graph. As a result, I decided to modify the git author. + +Modifying the code directly is not considered good practice. Instead, I chose to modify the `/etc/etckeeper/etckeeper.conf` file. After the modification, the configuration looks like this: + +`GIT_COMMIT_OPTIONS="--author=\"username <username@localhost>\""` + +When I execute the `etckeeper commit` command, it displays the following error: + +`fatal: --author '"username' is not 'Name <email>' and matches no existing author` + +Upon inspecting the code, I discovered that the commit.d/50vcs-commit script requires fixing. Specifically, double quotes need to be added around $GIT_COMMIT_OPTIONS. After including the double quotes, etckeeper functions as expected. + +I applied the same modification to $HG_COMMIT_OPTIONS, $BZR_COMMIT_OPTIONS, and $DARCS_COMMIT_OPTIONS. The resulting patch is provided below: + + +``` +diff --git a/commit.d/50vcs-commit b/commit.d/50vcs-commit +index a76eb7e..8ac8581 100755 +--- a/commit.d/50vcs-commit ++++ b/commit.d/50vcs-commit +@@ -109,9 +109,9 @@ if [ "$VCS" = git ] && [ -d .git ]; then + fi + + if [ -n "$logfile" ]; then +- git $GIT_GC_OPTIONS commit $GIT_COMMIT_OPTIONS -F "$logfile" ++ git $GIT_GC_OPTIONS commit "$GIT_COMMIT_OPTIONS" -F "$logfile" + else +- git $GIT_GC_OPTIONS commit $GIT_COMMIT_OPTIONS ++ git $GIT_GC_OPTIONS commit "$GIT_COMMIT_OPTIONS" + fi + elif [ "$VCS" = hg ] && [ -d .hg ]; then + if [ -n "$USER" ]; then +@@ -123,9 +123,9 @@ elif [ "$VCS" = hg ] && [ -d .hg ]; then + export HGUSER + fi + if [ -n "$logfile" ]; then +- hg commit $HG_COMMIT_OPTIONS -l "$logfile" ++ hg commit "$HG_COMMIT_OPTIONS" -l "$logfile" + else +- hg commit $HG_COMMIT_OPTIONS ++ hg commit "$HG_COMMIT_OPTIONS" + fi + elif [ "$VCS" = bzr ] && [ -d .bzr ]; then + if [ -z "$EMAIL" ] && [ -n "$USER" ]; then +@@ -135,17 +135,17 @@ elif [ "$VCS" = bzr ] && [ -d .bzr ]; then + bzr whoami >/dev/null 2>&1 || export EMAIL="$ORIG_USER <$ORIG_USER@$hostname>" + fi + if [ -n "$logfile" ]; then +- bzr commit $BZR_COMMIT_OPTIONS -F "$logfile" ++ bzr commit "$BZR_COMMIT_OPTIONS" -F "$logfile" + else +- bzr commit --quiet $BZR_COMMIT_OPTIONS ++ bzr commit --quiet "$BZR_COMMIT_OPTIONS" + fi + elif [ "$VCS" = darcs ] && [ -d _darcs ]; then + if [ -z "$USER" ]; then + USER=root + fi + if [ -n "$logfile" ]; then +- darcs record --author="$USER" $DARCS_COMMIT_OPTIONS --logfile="$logfile" ++ darcs record --author="$USER" "$DARCS_COMMIT_OPTIONS" --logfile="$logfile" + else +- darcs record --author="$USER" $DARCS_COMMIT_OPTIONS ++ darcs record --author="$USER" "$DARCS_COMMIT_OPTIONS" + fi + fi +``` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/todo/Consistent_tempfile_creation.mdwn new/etckeeper-1.18.21/doc/todo/Consistent_tempfile_creation.mdwn --- old/etckeeper-1.18.18/doc/todo/Consistent_tempfile_creation.mdwn 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/todo/Consistent_tempfile_creation.mdwn 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,11 @@ +Currently etckeeper has two different mechanisms for creating temporary files. There's no clear reason for that, and it caught me out when I was trying to update some of the scripts for my own purposes. + +I don't particularly mind how this is resolved, but I'd like it resolved in some consistent fashion! I've made two patches for two different resolutions: + +- [Allow either `mktemp` or `tempfile` everywhere](https://github.com/me-and/etckeeper/commit/96d4da2314ad64147835554371d04372c...) (best for backwards compatibility, as it'll keep working for folk who don't have `mktemp`) +- [Consistently assume `mktemp` is available](https://github.com/me-and/etckeeper/commit/3fb703588997590fec4776fb91e3b119a...) (best for simplicity) + +> Thanks, I've applied the first patch. It looks like all the code that +> assumed mktemp was available only ran when using darcs, so there are +> presumably systems where mktemp is not available that the second patch +> would break. [[done]] --[[Joey]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/todo/Do_not_recreate_ignored_empty_directory/comment_1_3214141a915a102378fc65084cae597a._comment new/etckeeper-1.18.21/doc/todo/Do_not_recreate_ignored_empty_directory/comment_1_3214141a915a102378fc65084cae597a._comment --- old/etckeeper-1.18.18/doc/todo/Do_not_recreate_ignored_empty_directory/comment_1_3214141a915a102378fc65084cae597a._comment 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/todo/Do_not_recreate_ignored_empty_directory/comment_1_3214141a915a102378fc65084cae597a._comment 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="anarcat" + avatar="http://cdn.libravatar.org/avatar/1bb99a4f017a1d253ad5790c150d0f0b" + subject="comment 1" + date="2022-11-08T17:27:31Z" + content=""" +i'm not sure that's the right way. i think you're right in that `grep -x` doesn't do the right thing, but I'm not sure I understand what you're trying to do with that extra `sed 's-^///--'` pattern there... + +I have proposed another solution which you might be interested in, in [[todo/metadata_ignore_filters_do_not_work]], which is basically to stop trying to reimplement git-ignore ourselves... +"""]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/todo/Pull_request:_Export_key_environment_variables_for_vcs_subcommand/comment_1_43f5a017d6575632d258a57eff429cb3._comment new/etckeeper-1.18.21/doc/todo/Pull_request:_Export_key_environment_variables_for_vcs_subcommand/comment_1_43f5a017d6575632d258a57eff429cb3._comment --- old/etckeeper-1.18.18/doc/todo/Pull_request:_Export_key_environment_variables_for_vcs_subcommand/comment_1_43f5a017d6575632d258a57eff429cb3._comment 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/todo/Pull_request:_Export_key_environment_variables_for_vcs_subcommand/comment_1_43f5a017d6575632d258a57eff429cb3._comment 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,29 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 1""" + date="2023-08-07T17:47:11Z" + content=""" +Looking back at [[!commit 65eda73020e0aa6bf15e64106dae955bf17a41dd]], the +initial idea of `etckeeper vcs` was to run the command in the same +environment that etckeeper uses. Which it does do for `HOME` and a few +other things. + +So I'm broadly in agreement that this might be a good idea. But copying +86 lines of quite hairy code is certainly not a maintainable way to do it. + +There's also the question of whether a user might be surprised to find +specific things that happen to be set in the `etckeeper commit` environment +being set. + +Also worth bearing in mind that `etckeeper commit` needs to run +successfully even if the host doesn't have a hostname configured or in the +face of other problems that typically prevent git from committing. Because +it's run by eg apt hooks, and generally is an abstraction layer where the +user may not be comfortable setting up git. That does not really apply to +`etckeeper vcs`, and so a certian amount of the code from `etckeeper +commit` doesn't seem necessary in `etckeeper vcs`. + +(Also you have this line that was accidentially left in: + echo "Testing; \$USER: $USER"` +) +"""]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/todo/Pull_request:_Export_key_environment_variables_for_vcs_subcommand.mdwn new/etckeeper-1.18.21/doc/todo/Pull_request:_Export_key_environment_variables_for_vcs_subcommand.mdwn --- old/etckeeper-1.18.18/doc/todo/Pull_request:_Export_key_environment_variables_for_vcs_subcommand.mdwn 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/todo/Pull_request:_Export_key_environment_variables_for_vcs_subcommand.mdwn 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,3 @@ +Currently, the `vcs` subcommand does not export environment variables in the same way that the `commit` subcommand does. It can be useful to have those environment variables in some cases, though, such as when you're using git and wanting to run a `revert` subcommand (e.g. with `$ sudo etckeeper vcs revert $REVISION`), as the `revert` functionality includes committing the reverted change. + +I submit [this pull request](https://github.com/Juanc1to/etckeeper/tree/vcs_export) as a possible strategy to implement this: it currently duplicates the environment export logic from the `commit` subcommand. It might make sense to refactor this out into some sort of library, but I'm not really familiar enough with shell script project conventions (or the maintainer's style goals) to suggest a strategy for this. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/todo/Skip_running_pre-commit_hook_inside_linked_worktrees.mdwn new/etckeeper-1.18.21/doc/todo/Skip_running_pre-commit_hook_inside_linked_worktrees.mdwn --- old/etckeeper-1.18.18/doc/todo/Skip_running_pre-commit_hook_inside_linked_worktrees.mdwn 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/todo/Skip_running_pre-commit_hook_inside_linked_worktrees.mdwn 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,9 @@ +Adding a git [worktree](https://git-scm.com/docs/git-worktree) is a great way to being able to change the version history without changing all the other files under `/etc` to some arbitrary old version while doing interactive rebases etc. With a worktree you can do all the work there and then merge in the final result in a clean operation in `/etc` later on. + +This could be done by cloning the repository and add it as a remote instead, but that is more cumbersome. + +However the pre-commit hook messes things up when it is being run inside the linked worktree as well. It really should only run in the main worktree. + +Could you please merge the [worktree](https://github.com/hlovdal/etkeeper/compare/master...worktree) branch which contains one commit that adds a check to avoid running the pre-commit hook in linked worktrees? + +> Good patch, [[done]]! --[[Joey]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/todo/__91__BUG__93___Arch_Linux:_hooks_don__39__t_trigger_when___47__etc_is_only_modified_by_post-install_scripts./comment_1_2e5c41b9d32669974703285279c05784._comment new/etckeeper-1.18.21/doc/todo/__91__BUG__93___Arch_Linux:_hooks_don__39__t_trigger_when___47__etc_is_only_modified_by_post-install_scripts./comment_1_2e5c41b9d32669974703285279c05784._comment --- old/etckeeper-1.18.18/doc/todo/__91__BUG__93___Arch_Linux:_hooks_don__39__t_trigger_when___47__etc_is_only_modified_by_post-install_scripts./comment_1_2e5c41b9d32669974703285279c05784._comment 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/todo/__91__BUG__93___Arch_Linux:_hooks_don__39__t_trigger_when___47__etc_is_only_modified_by_post-install_scripts./comment_1_2e5c41b9d32669974703285279c05784._comment 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 1""" + date="2022-12-14T18:02:09Z" + content=""" +Since I'm not in a position to test this myself, it would be great if you +could develop a patch, test it, and send the patch. +"""]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/todo/__91__BUG__93___Arch_Linux:_hooks_don__39__t_trigger_when___47__etc_is_only_modified_by_post-install_scripts..mdwn new/etckeeper-1.18.21/doc/todo/__91__BUG__93___Arch_Linux:_hooks_don__39__t_trigger_when___47__etc_is_only_modified_by_post-install_scripts..mdwn --- old/etckeeper-1.18.18/doc/todo/__91__BUG__93___Arch_Linux:_hooks_don__39__t_trigger_when___47__etc_is_only_modified_by_post-install_scripts..mdwn 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/todo/__91__BUG__93___Arch_Linux:_hooks_don__39__t_trigger_when___47__etc_is_only_modified_by_post-install_scripts..mdwn 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,21 @@ +The pacman hooks that etckeeper use only trigger if a package changes a file in /etc. This breaks when a package only changes /etc in it's post-install script. + +An example of this is archlinux-keyring, which runs a post install script to update the gpg trust db in /etc/pacman. + +The solution is to change the hooks to always run. Instead of: + +``` +Type = Path +Target = etc/* +``` + +use something like: + +``` +Type = Package +Target = * +``` + +At least when using git, `etckeeper pre-install` and `etckeeper post-install` are quick enough on my computer that running when not needed is not a big deal. + +Here is the Arch Linux bug about this: https://bugs.archlinux.org/task/76826 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/todo/metadata_ignore_filters_do_not_work/comment_1_a0a00282ce442b3b485d0c3b6f1a8b32._comment new/etckeeper-1.18.21/doc/todo/metadata_ignore_filters_do_not_work/comment_1_a0a00282ce442b3b485d0c3b6f1a8b32._comment --- old/etckeeper-1.18.18/doc/todo/metadata_ignore_filters_do_not_work/comment_1_a0a00282ce442b3b485d0c3b6f1a8b32._comment 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/todo/metadata_ignore_filters_do_not_work/comment_1_a0a00282ce442b3b485d0c3b6f1a8b32._comment 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,16 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 1""" + date="2022-11-08T18:11:53Z" + content=""" +You have misunderstood (and oddly, misquoted) the code. + +30store-metadata already uses `git ls-files -oi --exclude-standard` to list +gitignored files. The use of grep is only to search through the resulting +list of ignored files, to find an exact match for a filename.. That is +indeed inefficient when there are a lot of ignored files. But it matches +ignored files correctly. + +(30store-metadata does grep .darcsignore, I don't know if that is a good +idea.) +"""]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/todo/metadata_ignore_filters_do_not_work/comment_2_23349351fd7f424bfd3073136a6f606c._comment new/etckeeper-1.18.21/doc/todo/metadata_ignore_filters_do_not_work/comment_2_23349351fd7f424bfd3073136a6f606c._comment --- old/etckeeper-1.18.18/doc/todo/metadata_ignore_filters_do_not_work/comment_2_23349351fd7f424bfd3073136a6f606c._comment 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/todo/metadata_ignore_filters_do_not_work/comment_2_23349351fd7f424bfd3073136a6f606c._comment 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,18 @@ +[[!comment format=mdwn + username="anarcat" + avatar="http://cdn.libravatar.org/avatar/1bb99a4f017a1d253ad5790c150d0f0b" + subject="comment 2" + date="2022-11-15T17:49:48Z" + content=""" +> You have misunderstood (and oddly, misquoted) the code. +> +> 30store-metadata already uses git ls-files -oi --exclude-standard to list gitignored files. The use of grep is only to search through the resulting list of ignored files, to find an exact match for a filename.. That is indeed inefficient when there are a lot of ignored files. But it matches ignored files correctly. + +But why do we list *all* the ignored files in the metadata store? Shouldn't we store data only about files tracked with git? + +Maybe you are correct and I do not understand the purpose of this code, I thought the point of the metadata store was to restore modes when checking out files, and therefore that adding ignored files in there was not necessary. + +> (30store-metadata does grep .darcsignore, I don't know if that is a good idea.) + +that, i cannot say. i haven't used darcs in ages. +"""]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/todo/metadata_ignore_filters_do_not_work/comment_3_eff7bec1a6b87cc6c2546d181ce8296e._comment new/etckeeper-1.18.21/doc/todo/metadata_ignore_filters_do_not_work/comment_3_eff7bec1a6b87cc6c2546d181ce8296e._comment --- old/etckeeper-1.18.18/doc/todo/metadata_ignore_filters_do_not_work/comment_3_eff7bec1a6b87cc6c2546d181ce8296e._comment 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/todo/metadata_ignore_filters_do_not_work/comment_3_eff7bec1a6b87cc6c2546d181ce8296e._comment 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,26 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 3""" + date="2022-11-16T17:15:50Z" + content=""" +> But why do we list _all_ the ignored files in the metadata store? + +It doesn't. This code is what filters those ignored files out of the ones +that are included. It's easy to show it works: + + root@darkstar:~>grep mtab /etc/.gitignore + mtab + mtab.fuselock + root@darkstar:~>ls /etc/mtab + /etc/mtab@ + root@darkstar:~>grep mtab /etc/.etckeeper + - exit 1 + root@darkstar:~>grep adjtime /etc/.gitignore + adjtime + root@darkstar:~>ls /etc/adjtime + /etc/adjtime + root@darkstar:~>grep adjtime /etc/.etckeeper + - exit 1 + +You have not yet given an example of it not working. +"""]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/todo/metadata_ignore_filters_do_not_work/comment_4_dc188a789e1b40158b14a88d7d088ee2._comment new/etckeeper-1.18.21/doc/todo/metadata_ignore_filters_do_not_work/comment_4_dc188a789e1b40158b14a88d7d088ee2._comment --- old/etckeeper-1.18.18/doc/todo/metadata_ignore_filters_do_not_work/comment_4_dc188a789e1b40158b14a88d7d088ee2._comment 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/todo/metadata_ignore_filters_do_not_work/comment_4_dc188a789e1b40158b14a88d7d088ee2._comment 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,54 @@ +[[!comment format=mdwn + username="anarcat" + avatar="http://cdn.libravatar.org/avatar/1bb99a4f017a1d253ad5790c150d0f0b" + subject="some examples" + date="2022-11-23T16:32:38Z" + content=""" +here's an example, from my workstation, which has a similar configuration to the server i was working on for this: + + root@curie:/etc# grep puppet/code/production .gitignore .etckeeper + .gitignore:puppet/code/production + .etckeeper:mkdir -p './puppet/code/production' + .etckeeper:maybe chown 'puppet' 'puppet/code/production' + .etckeeper:maybe chgrp 'puppet' 'puppet/code/production' + .etckeeper:maybe chmod 0750 'puppet/code/production' + root@curie:/etc# ls -al puppet/code/production/ + total 18 + drwxr-x--- 2 puppet puppet 2 30 jun 2020 . + drwxr-xr-x 3 root root 3 30 jun 2020 .. + +here you see the empty directory is managed in .etckeeper even though it's ignored. + +i thought i provided clearer examples of this in the original article, but i guess it wasn't very explicit... here's an example: + +right now, if i revert the changes I made to `etckeeper/pre-commit.d/30store-metadata`, and run the hook: + + VCS=git /etc/etckeeper/pre-commit.d/30store-metadata + +... i get this: + + root@marcos:/etc# grep puppet/code/production .gitignore + puppet/code/production + root@marcos:/etc# grep -c puppet/code/production .etckeeper + 87 + +it's mostly empty directories, but there's also other stuff: + + root@marcos:/etc# grep puppet/code/production .etckeeper | head -3 + mkdir -p './puppet/code/production/.g10k/CraigWatson1987-transmission-2.2.1/spec/fixtures' + mkdir -p './puppet/code/production/.g10k/duritong-sysctl-0.0.12/spec/fixtures/manifests' + mkdir -p './puppet/code/production/.g10k/duritong-sysctl-0.0.12/spec/fixtures/modules/sysctl' + root@marcos:/etc# grep puppet/code/production .etckeeper | tail -3 + mkdir -p './puppet/code/production/modules/inifile/locales/ja' + maybe chown 'anarcat' 'puppet/code/production' + maybe chmod 0755 'puppet/code/production' + +with the patch, it looks like this instead: + + root@marcos:/etc# grep puppet/code/production .gitignore + puppet/code/production + root@marcos:/etc# grep -c puppet/code/production .etckeeper + 0 + +the patch proposed here, together with the one on [[todo/metadata_ignore_filters_do_not_work]] improve etckeeper performance tremendously in my case. +"""]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/todo/metadata_ignore_filters_do_not_work/comment_5_e43de8fe580d3f6884cc7b94c52e0a5b._comment new/etckeeper-1.18.21/doc/todo/metadata_ignore_filters_do_not_work/comment_5_e43de8fe580d3f6884cc7b94c52e0a5b._comment --- old/etckeeper-1.18.18/doc/todo/metadata_ignore_filters_do_not_work/comment_5_e43de8fe580d3f6884cc7b94c52e0a5b._comment 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/todo/metadata_ignore_filters_do_not_work/comment_5_e43de8fe580d3f6884cc7b94c52e0a5b._comment 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="anarcat" + avatar="http://cdn.libravatar.org/avatar/1bb99a4f017a1d253ad5790c150d0f0b" + subject="comment 5" + date="2022-11-23T16:33:06Z" + content=""" +argh, i meant [[todo/optimize_mode_metadata:_ignore_defaults]]... +"""]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/todo/metadata_ignore_filters_do_not_work.mdwn new/etckeeper-1.18.21/doc/todo/metadata_ignore_filters_do_not_work.mdwn --- old/etckeeper-1.18.18/doc/todo/metadata_ignore_filters_do_not_work.mdwn 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/todo/metadata_ignore_filters_do_not_work.mdwn 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,61 @@ +I'm seeing numerous performance problems with etckeeper on my servers. It generally happens when there is a git repository underneath `/etc` or some other thing that generates lots of small files. Typically, what I try next is to make git ignore those files, which works for the git side of things, but not for the etckeeper side of things, as all those files still get listed (and parsed) by etckeeper's `.etckeeper` metadata file. + +The problem here is the metadata "ignore" filter doesn't really work. We can see this in multiple different bug reports here, like [[todo/etkeeper_warning_about_hardlinks_doesn__39__t_exclude_ignored_files]], [[todo/Do_not_recreate_ignored_empty_directory]], or [[todo/what_if_there_is_a_Git_repo_somewhere_underneath___47__etc__63__/]]. I think the approach taken to solve this problem is incorrect, which is why I am opening this issue to regroup all of them in one single place. + +From what I can tell, the `30store-metadata` script tries to ignore files ignored by git. But it tries to do that using `grep`, and git ignore files are not `grep` patterns at all. In fact, they're not even regular expressions, they are like glob patterns, but with many different exceptions (like `!` to negate a pattern, for example). I do not think there is a command that can faithfully reproduce this outside of git itself. + +Right now, we basically do this: + + 1. list all empty directories, and add them to the metadata, regardless of gitignore (which is [[todo/Do_not_recreate_ignored_empty_directory]]) + 2. then list all files and directories (empty or not), try to filter out ignored files, and try to ignore normal modes, which means: + 1. `find $NOVCS \( -type f -or -type d \)` (basically skips `.git` and friends) + 2. `sed 's/^\.\///' | grep -xFvf $(git ls-files -oi --exclude-standard; git ls-files -oi --exclude-standard --directory | sort -u)` + 3. some inline perl script which actually systematically chmods all files, and optionally changes the owner and group if they are not the EUID/EGID + +Now, the problem that concerns us here is mostly in step 2.2 above. That `grep` command is bad for many reasons, but the first of which is `-x`: that will do a full match on the entire line so if you have, say, `puppet` in your `.gitignore` that will match the `puppet` directory, but nothing *underneath*, which is not how gitignore files work *at all*. + +I think the proper way to do this is to actually start from files git actually tracks, since in that step, we're trying to keep track of modes and owners of actual files managed by git. It seems to me much better to make git list the files, then process *that*, than try to reimplement git-ignore outside of git. + +I think the pseudocode then would be something like, for the git case: + + 1. `git ls-files | sort -u | maybe_chmod_chown` + 2. `git ls-files --others --exclude-standard --directory | sed -e "s/^/mkdir -p /"` + +... and that's it! The trick here is we separate the normal file tracking (first step) from the empty directory listing (second step). I haven't actually tested this because I'm out of battery in that third yak razor, but I wanted to brainstorm this here first to see if we could somehow make sense of this. + +(Also, I don't think that the `maybe_chmod_chown` script should systematically change the mode on files, but that's a different story (and optimization)...) + +-- [[anarcat]] + +Update: and I think the patch is [something like this](https://salsa.debian.org/debian/etckeeper/-/commit/0a4305886c6e9501eec223880...) (see [branch](https://salsa.debian.org/debian/etckeeper/-/commits/new-git-ignores) for latest. it doesn't *quite* work the way I expected, unfortunately. a few examples: + +[[!format diff """ +diff --git a/.etckeeper b/.etckeeper +index 71fb3188..8b34a087 100755 +--- a/.etckeeper ++++ b/.etckeeper +@@ -3,34 +3,28 @@ + mkdir -p './ImageMagick' + mkdir -p './X11/xkb' + mkdir -p './X11/xorg.conf.d' +-mkdir -p './apm/event.d' +-mkdir -p './apm/scripts.d' ++mkdir -p './apm' +[...] +"""]] + +in the above example, you see that `apm` is correctly added but not the underlying `events.d` and `scripts.d`... + +it *does* correctly follow ignores for most stuff however, which is an improvement. I did have to bend over backwards to remove symlinks from the listing, with that ungodly `sed`. and, in general, we have quoting problems here because we pipe filenames that might have newlines in them... thankfully, we might consider `/etc` trusted, but that's something that makes me uncomfortable about this whole thing in the first place... + +here at least, a bunch of stuff is cleaned up: + +[[!format txt """ +root@marcos:/etc# git diff --cached --stat + .etckeeper | 636 ++++------------------------------------------------------------------------------------------------------------------------------------------------ + 1 file changed, 17 insertions(+), 619 deletions(-) +root@marcos:/etc# wc -l .etckeeper +7419 .etckeeper +"""]] + +Anyways, let me know what you think. The main tradeoff here is that we lose empty subdirectories, which maybe is a big deal, but for my use cases, I don't expect etckeeper to recover everything like this, that's what backups are for. ;) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/todo/optimize_mode_metadata:_ignore_defaults/comment_1_bd12401aec0d25d31e2cb260389cb98e._comment new/etckeeper-1.18.21/doc/todo/optimize_mode_metadata:_ignore_defaults/comment_1_bd12401aec0d25d31e2cb260389cb98e._comment --- old/etckeeper-1.18.18/doc/todo/optimize_mode_metadata:_ignore_defaults/comment_1_bd12401aec0d25d31e2cb260389cb98e._comment 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/todo/optimize_mode_metadata:_ignore_defaults/comment_1_bd12401aec0d25d31e2cb260389cb98e._comment 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 1""" + date="2022-11-08T18:49:10Z" + content=""" +You are assuming that root has a umask of 022. With other umasks, git uses +other modes. +"""]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/todo/optimize_mode_metadata:_ignore_defaults/comment_2_fb6294e6d3d04eb26609aca0163d0720._comment new/etckeeper-1.18.21/doc/todo/optimize_mode_metadata:_ignore_defaults/comment_2_fb6294e6d3d04eb26609aca0163d0720._comment --- old/etckeeper-1.18.18/doc/todo/optimize_mode_metadata:_ignore_defaults/comment_2_fb6294e6d3d04eb26609aca0163d0720._comment 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/todo/optimize_mode_metadata:_ignore_defaults/comment_2_fb6294e6d3d04eb26609aca0163d0720._comment 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="anarcat" + avatar="http://cdn.libravatar.org/avatar/1bb99a4f017a1d253ad5790c150d0f0b" + subject="comment 2" + date="2022-11-15T17:50:17Z" + content=""" +sure, parsing umask is a possible improvement to this patch. +"""]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/todo/optimize_mode_metadata:_ignore_defaults.mdwn new/etckeeper-1.18.21/doc/todo/optimize_mode_metadata:_ignore_defaults.mdwn --- old/etckeeper-1.18.18/doc/todo/optimize_mode_metadata:_ignore_defaults.mdwn 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/todo/optimize_mode_metadata:_ignore_defaults.mdwn 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,51 @@ +here's another idea: why do we store metadata for files that have "default" modes (as understood by git) like `0755` (for directories) or `0644` (for files)? This seems like a huge waste of time and something that grows the `.etckeeper` metadata file needlessly. + +I believe the following patch would improve things quite a bit: + +[[!format diff """ +modified pre-commit.d/30store-metadata +@@ -92,7 +92,9 @@ maybe_chmod_chown() { + if ($gid != $)) { + printf "maybe chgrp $q%s$q %s\n", gidname($gid), $_; + } +- printf "maybe chmod %04o %s\n", $mode & 07777, $_; ++ if ($mode != 0100644 and $mode != 040755) { ++ printf "maybe chmod %04o %s\n", $mode & 07777, $_; ++ } + ' + return $? + else + +"""]] + +See also [this commit](https://salsa.debian.org/debian/etckeeper/-/commit/73fccbde9c30156209362d748...) which is the current HEAD of [my optimize-default-metadata branch](https://salsa.debian.org/debian/etckeeper/-/commits/optimize-default-metadat...). + +In my messy home server, this gives me that resulting diff: + +[[!format txt """ +root@marcos:/etc# git diff --cached --stat + .etckeeper | 10231 -------------------------------------------------------------------------------------------------------------------------------------------------- + 1 file changed, 10231 deletions(-) +"""]] + +yes, you read that right, that's 10 *thousand* files cleaned up. and yes, it seems like i have over 20,000 files in /etc. yikes. (it's mostly because this is a puppet server and there's lots of git repos under there, and cache files. and yes, those are in the .gitignore and shouldn't even be in the `.etckeeper` file in the first place, but that's a different story, see [[todo/metadata_ignore_filters_do_not_work]]. + +before this and the git ignore patch: + +[[!format txt """ +root@marcos:/etc# VCS=git time sh /home/anarcat/src/etckeeper/pre-commit.d/30store-metadata +0.22user 0.13system 0:00.34elapsed 104%CPU (0avgtext+0avgdata 11500maxresident)k +0inputs+12088outputs (0major+4497minor)pagefaults 0swaps +"""]] + +after: + +[[!format txt """ +root@marcos:/etc# VCS=git time sh /etc/etckeeper/pre-commit.d/30store-metadata +0.07user 0.02system 0:00.09elapsed 106%CPU (0avgtext+0avgdata 7748maxresident)k +0inputs+2080outputs (0major+3287minor)pagefaults 0swaps +"""]] + +it doesn't look like much, but that's a 10-fold improvement. and it doesn't count the time it takes to actually do the commit, which I haven't benchmarked, but it takes a few *seconds* to commit before the change, and a few miliseconds after. + +so anyways, i figured that would be a worthwhile optimisation! :) --[[anarcat]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/doc/todo/what_if_there_is_a_Git_repo_somewhere_underneath___47__etc__63__/comment_3_f3618a15792640feef3f055ac108e940._comment new/etckeeper-1.18.21/doc/todo/what_if_there_is_a_Git_repo_somewhere_underneath___47__etc__63__/comment_3_f3618a15792640feef3f055ac108e940._comment --- old/etckeeper-1.18.18/doc/todo/what_if_there_is_a_Git_repo_somewhere_underneath___47__etc__63__/comment_3_f3618a15792640feef3f055ac108e940._comment 1970-01-01 01:00:00.000000000 +0100 +++ new/etckeeper-1.18.21/doc/todo/what_if_there_is_a_Git_repo_somewhere_underneath___47__etc__63__/comment_3_f3618a15792640feef3f055ac108e940._comment 2023-11-28 19:09:38.000000000 +0100 @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="anarcat" + avatar="http://cdn.libravatar.org/avatar/1bb99a4f017a1d253ad5790c150d0f0b" + subject="comment 3" + date="2022-11-08T17:25:58Z" + content=""" +i think the proper solution here is to stop trying to replace gitignore with our own implementation and defer everything to `git-ls-files`. i lay out that idea in [[todo/metadata_ignore_filters_do_not_work]] and would very much welcome feedback on that. +"""]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/etckeeper new/etckeeper-1.18.21/etckeeper --- old/etckeeper-1.18.18/etckeeper 2022-09-08 18:13:15.000000000 +0200 +++ new/etckeeper-1.18.21/etckeeper 2023-11-28 19:09:38.000000000 +0100 @@ -71,7 +71,7 @@ exit 0 elif [ "x$1" = "x-v" ] || [ "x$1" = "x--version" ]; then # This is automatically updated by the Makefile. - echo "Version: 1.18.18" + echo "Version: 1.18.21" exit 0 fi command="$1" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/etckeeper.conf new/etckeeper-1.18.21/etckeeper.conf --- old/etckeeper-1.18.18/etckeeper.conf 2022-09-08 18:13:15.000000000 +0200 +++ new/etckeeper-1.18.21/etckeeper.conf 2023-11-28 19:09:38.000000000 +0100 @@ -32,11 +32,11 @@ #AVOID_COMMIT_BEFORE_INSTALL=1 # The high-level package manager that's being used. -# (apt, pacman, pacman-g2, yum, dnf, zypper, apk, xbps etc) +# (apt, pacman, pacman-g2, yum, dnf, zypper, apk, xbps, emerge, cave, etc) HIGHLEVEL_PACKAGE_MANAGER=apt # The low-level package manager that's being used. -# (dpkg, rpm, pacman, pacmatic, pacman-g2, apk, xbps etc) +# (dpkg, rpm, pacman, pacmatic, pacman-g2, apk, xbps, cave, qlist, etc) LOWLEVEL_PACKAGE_MANAGER=dpkg # To push each commit to a remote, put the name of the remote here. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/etckeeper.spec new/etckeeper-1.18.21/etckeeper.spec --- old/etckeeper-1.18.18/etckeeper.spec 2022-09-08 18:13:15.000000000 +0200 +++ new/etckeeper-1.18.21/etckeeper.spec 2023-11-28 19:09:38.000000000 +0100 @@ -1,5 +1,5 @@ Name: etckeeper -Version: 1.18.18 +Version: 1.18.21 Release: 4%{?dist} Summary: store /etc in git, mercurial, bzr or darcs diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/init.d/50vcs-pre-commit-hook new/etckeeper-1.18.21/init.d/50vcs-pre-commit-hook --- old/etckeeper-1.18.18/init.d/50vcs-pre-commit-hook 2022-09-08 18:13:15.000000000 +0200 +++ new/etckeeper-1.18.21/init.d/50vcs-pre-commit-hook 2023-11-28 19:09:38.000000000 +0100 @@ -12,6 +12,37 @@ #!/bin/sh # pre-commit hook for etckeeper, to store metadata and do sanity checks set -e + +################################################################################ +# Do not run etckeeper inside linked worktrees. An additional worktree can be +# very useful for resolving *.rpmsave/*.rpmnew files where you are able to merge +# and check out older versions without changing the whole content of /etc. +# However while doing such work, avoid modifying .etckeeper since only the /etc +# directory should track permissions. +# +# +# $ cd /etc +# $ git worktree list +# /etc 2984704 [main] +# /root/etc.worktree aeae148 [main.worktree] +# $ git rev-parse --git-dir +# .git +# $ cd /root/etc.worktree +# $ git rev-parse --git-dir +# /etc/.git/worktrees/etc.worktree +# $ +# +################################################################################ + +# Using 'rev-parse' + 'grep' rather than for instance parsing output from +# 'worktree list' since the worktree command is not present in older git version +# and parsing it would be slightly more complex. +if git rev-parse --git-dir | grep -q /.git/worktrees +then + # Inside worktree, do nothing. + exit +fi + etckeeper pre-commit -d `pwd` EOF chmod +x .git/hooks/pre-commit diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/init.d/60darcs-deleted-symlinks new/etckeeper-1.18.21/init.d/60darcs-deleted-symlinks --- old/etckeeper-1.18.18/init.d/60darcs-deleted-symlinks 2022-09-08 18:13:15.000000000 +0200 +++ new/etckeeper-1.18.21/init.d/60darcs-deleted-symlinks 2023-11-28 19:09:38.000000000 +0100 @@ -1,5 +1,14 @@ #!/bin/sh set -e + +if command -v mktemp >/dev/null; then + tempfile="mktemp -t etckeeper-$VCS.XXXXXXXXXX" +elif command -v tempfile >/dev/null; then + tempfile="tempfile" +else + echo "etckeeper warning: can't find tempfile or mktemp" >&2 + exit 1 +fi filter_ignore() { if [ "$VCS" = darcs ]; then @@ -13,7 +22,7 @@ #grep -Ev $patterns #unset patterns # Alternative using a temp file - patternsfile="$( mktemp -t etckeeper-$VCS.XXXXXXXXXX )" + patternsfile="$($tempfile)" grep -v '^[[:space:]]*\(#\|$\)' "$ignorefile" > "$patternsfile" || true grep -Evf "$patternsfile" rm -f "$patternsfile" @@ -23,13 +32,12 @@ fi } - if [ "$VCS" = darcs ];then NOVCS='. -path ./.git -prune -o -path ./.bzr -prune -o -path ./.hg -prune -o -path ./_darcs -prune -o' # We assume that if .etckeeper is empty this is the first run if [ -s .etckeeper ]; then - linksindex="$( mktemp -t etckeeper-$VCS.XXXXXXXXXX )" + linksindex="$($tempfile)" grep '^ln -s' .etckeeper | while IFS="'" read n n n link n; do printf "%s\n" "$link" >> "$linksindex" done diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/list-installed.d/50list-installed new/etckeeper-1.18.21/list-installed.d/50list-installed --- old/etckeeper-1.18.18/list-installed.d/50list-installed 2022-09-08 18:13:15.000000000 +0200 +++ new/etckeeper-1.18.21/list-installed.d/50list-installed 2023-11-28 19:09:38.000000000 +0100 @@ -30,5 +30,9 @@ apk info -v | sort elif [ "$LOWLEVEL_PACKAGE_MANAGER" = xbps ]; then xbps-query -l | awk '{print $2}' | sed -r 's/-([^-]+)$/ \1/g;' + elif [ "$LOWLEVEL_PACKAGE_MANAGER" = qlist ]; then + qlist -ICv + elif [ "$LOWLEVEL_PACKAGE_MANAGER" = cave ]; then + cave print-packages -r installed fi fi diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/pre-commit.d/30store-metadata new/etckeeper-1.18.21/pre-commit.d/30store-metadata --- old/etckeeper-1.18.18/pre-commit.d/30store-metadata 2022-09-08 18:13:15.000000000 +0200 +++ new/etckeeper-1.18.21/pre-commit.d/30store-metadata 2023-11-28 19:09:38.000000000 +0100 @@ -13,7 +13,15 @@ esac if [ -n "$ignorefile" ] && [ -e "$ignorefile" ]; then - listfile="$( mktemp -t etckeeper-$VCS.XXXXXXXXXX )" + if command -v mktemp >/dev/null; then + tempfile="mktemp -t etckeeper-$VCS.XXXXXXXXXX" + elif command -v tempfile >/dev/null; then + tempfile="tempfile" + else + echo "etckeeper warning: can't find tempfile or mktemp" >&2 + exit 1 + fi + listfile="$($tempfile)" case "$VCS" in darcs) LC_CTYPE=C grep -v '^[[:space:]]*\(#\|$\)' "$ignorefile" > "$listfile" || true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/uninit.d/50vcs-uninit new/etckeeper-1.18.21/uninit.d/50vcs-uninit --- old/etckeeper-1.18.18/uninit.d/50vcs-uninit 2022-09-08 18:13:15.000000000 +0200 +++ new/etckeeper-1.18.21/uninit.d/50vcs-uninit 2023-11-28 19:09:38.000000000 +0100 @@ -22,7 +22,7 @@ else realfile="$file" if command -v mktemp >/dev/null; then - tempfile="mktemp" + tempfile="mktemp -t etckeeper-$VCS.XXXXXXXXXX" elif command -v tempfile >/dev/null; then tempfile="tempfile" else diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etckeeper-1.18.18/update-ignore.d/01update-ignore new/etckeeper-1.18.21/update-ignore.d/01update-ignore --- old/etckeeper-1.18.18/update-ignore.d/01update-ignore 2022-09-08 18:13:15.000000000 +0200 +++ new/etckeeper-1.18.21/update-ignore.d/01update-ignore 2023-11-28 19:09:38.000000000 +0100 @@ -107,8 +107,12 @@ comment "new versions of conffiles, stored by xbps" ignore "*.new-*_[0-9]*" nl + elif [ "$LOWLEVEL_PACKAGE_MANAGER" = "qlist" -o "$LOWLEVEL_PACKAGE_MANAGER" = "cave" ]; then + comment "new and old versions of conffiles, stored by emerge" + ignore "._cfg*" + nl fi - + comment "old versions of files" ignore "*.old" # Not currently ignored as admins tend to rely on these files. @@ -181,7 +185,7 @@ fi realfile="$file" if command -v mktemp >/dev/null; then - tempfile="mktemp" + tempfile="mktemp -t etckeeper-$VCS.XXXXXXXXXX" elif command -v tempfile >/dev/null; then tempfile="tempfile" else ++++++ etckeeper-set-package-manager.patch ++++++ --- /var/tmp/diff_new_pack.T4WIch/_old 2024-09-12 16:57:33.375846477 +0200 +++ /var/tmp/diff_new_pack.T4WIch/_new 2024-09-12 16:57:33.379846643 +0200 @@ -1,16 +1,16 @@ -Index: etckeeper-1.18.8/etckeeper.conf +Index: etckeeper-1.18.21/etckeeper.conf =================================================================== ---- etckeeper-1.18.8.orig/etckeeper.conf -+++ etckeeper-1.18.8/etckeeper.conf +--- etckeeper-1.18.21.orig/etckeeper.conf ++++ etckeeper-1.18.21/etckeeper.conf @@ -33,11 +33,11 @@ DARCS_COMMIT_OPTIONS="-a" # The high-level package manager that's being used. - # (apt, pacman, pacman-g2, yum, dnf, zypper, apk, xbps etc) + # (apt, pacman, pacman-g2, yum, dnf, zypper, apk, xbps, emerge, cave, etc) -HIGHLEVEL_PACKAGE_MANAGER=apt +HIGHLEVEL_PACKAGE_MANAGER=zypper # The low-level package manager that's being used. - # (dpkg, rpm, pacman, pacmatic, pacman-g2, apk, xbps etc) + # (dpkg, rpm, pacman, pacmatic, pacman-g2, apk, xbps, cave, qlist, etc) -LOWLEVEL_PACKAGE_MANAGER=dpkg +LOWLEVEL_PACKAGE_MANAGER=rpm
participants (1)
-
Source-Sync