|
@@ -651,14 +651,16 @@ class DiskObjectStore(PackBasedObjectStore):
|
|
|
|
|
|
entries.sort()
|
|
entries.sort()
|
|
pack_base_name = self._get_pack_basepath(entries)
|
|
pack_base_name = self._get_pack_basepath(entries)
|
|
|
|
+ target_pack = pack_base_name + '.pack'
|
|
if sys.platform == 'win32':
|
|
if sys.platform == 'win32':
|
|
|
|
+
|
|
|
|
+
|
|
try:
|
|
try:
|
|
- os.rename(path, pack_base_name + '.pack')
|
|
+ os.remove(target_pack)
|
|
- except WindowsError:
|
|
+ except (IOError, OSError) as e:
|
|
- os.remove(pack_base_name + '.pack')
|
|
+ if e.errno != errno.ENOENT:
|
|
- os.rename(path, pack_base_name + '.pack')
|
|
+ raise
|
|
- else:
|
|
+ os.rename(path, target_pack)
|
|
- os.rename(path, pack_base_name + '.pack')
|
|
|
|
|
|
|
|
|
|
|
|
index_file = GitFile(pack_base_name + '.idx', 'wb')
|
|
index_file = GitFile(pack_base_name + '.idx', 'wb')
|
|
@@ -715,19 +717,16 @@ class DiskObjectStore(PackBasedObjectStore):
|
|
return self._pack_cache[basename]
|
|
return self._pack_cache[basename]
|
|
except KeyError:
|
|
except KeyError:
|
|
pass
|
|
pass
|
|
- else:
|
|
+ target_pack = basename + '.pack'
|
|
- os.unlink(path)
|
|
+ if sys.platform == 'win32':
|
|
- try:
|
|
+
|
|
- os.rename(path, basename + ".pack")
|
|
+
|
|
- except OSError as e:
|
|
+ try:
|
|
- if e.errno == errno.EEXIST:
|
|
+ os.remove(target_pack)
|
|
-
|
|
+ except (IOError, OSError) as e:
|
|
-
|
|
+ if e.errno != errno.ENOENT:
|
|
-
|
|
+ raise
|
|
-
|
|
+ os.rename(path, target_pack)
|
|
- os.unlink(path)
|
|
|
|
- else:
|
|
|
|
- raise
|
|
|
|
final_pack = Pack(basename)
|
|
final_pack = Pack(basename)
|
|
self._add_known_pack(basename, final_pack)
|
|
self._add_known_pack(basename, final_pack)
|
|
return final_pack
|
|
return final_pack
|