On Thu, 2013-11-28 at 20:06 +0100, Martin Kolman wrote:
If a package from older release is used
(as there is no build for the current release
if the package was not updated for the current release),
store it in a separate folder called for_<release id>.
Otherwise the package would be downloaded again each time,
making the updates image creation slow.
Without the subfolder makeupdates would not be enable to distinguish
which cached packages are outdated and should not be used and which
packages just don't have a new build and should be used.
Signed-off-by: Martin Kolman <mkolman(a)redhat.com>
---
scripts/makeupdates | 41 +++++++++++++++++++++++++++++++++++------
1 file changed, 35 insertions(+), 6 deletions(-)
diff --git a/scripts/makeupdates b/scripts/makeupdates
index 3b4fe63..8d36d79 100755
--- a/scripts/makeupdates
+++ b/scripts/makeupdates
@@ -39,6 +39,7 @@ except ImportError:
exit(1)
RPM_FOLDER_NAME = os.path.expanduser("~/.anaconda_updates_rpm_cache")
+RPM_RELEASE_DIR_TEMPLATE = "for_%s"
KOJI_BASE_URL = "http://kojipkgs.fedoraproject.org//packages/" \
"%(toplevel_name)s/%(toplevel_version)s/%(release)s/%(arch)s/%(rpm_name)s"
@@ -190,6 +191,10 @@ def download_to_file(url, path):
or None if the download fails for some reason
"""
try:
+ # try to make sure the folder for the download exists
+ download_folder = os.path.split(path)[0]
+ if not os.access(download_folder, os.W_OK):
I think os.path.isdir() would
be better here.
+ os.makedirs(download_folder)
result = urllib.urlretrieve(url, path)
# return the storage path
return result[0]
@@ -577,9 +582,13 @@ def remove_local_packages(packages, arch, release_id, added_rpms):
"""Remove locally available RPMs from the list of needed packages,
return locally unavailable packages and paths to relevant locally
available RPMs for inclusion"""
+ current_release_dir = RPM_RELEASE_DIR_TEMPLATE % release_id
# list all package names and version for the RPMs already in cache
folder_glob = os.path.join(RPM_FOLDER_NAME, "*.rpm")
folder_glob = os.path.abspath(folder_glob)
+ release_folder_glob = os.path.join(RPM_FOLDER_NAME, current_release_dir,
"*.rpm")
+ release_folder_glob = os.path.abspath(release_folder_glob)
+
include_rpms = []
skipped_packages = []
@@ -603,7 +612,11 @@ def remove_local_packages(packages, arch, release_id, added_rpms):
# currently specified architecture
allowed = ("noarch.rpm", "%s.rpm" % arch)
relevant_rpms = [x for x in glob.glob(folder_glob) if x.endswith(allowed)]
-
+ # also add any RPMS from the current release folder
+ # (has RPMs from older releases that were not yet rebuilt
+ # for the current release)
+ relevant_rpms.extend([x for x in glob.glob(release_folder_glob)
+ if x.endswith(allowed)])
You can drop the square
brackets here. extend() works with a generator.
--
Vratislav Podzimek
Anaconda Rider | Red Hat, Inc. | Brno - Czech Republic