Make downloading a little more careful for races

As we're downloading packages in parallel, it could happen that we
copy a file that isn't fully copied yet
This commit is contained in:
Stephan Kulow 2022-11-06 08:24:11 +01:00
parent bd5bd5a444
commit 7bc4d6c8b1

View File

@ -1,5 +1,6 @@
import errno
import logging
import os
import shutil
import time
import urllib.parse
@ -169,11 +170,12 @@ class OBS:
with (dirpath / name).open("wb") as f:
f.write(self._download(project, package, name, revision).read())
shutil.copy(dirpath / name, cached_file)
# Validate the MD5 of the downloaded file
if md5(cached_file) != file_md5:
if md5(dirpath / name) != file_md5:
raise Exception(f"Download error in {name}")
shutil.copy(dirpath / name, cached_file.with_suffix(".new"))
os.rename(cached_file.with_suffix(".new"), cached_file)
else:
shutil.copy(cached_file, dirpath / name)