[PATCH v3 0/4] maintenance: use systemd timers on Linux
- From
Lénaïc Huard <lenaic@lhuard.fr>
- Date
- May 20, 2021, 22:13 UTC
- Message-ID
- <20210520221359.75615-1-lenaic@lhuard.fr>
- In-Reply-To
- <20210509213217.449489-1-lenaic@lhuard.fr>
Hello,
Thanks again for your valuable feedback! I’ve reworked this submission to hopefully address all the raised concerns.
As it’s becoming bigger, I’ve split it in several patches:
* cache.h: rename "xdg_config_home" to "xdg_config_home_git"
In order to honor `$XDG_CONFIG_HOME` to built the path of systemd units, a lot of code from the `xdg_config_home()` function was duplicated. This existing function couldn’t be used as-is because it was hard-coding the `git` sub-directory below `$XDG_CONFIG_HOME`.
This first preparatory patch re-purposes `xdg_config_home()` to make it more generic by removing the `git` path it used to append to `$XDG_CONFIG_HOME`. Thanks to this refactoring, `xdg_config_home()` can be used to build paths like: * `$XDG_CONFIG_HOME/git/…` it’s the new `xdg_config_home_git()` function and * `$XDG_CONFIG_HOME/systemd/user/…` it’s the new `xdg_config_home_systemd()` function which will be introduced later, in the last patch of this series.
* maintenance: introduce ENABLE/DISABLE for code clarity
Some functions in git maintenance are doing one thing and the exact opposite, depending on a parameter that could be `0` or `1`. This could sometimes be confusing. This patch introduces an enum with `ENABLE` and `DISABLE` values to make the code more explicit.
* maintenance: `git maintenance run` learned `--scheduler=<scheduler>`
This patch contains all the code that is related to the addition of the new `--scheduler` parameter of the `git maintenance start` command, independently of the systemd timers.
This part has significantly changed to review the testing mechanisms. The `GIT_TEST_MAINT_SCHEDULER` environment variable can now take a comma separated list of schedulers and their mock in order to be able to test cases where multiple schedulers are available.
It allows to test that `git maintenance start --scheduler=XXX` not only enables the scheduler XXX, but it also disables all the other available ones. We can also test that `git maintenance stop`, stops all the available schedulers.
In order to remove the `cmd` parameter that was passed to a lot of functions, the parsing of `GIT_TEST_MAINT_SCHEDULER` is now factorized in a `get_schedule_cmd()` function that is invoked from the leaves of the function call tree. It means that this function is called many times to parse `GIT_TEST_MAINT_SCHEDULER` again and again. It is inefficient but as it is used for test only, it shouldn’t be a concern.
`int get_schdule_cmd(const char **cmd, int *is_available)`
This function returns `true` if `GIT_TEST_MAINT_SCHEDULER` is defined. `false` otherwise.
`*is_available` is set to `true` if `*cmd` is present in `$GIT_TEST_MAINT_SCHEDULER`, and to `false` otherwise.
If `*cmd` is present in `$GIT_TEST_MAINT_SCHEDULER`, it’s value is updated to its mock.
* maintenance: optionally use systemd timers on Linux
This last patch adds the support for systemd timers.
Lénaïc Huard (4): cache.h: rename "xdg_config_home" to "xdg_config_home_git" maintenance: introduce ENABLE/DISABLE for code clarity maintenance: `git maintenance run` learned `--scheduler=<scheduler>` maintenance: optionally use systemd timers on Linux
Documentation/git-maintenance.txt | 60 ++++ attr.c | 2 +- builtin/config.c | 2 +- builtin/credential-cache.c | 2 +- builtin/credential-store.c | 2 +- builtin/gc.c | 549 ++++++++++++++++++++++++++---- cache.h | 12 +- config.c | 2 +- dir.c | 2 +- path.c | 35 +- sequencer.c | 2 +- t/t7900-maintenance.sh | 110 +++++- 12 files changed, 685 insertions(+), 95 deletions(-)
-- 2.31.1