# 4. Perform a file replacement with backup filename foo.backup,
# replaced file foo, and replacement file .foo.tmp. If any step of
# this operation fails, reclassify as a conflict and stop.
+ #
+ # Returns the path of the destination file.
precondition(isinstance(path, unicode), path=path)
path = fileutil.abspath_expanduser_unicode(path, base=base)
fileutil.write(replacement_path, file_contents)
os.utime(replacement_path, (now, now - cls.FUDGE_SECONDS))
if is_conflict:
- cls._rename_conflicted_file(path, replacement_path)
+ return cls._rename_conflicted_file(path, replacement_path)
else:
try:
fileutil.replace_file(path, replacement_path, backup_path)
+ return path
except fileutil.ConflictError:
- is_conflict = True
- cls._rename_conflicted_file(path, replacement_path)
- if is_conflict:
- raise ConflictError("Conflict detected...")
+ return cls._rename_conflicted_file(path, replacement_path)
@classmethod
def _rename_conflicted_file(self, path, replacement_path):
conflict_path = path + u".conflict"
fileutil.rename_no_overwrite(replacement_path, conflict_path)
+ return conflict_path