[ostree] ostbuild: Re-unify into one snapshot.json file



commit 8e3a3c56674d68cec2a2dc636bacd0bd24cdb40e
Author: Colin Walters <walters verbum org>
Date:   Tue Mar 13 10:13:22 2012 -0400

    ostbuild: Re-unify into one snapshot.json file
    
    This is actually easier.  Now add 'ostbuild query-content' which can
    extract the JSON data we stuff into builds.

 Makefile-ostbuild.am                               |    2 +-
 src/ostbuild/pyostbuild/builtin_build.py           |   44 +++-----------------
 src/ostbuild/pyostbuild/builtin_checkout.py        |    4 +-
 .../pyostbuild/builtin_chroot_compile_one.py       |   12 +++--
 ...in_gen_snapshot.py => builtin_query_content.py} |   43 +++++++++----------
 src/ostbuild/pyostbuild/builtin_resolve.py         |   20 +++------
 src/ostbuild/pyostbuild/builtins.py                |    8 +--
 src/ostbuild/pyostbuild/main.py                    |    2 +-
 8 files changed, 48 insertions(+), 87 deletions(-)
---
diff --git a/Makefile-ostbuild.am b/Makefile-ostbuild.am
index cc5ed5e..08eb8c0 100644
--- a/Makefile-ostbuild.am
+++ b/Makefile-ostbuild.am
@@ -27,7 +27,7 @@ pyostbuild_PYTHON =					\
 	src/ostbuild/pyostbuild/builtin_chroot_compile_one.py	\
 	src/ostbuild/pyostbuild/builtin_chroot_run_triggers.py	\
 	src/ostbuild/pyostbuild/builtin_compile_one.py	\
-	src/ostbuild/pyostbuild/builtin_gen_snapshot.py	\
+	src/ostbuild/pyostbuild/builtin_query_content.py	\
 	src/ostbuild/pyostbuild/builtin_resolve.py	\
 	src/ostbuild/pyostbuild/builtin_status.py	\
 	src/ostbuild/pyostbuild/builtins.py		\
diff --git a/src/ostbuild/pyostbuild/builtin_build.py b/src/ostbuild/pyostbuild/builtin_build.py
index 88073bb..3603932 100755
--- a/src/ostbuild/pyostbuild/builtin_build.py
+++ b/src/ostbuild/pyostbuild/builtin_build.py
@@ -60,38 +60,6 @@ class OstbuildBuild(builtins.Builtin):
         run_sync(args, cwd=cwd, fatal_on_error=False, keep_stdin=True)
         fatal("Exiting after debug shell")
 
-    def _resolve_component_meta(self, component_meta):
-        result = dict(component_meta)
-        orig_src = component_meta['src']
-
-        did_expand = False
-        for (vcsprefix, expansion) in self.manifest['vcsconfig'].iteritems():
-            prefix = vcsprefix + ':'
-            if orig_src.startswith(prefix):
-                result['src'] = expansion + orig_src[len(prefix):]
-                did_expand = True
-                break
-
-        name = component_meta.get('name')
-        if name is None:
-            if did_expand:
-                src = orig_src
-                idx = src.rindex(':')
-                name = src[idx+1:]
-            else:
-                src = result['src']
-                idx = src.rindex('/')
-                name = src[idx+1:]
-            if name.endswith('.git'):
-                name = name[:-4]
-            name = name.replace('/', '-')
-            result['name'] = name
-
-        if 'branch' not in result:
-            result['branch'] = 'master'
-
-        return result
-
     def _build_one_component(self, name, component):
         branch = component['branch']
         architecture = component['architecture']
@@ -226,7 +194,7 @@ class OstbuildBuild(builtins.Builtin):
                           '--union', '--subpath=' + subtree,
                           branch_rev, compose_rootdir])
 
-        contents_path = os.path.join(compose_rootdir, 'manifest.json')
+        contents_path = os.path.join(compose_rootdir, 'contents.json')
         f = open(contents_path, 'w')
         json.dump(metadata, f, indent=4, sort_keys=True)
         f.close()
@@ -249,7 +217,7 @@ class OstbuildBuild(builtins.Builtin):
         self.args = args
         
         self.parse_config()
-        self.parse_components_and_targets()
+        self.parse_snapshot()
 
         self.buildopts = BuildOptions()
         self.buildopts.shell_on_failure = args.shell_on_failure
@@ -259,7 +227,7 @@ class OstbuildBuild(builtins.Builtin):
         if args.recompose:
             pass
         elif len(args.components) == 0:
-            tsorted = buildutil.tsort_components(self.components, 'build-depends')
+            tsorted = buildutil.tsort_components(self.snapshot['components'], 'build-depends')
             tsorted.reverse()
             build_component_order = tsorted
         else:
@@ -267,7 +235,7 @@ class OstbuildBuild(builtins.Builtin):
                 fatal("Can't specify --start-at with component list")
             for name in args.components:
                 found = False
-                component = self.components.get(name)
+                component = self.snapshot['components'].get(name)
                 if component is None:
                     fatal("Unknown component %r" % (name, ))
                 build_component_order.append(name)
