From 5d5c1bb0aaa818465d480b90f7bce40dfb138bde Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Jan 02 2018 14:07:48 +0000 Subject: [PATCH 1/2] ostree/utils: Drop timestamps from generated repo names Since we drop these files in a separate workdir each time, there's no need to datestamp them. Doing so is part of the cause for invalidating's rpm-ostree input change hashing. Issue: https://pagure.io/pungi/issue/811 Signed-off-by: Colin Walters --- diff --git a/pungi/ostree/utils.py b/pungi/ostree/utils.py index 4c52fd2..a877738 100644 --- a/pungi/ostree/utils.py +++ b/pungi/ostree/utils.py @@ -86,21 +86,17 @@ def tweak_treeconf(treeconf, source_repos=None, keep_original_sources=False, upd Additionally, other values can be passed to method by 'update_dict' parameter to update treefile content. """ - # add this timestamp to repo name to get unique repo filename and repo name - # should be safe enough - time = datetime.datetime.now().strftime("%Y%m%d%H%M%S") - treeconf_dir = os.path.dirname(treeconf) with open(treeconf, 'r') as f: treeconf_content = json.load(f) # backup the old tree config - os.rename(treeconf, '%s.%s.bak' % (treeconf, time)) + os.rename(treeconf, '{}.bak'.format(treeconf)) repos = [] if source_repos: for repo in source_repos: - name = "%s-%s" % (repo['name'], time) + name = repo['name'] _write_repofile("%s/%s.repo" % (treeconf_dir, name), name, repo) repos.append(name) From 4d9b0135a44dc3b07d68966cd8ce0f73e81c939a Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Jan 02 2018 14:08:58 +0000 Subject: [PATCH 2/2] ostree/utils: Generate a single pungi.repo file, use repo- IDs Ideally, pungi would generate repository IDs like `fedora-updates` or so, and we'd have versioning inside the rpm-md. But for now let's do this to avoid invalidating rpm-ostree's change detection. Closes: https://pagure.io/pungi/issue/811 Signed-off-by: Colin Walters --- diff --git a/pungi/ostree/utils.py b/pungi/ostree/utils.py index a877738..2cf86c9 100644 --- a/pungi/ostree/utils.py +++ b/pungi/ostree/utils.py @@ -66,19 +66,6 @@ def get_commitid_from_commitid_file(commitid_file, logger=None): return commitid -def _write_repofile(path, name, repo): - """Write a .repo file with given data.""" - with open(path, 'w') as f: - f.write("[%s]\n" % name) - f.write("name=%s\n" % name) - f.write("baseurl=%s\n" % repo['baseurl']) - exclude = repo.get('exclude', None) - if exclude: - f.write("exclude=%s\n" % exclude) - gpgcheck = '1' if repo.get('gpgcheck', False) else '0' - f.write("gpgcheck=%s\n" % gpgcheck) - - def tweak_treeconf(treeconf, source_repos=None, keep_original_sources=False, update_dict=None): """ Update tree config file by adding new repos, and remove existing repos @@ -95,10 +82,25 @@ def tweak_treeconf(treeconf, source_repos=None, keep_original_sources=False, upd repos = [] if source_repos: - for repo in source_repos: - name = repo['name'] - _write_repofile("%s/%s.repo" % (treeconf_dir, name), name, repo) - repos.append(name) + # Sort to ensure reliable ordering + source_repos = sorted(source_repos, key=lambda x: x['name']) + # Now, since pungi includes timestamps in the repo names which + # currently defeats rpm-ostree's change detection, let's just + # use repos named 'repo-'. + # https://pagure.io/pungi/issue/811 + with open("{}/pungi.repo".format(treeconf_dir), 'w') as f: + for i,repo in enumerate(source_repos): + name = 'repo-{}'.format(i) + f.write("[%s]\n" % name) + f.write("name=%s\n" % name) + f.write("baseurl=%s\n" % repo['baseurl']) + exclude = repo.get('exclude', None) + if exclude: + f.write("exclude=%s\n" % exclude) + gpgcheck = '1' if repo.get('gpgcheck', False) else '0' + f.write("gpgcheck=%s\n" % gpgcheck) + + repos.append(name) original_repos = treeconf_content.get('repos', []) if keep_original_sources: