[ostree] ostbuild: Adapt "status" to expanded manifest



commit d3059d254ba47560e53358025bd5d1e579c58b51
Author: Colin Walters <walters verbum org>
Date:   Mon Mar 5 10:33:49 2012 -0500

    ostbuild: Adapt "status" to expanded manifest

 src/ostbuild/pyostbuild/buildutil.py               |   32 ++++++++------
 src/ostbuild/pyostbuild/builtin_build.py           |   16 ++++---
 src/ostbuild/pyostbuild/builtin_checkout.py        |    4 +-
 .../pyostbuild/builtin_chroot_compile_one.py       |   42 +++++++++---------
 src/ostbuild/pyostbuild/builtin_status.py          |   45 ++++++++++---------
 5 files changed, 74 insertions(+), 65 deletions(-)
---
diff --git a/src/ostbuild/pyostbuild/buildutil.py b/src/ostbuild/pyostbuild/buildutil.py
index 2e3b4a1..a0d94b7 100755
--- a/src/ostbuild/pyostbuild/buildutil.py
+++ b/src/ostbuild/pyostbuild/buildutil.py
@@ -75,20 +75,24 @@ def get_git_version_describe(dirpath, commit=None):
     version = run_sync_get_output(args, cwd=dirpath)
     return version.strip()
 
