From df1ab0f01a695aeedea8a8c050636f80b61b1157 Mon Sep 17 00:00:00 2001 From: Sebastian Schuberth Date: Thu, 9 Jun 2016 11:34:18 +0200 Subject: [PATCH] Catch OSError when renaming and try to remove the destination file first Otherwise the rename fails on Windows if the destination file already exists. Change-Id: Id15cfaa5b9278d7e932a7975ab6e5a878b31a642 --- jenkins_jobs/builder.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/jenkins_jobs/builder.py b/jenkins_jobs/builder.py index 9775f7ff1..d7d68bbae 100644 --- a/jenkins_jobs/builder.py +++ b/jenkins_jobs/builder.py @@ -110,7 +110,13 @@ class CacheStorage(object): tfile.flush() self._os.fsync(tfile.fileno()) tfile.close() - self._os.rename(tfile.name, self.cachefilename) + try: + self._os.rename(tfile.name, self.cachefilename) + except OSError: + # On Windows, if dst already exists, OSError will be raised even if + # it is a file. Remove the file first in that case and try again. + self._os.remove(self.cachefilename) + self._os.rename(tfile.name, self.cachefilename) self._logger.debug("Cache written out to '%s'" % self.cachefilename)