From 70f4497c93f992f4131ed273a48074c899555078 Mon Sep 17 00:00:00 2001 From: Michael Hanselmann <hansmi@google.com> Date: Fri, 25 Apr 2008 13:37:08 +0000 Subject: [PATCH] Extend utils.WriteFile Add parameters to not check the path for absoluteness, implement a dry run mode and automatically create a backup if requested. This will be used by the cfgupgrade utility. Reviewed-by: schreiberal --- lib/utils.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/utils.py b/lib/utils.py index 74845402d..733ac26b2 100644 --- a/lib/utils.py +++ b/lib/utils.py @@ -991,7 +991,8 @@ def NewUUID(): def WriteFile(file_name, fn=None, data=None, mode=None, uid=-1, gid=-1, - atime=None, mtime=None): + atime=None, mtime=None, + check_abspath=True, dry_run=False, backup=False): """(Over)write a file atomically. The file_name and either fn (a function taking one argument, the @@ -1006,7 +1007,7 @@ def WriteFile(file_name, fn=None, data=None, temporary file should be removed. """ - if not os.path.isabs(file_name): + if check_abspath and not os.path.isabs(file_name): raise errors.ProgrammerError("Path passed to WriteFile is not" " absolute: '%s'" % file_name) @@ -1017,6 +1018,8 @@ def WriteFile(file_name, fn=None, data=None, raise errors.ProgrammerError("Both atime and mtime must be either" " set or None") + if backup and not dry_run and os.path.isfile(file_name): + CreateBackup(file_name) dir_name, base_name = os.path.split(file_name) fd, new_name = tempfile.mkstemp('.new', base_name, dir_name) @@ -1034,7 +1037,8 @@ def WriteFile(file_name, fn=None, data=None, os.fsync(fd) if atime is not None and mtime is not None: os.utime(new_name, (atime, mtime)) - os.rename(new_name, file_name) + if not dry_run: + os.rename(new_name, file_name) finally: os.close(fd) RemoveFile(new_name) -- GitLab