-def manifest_target(manifest, architecture):
-    return '%s-%s-devel' % (manifest['name'], architecture)
-
-def manifest_base(manifest, roottype, architecture):
-    return 'bases/%s-%s-%s' % (manifest['base'],
-                               architecture, roottype)
-
-def manifest_buildname(manifest, component, architecture):
-    return 'artifacts/%s/%s/%s' % (manifest_target (manifest, architecture),
+def manifest_target(manifest):
+    name = manifest['name']
+    is_runtime = name.endswith('-runtime')
+    # HACK - we should really name builds just like e.g. gnomeos-3.4-i686 
+    if is_runtime:
+        return name[:-len('-runtime')] + '-devel'
+    return name
+
+def manifest_base(manifest):
+    return 'bases/%s' % (manifest['base'],)
+
+def manifest_buildname(manifest, component):
+    return 'artifacts/%s/%s/%s' % (manifest_target(manifest),
                                    component['name'],
                                    component['branch'])
 
-def manifest_buildroot_name(manifest, component, architecture):
-    return 'buildroots/%s/%s/%s' % (manifest_target (manifest, architecture),
+def manifest_buildroot_name(manifest, component):
+    return 'buildroots/%s/%s/%s' % (manifest_target (manifest),
                                     component['name'],
                                     component['branch'])
 
@@ -112,11 +116,11 @@ def compose(repo, target, artifacts):
     os.unlink(path)
     return revision
 
-def compose_buildroot(manifest, repo, buildroot_name, component, dependencies, architecture):
-    base = manifest_base(manifest, 'devel', architecture)
+def compose_buildroot(manifest, repo, buildroot_name, component, dependencies):
+    base = 'bases/%s' % (manifest['base'], )
     buildroot_contents = [base + ':/']
     for dep in dependencies:
-        dep_buildname = manifest_buildname(manifest, dep, architecture)
+        dep_buildname = manifest_buildname(manifest, dep)
         buildroot_contents.append(dep_buildname + ':/runtime')
         buildroot_contents.append(dep_buildname + ':/devel')
 
diff --git a/src/ostbuild/pyostbuild/builtin_build.py b/src/ostbuild/pyostbuild/builtin_build.py
index 247fa07..b30f992 100755
--- a/src/ostbuild/pyostbuild/builtin_build.py
+++ b/src/ostbuild/pyostbuild/builtin_build.py
@@ -91,13 +91,14 @@ class OstbuildBuild(builtins.Builtin):
 
         return result
 
-    def _build_one_component(self, meta, architecture):
+    def _build_one_component(self, meta):
         name = meta['name']
         branch = meta['branch']
+        architecture = meta['arch']
 
-        target = buildutil.manifest_target(self.manifest, architecture)
-        buildname = buildutil.manifest_buildname(self.manifest, meta, architecture)
-        buildroot_name = buildutil.manifest_buildroot_name(self.manifest, meta, architecture)
+        target = buildutil.manifest_target(self.manifest)
+        buildname = buildutil.manifest_buildname(self.manifest, meta)
+        buildroot_name = buildutil.manifest_buildroot_name(self.manifest, meta)
 
         (keytype, uri) = buildutil.parse_src_key(meta['src'])
 
@@ -135,10 +136,10 @@ class OstbuildBuild(builtins.Builtin):
 
         metadata_path = os.path.join(component_src, '_ostbuild-meta.json')
         f = open(metadata_path, 'w')
-        json.dump(artifact_meta, f)
+        json.dump(artifact_meta, f, indent=4, sort_keys=True)
         f.close()
 
-        run_sync(['ostbuild', 'checkout', name], cwd=checkoutdir)
+        run_sync(['ostbuild', 'checkout', '--manifest=' + self.manifest_path, name], cwd=checkoutdir)
         
         logdir = os.path.join(self.workdir, 'logs', 'compile', name)
         old_logdir = os.path.join(self.workdir, 'old-logs', 'compile', name)
@@ -155,7 +156,7 @@ class OstbuildBuild(builtins.Builtin):
         log("Logging to %s" % (log_path, ))
         f = open(log_path, 'w')
         chroot_args = self._get_ostbuild_chroot_args(architecture)
-        chroot_args.extend(['--meta=' + metadata_path])
+        chroot_args.extend(['--pristine', '--manifest=' + self.manifest_path])
         if self.buildopts.shell_on_failure:
             ecode = run_sync_monitor_log_file(chroot_args, log_path, cwd=component_src, fatal_on_error=False)
             if ecode != 0:
@@ -228,6 +229,7 @@ class OstbuildBuild(builtins.Builtin):
         self.buildopts.shell_on_failure = args.shell_on_failure
         self.buildopts.skip_built = args.skip_built
 
+        self.manifest_path = args.manifest
         self.manifest = json.load(open(args.manifest))
 
         components = self.manifest['components']
diff --git a/src/ostbuild/pyostbuild/builtin_checkout.py b/src/ostbuild/pyostbuild/builtin_checkout.py
index 9600abb..e77589e 100755
--- a/src/ostbuild/pyostbuild/builtin_checkout.py
+++ b/src/ostbuild/pyostbuild/builtin_checkout.py
@@ -38,6 +38,7 @@ class OstbuildCheckout(builtins.Builtin):
 
     def execute(self, argv):
         parser = argparse.ArgumentParser(description=self.short_description)
+        parser.add_argument('--manifest', required=True)
         parser.add_argument('components', nargs='*')
 
         args = parser.parse_args(argv)
@@ -45,8 +46,7 @@ class OstbuildCheckout(builtins.Builtin):
         
         self.parse_config()
 
-        build_manifest_path = os.path.join(self.workdir, 'snapshot.json')
-        self.manifest = json.load(open(build_manifest_path))
+        self.manifest = json.load(open(args.manifest))
 
         if len(args.components) > 0:
             checkout_components = args.components
diff --git a/src/ostbuild/pyostbuild/builtin_chroot_compile_one.py b/src/ostbuild/pyostbuild/builtin_chroot_compile_one.py
index 58f06fe..2307a9b 100755
--- a/src/ostbuild/pyostbuild/builtin_chroot_compile_one.py
+++ b/src/ostbuild/pyostbuild/builtin_chroot_compile_one.py
@@ -31,7 +31,8 @@ class OstbuildChrootCompileOne(builtins.Builtin):
 
     def execute(self, argv):
         parser = argparse.ArgumentParser(description=self.short_description)
-        parser.add_argument('--meta')
+        parser.add_argument('--manifest', required=True)
+        parser.add_argument('--pristine', action='store_true')
         parser.add_argument('--debug-shell', action='store_true')
         
         args = parser.parse_args(argv)
@@ -39,21 +40,13 @@ class OstbuildChrootCompileOne(builtins.Builtin):
         self.parse_config()
 
         component_name = os.path.basename(os.getcwd())
-        build_manifest_path = os.path.join(self.workdir, 'snapshot.json')
-        self.manifest = json.load(open(build_manifest_path))
+        self.manifest = json.load(open(args.manifest))
 
-        if args.meta is not None:
-            f = open(args.meta)
-            self.metadata = json.load(f)
-            f.close()
-
-            component = buildutil.find_component_in_manifest(self.manifest, self.metadata['name'])
-        else:
-            component = buildutil.find_component_in_manifest(self.manifest, component_name)
-            if component is None:
-                fatal("Couldn't find component '%s' in manifest" % (component_name, ))
-
-            self.metadata = component
+        component = buildutil.find_component_in_manifest(self.manifest, component_name)
+        self.metadata = component
+        if component is None:
+            fatal("Couldn't find component '%s' in manifest" % (component_name, ))
+        if not args.pristine:
             self.metadata['src'] = 'dirty:worktree'
             self.metadata['revision'] = 'dirty-worktree'
 
@@ -62,11 +55,9 @@ class OstbuildChrootCompileOne(builtins.Builtin):
         dependencies = components[:index]
 
         architecture = os.uname()[4]
-        buildroot_name = buildutil.manifest_buildroot_name(self.manifest, self.metadata, architecture)
+        buildroot_name = self.manifest['name']
         buildroot_version = buildutil.compose_buildroot(self.manifest, self.repo, buildroot_name,
-                                                        self.metadata, dependencies, architecture)
-        self.metadata['buildroot-name'] = buildroot_name
-        self.metadata['buildroot-version'] = buildroot_version
+                                                        self.metadata, dependencies)
 
         if 'name' not in self.metadata:
             sys.stderr.write('Missing required key "%s" in metadata' % (k, ))
@@ -115,7 +106,7 @@ class OstbuildChrootCompileOne(builtins.Builtin):
             os.mkdir(sourcedir)
         
         output_metadata = open('_ostbuild-meta.json', 'w')
-        json.dump(self.metadata, output_metadata)
+        json.dump(self.metadata, output_metadata, indent=4, sort_keys=True)
         output_metadata.close()
         
         chroot_sourcedir = os.path.join('/ostbuild', 'source', self.metadata['name'])
@@ -142,6 +133,15 @@ class OstbuildChrootCompileOne(builtins.Builtin):
         env_copy['PWD'] = chroot_sourcedir
         run_sync(child_args, env=env_copy, keep_stdin=args.debug_shell)
 
-        shutil.copy(build_manifest_path, resultdir)
+        recorded_meta = dict(self.metadata)
+        del recorded_meta['revision']
+        patches_recorded_meta = recorded_meta.get('patches')
+        if patches_recorded_meta is not None:
+            del patches_recorded_meta['revision']
+
+        recorded_meta_path = os.path.join(resultdir, '_ostbuild-meta.json')
+        recorded_meta_f = open(recorded_meta_path, 'w')
+        json.dump(recorded_meta, recorded_meta_f, indent=4, sort_keys=True)
+        recorded_meta_f.close()
         
 builtins.register(OstbuildChrootCompileOne)
diff --git a/src/ostbuild/pyostbuild/builtin_status.py b/src/ostbuild/pyostbuild/builtin_status.py
index 76da628..4b85c9d 100755
--- a/src/ostbuild/pyostbuild/builtin_status.py
+++ b/src/ostbuild/pyostbuild/builtin_status.py
@@ -19,6 +19,7 @@
 # http://people.gnome.org/~walters/docs/build-api.txt
 
 import os,sys,stat,subprocess,tempfile,re,shutil
+import argparse
 from StringIO import StringIO
 import json
 
@@ -34,27 +35,29 @@ class OstbuildStatus(builtins.Builtin):
     def __init__(self):
         builtins.Builtin.__init__(self)
 
-    def execute(self, args):
+    def execute(self, argv):
+        parser = argparse.ArgumentParser(description=self.short_description)
+        parser.add_argument('--manifest', required=True)
+
+        args = parser.parse_args(argv)
+
         self.parse_config()
-        build_manifest_path = os.path.join(self.workdir, 'snapshot.json')
-        self.manifest = json.load(open(build_manifest_path))
-
-        for architecture in self.manifest['architectures']:
-            for component in self.manifest['components']:
-                branch = buildutil.manifest_buildname(self.manifest, component, architecture)
-                build_revision = run_sync_get_output(['ostree', '--repo=' + self.repo,
-                                                      'show',
-                                                      '--print-metadata-key=ostbuild-artifact-version',
-                                                      branch],
-                                                     none_on_error=True)
-                if build_revision is None:
-                    build_revision = '(not built)'
-                if build_revision != component['revision']:
-                    build_status = '(needs build)'
-                else:
-                    build_status = 'ok'
-                sys.stdout.write('{:<40} {:<95} {:<10}\n'.format(component['name'],
-                                                               build_revision, build_status))
-                                                  
+        self.manifest = json.load(open(args.manifest))
+
+        for component in self.manifest['components']:
+            branch = buildutil.manifest_buildname(self.manifest, component)
+            build_revision = run_sync_get_output(['ostree', '--repo=' + self.repo,
+                                                  'show',
+                                                  '--print-metadata-key=ostbuild-artifact-version',
+                                                  branch],
+                                                 none_on_error=True)
+            if build_revision is None:
+                build_revision = '(not built)'
+            if build_revision != component['revision']:
+                build_status = '(needs build)'
+            else:
+                build_status = 'ok'
+            sys.stdout.write('{:<40} {:<95} {:<10}\n'.format(component['name'],
+                                                             build_revision, build_status))
     
 builtins.register(OstbuildStatus)



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]