Add support for not having koji volume mounted locally
With this patch, Pungi can be configured with a local directory to be used as a cache for RPMs, and it will download packages from Koji over HTTP instead of reading them from filesystem directly. The files from the cache can then be hardlink as usual. There is locking in place to avoid different composes running at the same time to step on each other. This is now supported for RPMs only, be it real builds or scratch builds. Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
This commit is contained in:
parent
b6296bdfcd
commit
631bb01d8f
10 changed files with 313 additions and 24 deletions
|
|
@ -354,6 +354,7 @@ class KojiPackageSet(PackageSetBase):
|
|||
extra_tasks=None,
|
||||
signed_packages_retries=0,
|
||||
signed_packages_wait=30,
|
||||
downloader=None,
|
||||
):
|
||||
"""
|
||||
Creates new KojiPackageSet.
|
||||
|
|
@ -408,6 +409,8 @@ class KojiPackageSet(PackageSetBase):
|
|||
self.signed_packages_retries = signed_packages_retries
|
||||
self.signed_packages_wait = signed_packages_wait
|
||||
|
||||
self.downloader = downloader
|
||||
|
||||
def __getstate__(self):
|
||||
result = self.__dict__.copy()
|
||||
del result["koji_wrapper"]
|
||||
|
|
@ -526,7 +529,7 @@ class KojiPackageSet(PackageSetBase):
|
|||
# Check if this RPM is coming from scratch task. In this case, we already
|
||||
# know the path.
|
||||
if "path_from_task" in rpm_info:
|
||||
return rpm_info["path_from_task"]
|
||||
return self.downloader.get_file(rpm_info["path_from_task"])
|
||||
|
||||
pathinfo = self.koji_wrapper.koji_module.pathinfo
|
||||
paths = []
|
||||
|
|
@ -543,8 +546,9 @@ class KojiPackageSet(PackageSetBase):
|
|||
)
|
||||
if rpm_path not in paths:
|
||||
paths.append(rpm_path)
|
||||
if os.path.isfile(rpm_path):
|
||||
return rpm_path
|
||||
path = self.downloader.get_file(rpm_path)
|
||||
if path:
|
||||
return path
|
||||
|
||||
# No signed copy was found, wait a little and try again.
|
||||
attempts_left -= 1
|
||||
|
|
@ -557,16 +561,18 @@ class KojiPackageSet(PackageSetBase):
|
|||
# use an unsigned copy (if allowed)
|
||||
rpm_path = os.path.join(pathinfo.build(build_info), pathinfo.rpm(rpm_info))
|
||||
paths.append(rpm_path)
|
||||
if os.path.isfile(rpm_path):
|
||||
return rpm_path
|
||||
path = self.downloader.get_file(rpm_path)
|
||||
if path:
|
||||
return path
|
||||
|
||||
if self._allow_invalid_sigkeys and rpm_info["name"] not in self.packages:
|
||||
# use an unsigned copy (if allowed)
|
||||
rpm_path = os.path.join(pathinfo.build(build_info), pathinfo.rpm(rpm_info))
|
||||
paths.append(rpm_path)
|
||||
if os.path.isfile(rpm_path):
|
||||
path = self.downloader.get_file(rpm_path)
|
||||
if path:
|
||||
self._invalid_sigkey_rpms.append(rpm_info)
|
||||
return rpm_path
|
||||
return path
|
||||
|
||||
self._invalid_sigkey_rpms.append(rpm_info)
|
||||
self.log_error(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue