For many years I’ve used Version-controlled
/etc on Linux to track changes. On MacOS
there isn’t a location in
/etc to put a
crontab, and my user
crontab is in
/var/at/tabs/, so how can I keep it version-controlled?
I solved this problem by writing a wrapper program: crontab-edit.
When run without arguments it sets
$EDITOR so that
crontab -e runs
crontab-edit TEMPORARY_FILE. When run with an argument it:
- changes directory to a git repository
- checks that there aren’t any uncommitted changes
- pulls and pushes to ensure the repository is up to date
vimdiff CHECKED_IN_FILE TEMPORARY_FILEso you can make the edits in both files (or recover existing edits)
- commits the changes
- pulls and pushes so your changes are upstream
There’s a little more complexity around checking whether there are any changes to commit, following symlinks, and creating files if necessary, but overall it’s relatively straightforward.