From 6fbe15fc05ec533496fa5d8ebcee33b50c364f80 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Thu, 10 May 2012 14:29:23 -0400 Subject: [PATCH] ostbuild: Add ostree-revision in buildroots, bin-to-src First, for binary snapshots we need to include the exact revision of the architecture buildroot. To do that, introduce "architecture-buildroots2". Second, for bin-to-src, we'd like to allow "partial" builds. So while we do expand everything to source, *also* include the binary ostree-revision. This will allow building just one component, while reusing the previously built binaries. --- src/ostbuild/pyostbuild/builtin_bin_to_src.py | 5 +++- .../pyostbuild/builtin_build_components.py | 7 ++++++ .../pyostbuild/builtin_chroot_compile_one.py | 25 +++++++++++++++---- src/ostbuild/pyostbuild/builtin_resolve.py | 6 +++++ 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/src/ostbuild/pyostbuild/builtin_bin_to_src.py b/src/ostbuild/pyostbuild/builtin_bin_to_src.py index d3b75b26..d50e9113 100755 --- a/src/ostbuild/pyostbuild/builtin_bin_to_src.py +++ b/src/ostbuild/pyostbuild/builtin_bin_to_src.py @@ -57,7 +57,10 @@ class OstbuildBinToSrc(builtins.Builtin): src_components[name] = meta for target in src_snapshot['targets']: - del target['base']['ostree-revision'] + for content_item in target['contents']: + name = content_item['name'] + rev = bin_components[name] + content_item['ostree-revision'] = rev return src_snapshot diff --git a/src/ostbuild/pyostbuild/builtin_build_components.py b/src/ostbuild/pyostbuild/builtin_build_components.py index c09dd9f1..010f4984 100755 --- a/src/ostbuild/pyostbuild/builtin_build_components.py +++ b/src/ostbuild/pyostbuild/builtin_build_components.py @@ -187,6 +187,13 @@ class OstbuildBuildComponents(builtins.Builtin): 'rev-parse', base_name]) base['ostree-revision'] = base_revision + if 'architecture-buildroots2' in bin_snapshot: + for arch,buildroot in bin_snapshot['architecture-buildroots2'].iteritems(): + name = buildroot['name'] + rev = run_sync_get_output(['ostree', '--repo=' + self.repo, + 'rev-parse', name]) + buildroot['ostree-revision'] = rev + component_refs = [] for name in components.iterkeys(): for architecture in component_architectures[name]: diff --git a/src/ostbuild/pyostbuild/builtin_chroot_compile_one.py b/src/ostbuild/pyostbuild/builtin_chroot_compile_one.py index 318cdd39..4615f05e 100755 --- a/src/ostbuild/pyostbuild/builtin_chroot_compile_one.py +++ b/src/ostbuild/pyostbuild/builtin_chroot_compile_one.py @@ -55,11 +55,27 @@ class OstbuildChrootCompileOne(builtins.Builtin): dependencies = buildutil.build_depends(component_name, components) component = components.get(component_name) - buildroots = self.snapshot['architecture-buildroots'] - base_devel_name = 'bases/' + buildroots[architecture] + ref_to_rev = {} - refs_to_resolve = [base_devel_name] - checkout_trees = [(base_devel_name, '/')] + arch_buildroot_name = None + arch_buildroot_rev = None + if 'architecture-buildroots2' in self.snapshot: + buildroots = self.snapshot['architecture-buildroots2'] + arch_buildroot = buildroots[architecture] + arch_buildroot_name = arch_buildroot['name'] + arch_buildroot_rev = arch_buildroot.get('ostree-revision') + else: + buildroots = self.snapshot['architecture-buildroots'] + arch_rev_suffix = buildsroots['architecture'] + arch_buildroot_name = 'bases/' + arch_rev_suffix + + if arch_buildroot_rev is None: + arch_buildroot_rev = run_sync_get_output(['ostree', '--repo=' + self.repo, 'rev-parse', + arch_buildroot_name]).strip() + + ref_to_rev[arch_buildroot_name] = arch_buildroot_rev + checkout_trees = [(arch_buildroot_name, '/')] + refs_to_resolve = [] for dependency_name in dependencies: buildname = 'components/%s/%s' % (dependency_name, architecture) refs_to_resolve.append(buildname) @@ -67,7 +83,6 @@ class OstbuildChrootCompileOne(builtins.Builtin): checkout_trees.append((buildname, '/devel')) resolved_refs = self._resolve_refs(refs_to_resolve) - ref_to_rev = {} for ref,rev in zip(refs_to_resolve, resolved_refs): ref_to_rev[ref] = rev diff --git a/src/ostbuild/pyostbuild/builtin_resolve.py b/src/ostbuild/pyostbuild/builtin_resolve.py index 9c66cce0..721a5800 100755 --- a/src/ostbuild/pyostbuild/builtin_resolve.py +++ b/src/ostbuild/pyostbuild/builtin_resolve.py @@ -150,6 +150,12 @@ class OstbuildResolve(builtins.Builtin): snapshot['architecture-buildroots'] = {} for architecture in manifest_architectures: snapshot['architecture-buildroots'][architecture] = '%s-%s-devel' % (base_prefix, architecture) + # Lame bit neeeded because I didn't have enough foresight to use an object + # for this in the first place, and I don't want to break backwards compatibility + # right now. + snapshot['architecture-buildroots2'] = {} + for architecture in manifest_architectures: + snapshot['architecture-buildroots2'][architecture] = {'name': 'bases/%s-%s-devel' % (base_prefix, architecture)} components_by_name = {} component_ordering = []