yadm-dev / yadm

Yet Another Dotfiles Manager
https://yadm.io/
GNU General Public License v3.0
5.11k stars 175 forks source link

Improve and harden alt file regeneration #466

Open rasa opened 1 year ago

rasa commented 1 year ago

What does this PR do?

Improvements include:

  1. Skip writing a temporary file if the file contents are unchanged
  2. Better error reporting if templating program fails
  3. Better error reporting/handling if file creation, mv, or chmod fail
  4. Quiet logs by not outputting "Creating output..." line twice (debug & loud)

What issues does this PR fix or reference?

In both Linux and WSL, I saw many temporary files created in the form .template.nnnn.nnnnn appear in my yadm managed directory. It was pretty common, sometimes happening several times in one day.

Previous Behavior

See above.

New Behavior

The new code skips regenerating the alt file if its contents have not changed. While this means we now read the old alt file before rewriting it, the vast majority of the time the contents are unchanged, so this extra read is offset by the skipped write and move.

While there is a small amount of time between reading the alt file, and rewriting it, the chance of a race condition inside this window is small, as yadm should be the only program running against these files.

Have tests been written for this change?

No. The existing tests should be sufficient as we aren't adding new functions or new logic.

Have these commits been signed with GnuPG?

Yes!


Please review yadm's Contributing Guide for best practices.