summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--platform_utils.py17
-rw-r--r--project.py4
2 files changed, 19 insertions, 2 deletions
diff --git a/platform_utils.py b/platform_utils.py
index 4417c5a3..e0fa9dcc 100644
--- a/platform_utils.py
+++ b/platform_utils.py
@@ -13,6 +13,7 @@
13# See the License for the specific language governing permissions and 13# See the License for the specific language governing permissions and
14# limitations under the License. 14# limitations under the License.
15 15
16import errno
16import os 17import os
17import platform 18import platform
18import select 19import select
@@ -225,3 +226,19 @@ def handle_rmtree_error(function, path, excinfo):
225 # Allow deleting read-only files 226 # Allow deleting read-only files
226 os.chmod(path, stat.S_IWRITE) 227 os.chmod(path, stat.S_IWRITE)
227 function(path) 228 function(path)
229
230
231def rename(src, dst):
232 if isWindows():
233 # On Windows, rename fails if destination exists, see
234 # https://docs.python.org/2/library/os.html#os.rename
235 try:
236 os.rename(src, dst)
237 except OSError as e:
238 if e.errno == errno.EEXIST:
239 os.remove(dst)
240 os.rename(src, dst)
241 else:
242 raise
243 else:
244 os.rename(src, dst)
diff --git a/project.py b/project.py
index ba18337b..e8de4842 100644
--- a/project.py
+++ b/project.py
@@ -63,7 +63,7 @@ def _lwrite(path, content):
63 fd.close() 63 fd.close()
64 64
65 try: 65 try:
66 os.rename(lock, path) 66 platform_utils.rename(lock, path)
67 except OSError: 67 except OSError:
68 os.remove(lock) 68 os.remove(lock)
69 raise 69 raise
@@ -2198,7 +2198,7 @@ class Project(object):
2198 2198
2199 if os.path.exists(tmpPath): 2199 if os.path.exists(tmpPath):
2200 if curlret == 0 and self._IsValidBundle(tmpPath, quiet): 2200 if curlret == 0 and self._IsValidBundle(tmpPath, quiet):
2201 os.rename(tmpPath, dstPath) 2201 platform_utils.rename(tmpPath, dstPath)
2202 return True 2202 return True
2203 else: 2203 else:
2204 os.remove(tmpPath) 2204 os.remove(tmpPath)