@@ -284,10 +252,10 @@ class OstbuildBuild(builtins.Builtin):
             start_at_index = 0
 
         for component_name in build_component_order[start_at_index:]:
-            component = self.components.get(component_name)
+            component = self.snapshot['components'].get(component_name)
             self._build_one_component(component_name, component)
 
-        for target in self.targets['targets']:
+        for target in self.snapshot['targets']:
             self._compose(target)
         
 builtins.register(OstbuildBuild)
diff --git a/src/ostbuild/pyostbuild/builtin_checkout.py b/src/ostbuild/pyostbuild/builtin_checkout.py
index b768fe6..553e505 100755
--- a/src/ostbuild/pyostbuild/builtin_checkout.py
+++ b/src/ostbuild/pyostbuild/builtin_checkout.py
@@ -47,7 +47,7 @@ class OstbuildCheckout(builtins.Builtin):
         self.args = args
         
         self.parse_config()
-        self.parse_components_and_targets()
+        self.parse_snapshot()
 
         if len(args.components) > 0:
             checkout_components = args.components
@@ -56,7 +56,7 @@ class OstbuildCheckout(builtins.Builtin):
 
         for component_name in checkout_components:
             found = False
-            component = self.components.get(component_name)
+            component = self.snapshot['components'].get(component_name)
             if component is None:
                 fatal("Unknown component %r" % (component_name, ))
             (keytype, uri) = buildutil.parse_src_key(component['src'])
diff --git a/src/ostbuild/pyostbuild/builtin_chroot_compile_one.py b/src/ostbuild/pyostbuild/builtin_chroot_compile_one.py
index a77d6cf..40d4665 100755
--- a/src/ostbuild/pyostbuild/builtin_chroot_compile_one.py
+++ b/src/ostbuild/pyostbuild/builtin_chroot_compile_one.py
@@ -31,10 +31,11 @@ class OstbuildChrootCompileOne(builtins.Builtin):
     short_description = "Build artifacts from the current source directory in a chroot"
 
     def _compose_buildroot(self, component_name, dirpath):
-        dependencies = buildutil.build_depends(component_name, self.components)
-        component = self.components.get(component_name)
+        components = self.snapshot['components']
+        dependencies = buildutil.build_depends(component_name, components)
+        component = components.get(component_name)
 
