cron: don't force changed=True when old crontab was empty

The cron module forces changed=True when there was no real change,
but the original crontab did not contain a final newline, which is
mandatory.

When the user has no crontab or the user does not exist at all,
crontab -l exits with 1 and the cron module correctly interprets
this as "no crontab" and stores the old crontab as "".

However this triggers changed=True, even if we're not going to
change anything, e.g. when removing a crontab entry from a user
who has no crontabs at all.

Let's special-case the fact that the old crontab is empty and not
force changed=True in that case.

(cherry picked from commit 61579aebb2)
This commit is contained in:
Evgeni Golov 2017-02-19 17:51:12 +01:00 committed by Toshio Kuratomi
parent f001646f2c
commit 7c9c8396d1

View file

@ -726,7 +726,7 @@ def main():
changed = True
# no changes to env/job, but existing crontab needs a terminating newline
if not changed:
if not changed and not crontab.existing == '':
if not (crontab.existing.endswith('\r') or crontab.existing.endswith('\n')):
changed = True