On 08/08/2023 18:14, Derrick Stolee wrote:
On 8/8/2023 1:06 PM, Derrick Stolee wrote:
On 8/8/2023 8:08 AM, Phillip Wood wrote:
On 07/08/2023 19:51, Derrick Stolee via GitGitGadget wrote:
+ char *local_timer_name = xstrfmt("git-maintenance@%s.timer", frequency);
The "@" in the name signifies that it is a template unit which it isn't anymore so I think we want to change this to "git-maintenance-%s.timer"
I'll also take your SYSTEMD_UNIT_FORMAT macro suggestion to simplify things.
As I was checking things, it turns out that we _should_ keep the '@' symbol
if only to make sure that our new schedule overwrites the old schedule.
Oh, so if the user already has scheduled maintenance set up then running
"git maintenance start" adds a new set of timers. I'd not though about that.
The alternative is that we manually try to delete the old schedule, but that
feels like an inefficient way to do it, leaving some cruft around long-term.
This patch still changes the names of the files we write. Currently we write
$XDG_CONFIG_HOME/systemd/user/git-maintenance@.service
$XDG_CONFIG_HOME/systemd/user/git-maintenance@.timer
and this patch changes that to
$XDG_CONFIG_HOME/systemd/user/git-maintenance@hourly.service
$XDG_CONFIG_HOME/systemd/user/git-maintenance@daily.service
$XDG_CONFIG_HOME/systemd/user/git-maintenance@weekly.service
$XDG_CONFIG_HOME/systemd/user/git-maintenance@hourly.timer
$XDG_CONFIG_HOME/systemd/user/git-maintenance@daily.timer
$XDG_CONFIG_HOME/systemd/user/git-maintenance@weekly.timer
If the user has already enabled maintenance then
$XDG_CONFIG_HOME/systemd/user/timers.target.wants/git-maintenance@hourly.timer
$XDG_CONFIG_HOME/systemd/user/timers.target.wants/git-maintenance@daily.timer
$XDG_CONFIG_HOME/systemd/user/timers.target.wants/git-maintenance@weekly.timer
will exist and are all symlinks pointing to
$XDG_CONFIG_HOME/systemd/user/git-maintenance@.timer
After this patch if the user runs "git maintenance start" again then
systemctl will update the symlinks tot point to the matching unit files
rather than the old template file. That means the user will pick up the
new schedule but we leave behind the original files that are unused.
For completeness, here is what I did to check:
$ systemctl --user list-timers
NEXT LEFT LAST PASSED UNIT ACTIVATES
Tue 2023-08-08 13:13:00 EDT 6s left n/a n/a git-maintenance-hourly.timer git-maintenance-hourly.service
Tue 2023-08-08 13:50:00 EDT 37min left Tue 2023-08-08 12:50:10 EDT 22min ago git-maintenance@hourly.timer git-maintenance@hourly.service
Wed 2023-08-09 00:13:00 EDT 11h left n/a n/a git-maintenance-daily.timer git-maintenance-daily.service
Wed 2023-08-09 00:50:00 EDT 11h left Tue 2023-08-08 09:35:31 EDT 3h 37min ago git-maintenance@daily.timer git-maintenance@daily.service
Mon 2023-08-14 00:13:00 EDT 5 days left n/a n/a git-maintenance-weekly.timer git-maintenance-weekly.service
Mon 2023-08-14 00:50:00 EDT 5 days left Mon 2023-08-07 10:28:10 EDT 1 day 2h ago git-maintenance@weekly.timer git-maintenance@weekly.service
Do you have an alternative idea how to handle that?
I think we should stick with the names as you have them. It might be
worth keeping the service file as a template so we only write the new
timer files and have a reason to use the "@" naming scheme. We could
update systemd_timer_setup_units() to delete git-maintenance@.timer if
we successfully enable the new timer unit files.
Sorry for the confusion, I should have thought about the user running
"git maintenance start" for a second time.
Best Wishes
Phillip