-        base_devel_name = 'bases/%s-%s-%s' % (self.manifest['base-prefix'],
+        base_devel_name = 'bases/%s-%s-%s' % (self.snapshot['base-prefix'],
                                               component['architecture'],
                                               'devel')
         checkout_trees = [(base_devel_name, '/')]
@@ -58,7 +59,7 @@ class OstbuildChrootCompileOne(builtins.Builtin):
         args = parser.parse_args(argv)
 
         self.parse_config()
-        self.parse_components_and_targets()
+        self.parse_snapshot()
 
         if args.name:
             component_name = args.name
@@ -68,7 +69,8 @@ class OstbuildChrootCompileOne(builtins.Builtin):
             parentparent = os.path.dirname(parent)
             component_name = '%s/%s/%s' % tuple(map(os.path.basename, [parentparent, parent, cwd]))
 
-        component = self.components.get(component_name)
+        components = self.snapshot['components']
+        component = components.get(component_name)
         if component is None:
             fatal("Couldn't find component '%s' in manifest" % (component_name, ))
         self.metadata = dict(component)
diff --git a/src/ostbuild/pyostbuild/builtin_gen_snapshot.py b/src/ostbuild/pyostbuild/builtin_query_content.py
similarity index 62%
rename from src/ostbuild/pyostbuild/builtin_gen_snapshot.py
rename to src/ostbuild/pyostbuild/builtin_query_content.py
index c70b806..89f5839 100755
--- a/src/ostbuild/pyostbuild/builtin_gen_snapshot.py
+++ b/src/ostbuild/pyostbuild/builtin_query_content.py
@@ -28,9 +28,9 @@ from .ostbuildlog import log, fatal
 from .subprocess_helpers import run_sync, run_sync_get_output
 from . import buildutil
 
-class OstbuildGenSnapshot(builtins.Builtin):
-    name = "gen-snapshot"
-    short_description = "Generate a snapshot description from a tree"
+class OstbuildQueryContent(builtins.Builtin):
+    name = "query-content"
+    short_description = "Output metadata from a component"
 
     def __init__(self):
         builtins.Builtin.__init__(self)
@@ -38,6 +38,7 @@ class OstbuildGenSnapshot(builtins.Builtin):
     def execute(self, argv):
         parser = argparse.ArgumentParser(description=self.short_description)
         parser.add_argument('--branch', required=True)
+        parser.add_argument('--component')
 
         args = parser.parse_args(argv)
         self.args = args
@@ -46,23 +47,21 @@ class OstbuildGenSnapshot(builtins.Builtin):
         contents_json_text = run_sync_get_output(['ostree', '--repo=' + self.repo,
                                                   'cat', args.branch, 'contents.json'])
         
-        contents = json.loads(contents_json_text)
-        contents_list = contents['contents']
+        if args.component is None:
+            sys.stdout.write(contents_json_text)
+        else:
+            contents = json.loads(contents_json_text)
+            contents_list = contents['contents']
+            found = False
+            for content in contents_list:
+                if content['name'] != args.component:
+                    found = True
+                    break
+            if not found:
+                fatal("Unknown component '%s'" % (args.component, ))
+            ostbuildmeta_json = run_sync_get_output(['ostree', '--repo=' + self.repo,
+                                                     'cat', content['ostree-revision'],
+                                                     '/_ostbuild-meta.json'])
+            sys.stdout.write(ostbuildmeta_json)
 
-        base = contents_list[0]
-        artifacts = contents_list[1:]
-
-        components = []
-        snapshot = {'name': args.branch,
-                    'base': contents['base'],
-                    'components': components}
-
-        for artifact in artifacts:
-            component_meta_text = run_sync_get_output(['ostree', '--repo=' + self.repo,
-                                                       'cat', artifact['rev'], '/_ostbuild-meta.json'])
-            component_meta = json.loads(component_meta_text)
-            components.append(component_meta)
-
-        json.dump(snapshot, sys.stdout)
-    
-builtins.register(OstbuildGenSnapshot)
+builtins.register(OstbuildQueryContent)
diff --git a/src/ostbuild/pyostbuild/builtin_resolve.py b/src/ostbuild/pyostbuild/builtin_resolve.py
index 6defbae..3486396 100755
--- a/src/ostbuild/pyostbuild/builtin_resolve.py
+++ b/src/ostbuild/pyostbuild/builtin_resolve.py
@@ -193,9 +193,7 @@ class OstbuildResolve(builtins.Builtin):
                 component['patches']['files'] = patch_files
 
         name_prefix = snapshot['name-prefix']
-        del snapshot['name-prefix']
         base_prefix = snapshot['base-prefix']
-        del snapshot['base-prefix']
 
         manifest_architectures = snapshot['architectures']
 
@@ -247,9 +245,8 @@ class OstbuildResolve(builtins.Builtin):
         del snapshot['patches']
         del snapshot['architectures']
 
-        targets_json = {}
         targets_list = []
-        targets_json['targets'] = targets_list
+        snapshot['targets'] = targets_list
         for architecture in manifest_architectures:
             for target_component_type in ['runtime', 'devel']:
                 target = {}
@@ -276,18 +273,15 @@ class OstbuildResolve(builtins.Builtin):
                         component_ref['trees'] = ['/runtime', '/devel', '/doc']
                     contents.append(component_ref)
                 target['contents'] = contents
-        out_targets = os.path.join(self.workdir, '%s-targets.json' % (name_prefix, ))
-        f = open(out_targets, 'w')
-        json.dump(targets_json, f, indent=4, sort_keys=True)
-        f.close()
-        print "Created: %s" % (out_targets, )
 
-        out_components = os.path.join(self.workdir, '%s-components.json' % (name_prefix, ))
-        f = open(out_components, 'w')
         for component in components_by_name.itervalues():
             del component['name']
-        json.dump(components_by_name, f, indent=4, sort_keys=True)
+        snapshot['components'] = components_by_name
+
+        out_snapshot = os.path.join(self.workdir, '%s-snapshot.json' % (name_prefix, ))
+        f = open(out_snapshot, 'w')
+        json.dump(snapshot, f, indent=4, sort_keys=True)
         f.close()
-        print "Created: %s" % (out_components, )
+        print "Created: %s" % (out_snapshot, )
         
 builtins.register(OstbuildResolve)
diff --git a/src/ostbuild/pyostbuild/builtins.py b/src/ostbuild/pyostbuild/builtins.py
index 60f5278..64f7be4 100755
--- a/src/ostbuild/pyostbuild/builtins.py
+++ b/src/ostbuild/pyostbuild/builtins.py
@@ -47,12 +47,10 @@ class Builtin(object):
         self.manifest = json.load(open(self.manifest_path))
         self.name_prefix = self.manifest['name-prefix']
 
-    def parse_components_and_targets(self):
+    def parse_snapshot(self):
         self.parse_manifest()
-        components_path = os.path.join(self.workdir, '%s-components.json' % (self.name_prefix, ))
-        self.components = json.load(open(components_path))
-        targets_path = os.path.join(self.workdir, '%s-targets.json' % (self.name_prefix, ))
-        self.targets = json.load(open(targets_path))
+        snapshot_path = os.path.join(self.workdir, '%s-snapshot.json' % (self.name_prefix, ))
+        self.snapshot = json.load(open(snapshot_path))
 
     def execute(self, args):
         raise NotImplementedError()
diff --git a/src/ostbuild/pyostbuild/main.py b/src/ostbuild/pyostbuild/main.py
index b34d2e6..842cb5b 100755
--- a/src/ostbuild/pyostbuild/main.py
+++ b/src/ostbuild/pyostbuild/main.py
@@ -27,7 +27,7 @@ from . import builtin_checkout
 from . import builtin_chroot_compile_one
 from . import builtin_chroot_run_triggers
 from . import builtin_compile_one
-from . import builtin_gen_snapshot
+from . import builtin_query_content
 from . import builtin_resolve
 from . import builtin_status
 



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