mirror of
https://github.com/ostreedev/ostree.git
synced 2025-03-19 22:50:35 +03:00
ostbuild: More work on partial builds
This commit is contained in:
parent
eae69513a7
commit
92244c80cc
@ -40,7 +40,7 @@ def parse_src_key(srckey):
|
||||
if idx < 0:
|
||||
raise ValueError("Invalid SRC uri=%s" % (srckey, ))
|
||||
keytype = srckey[:idx]
|
||||
if keytype not in ['git', 'dirty-git']:
|
||||
if keytype not in ['git', 'local']:
|
||||
raise ValueError("Unsupported SRC uri=%s" % (srckey, ))
|
||||
uri = srckey[idx+1:]
|
||||
return (keytype, uri)
|
||||
|
@ -68,7 +68,7 @@ class OstbuildBuildComponents(builtins.Builtin):
|
||||
name = '%s/%s' % (basename, architecture)
|
||||
buildname = 'components/%s' % (name, )
|
||||
|
||||
current_vcs_version = component['revision']
|
||||
current_vcs_version = component.get('revision')
|
||||
|
||||
# TODO - deduplicate this with chroot_compile_one
|
||||
current_meta_io = StringIO()
|
||||
@ -88,7 +88,8 @@ class OstbuildBuildComponents(builtins.Builtin):
|
||||
'rev-parse', buildname],
|
||||
stderr=open('/dev/null', 'w'),
|
||||
none_on_error=True)
|
||||
if previous_build_version is not None:
|
||||
if (current_vcs_version is not None
|
||||
and previous_build_version is not None):
|
||||
log("Previous build of '%s' is %s" % (name, previous_build_version))
|
||||
|
||||
previous_metadata_text = run_sync_get_output(['ostree', '--repo=' + self.repo,
|
||||
@ -103,7 +104,6 @@ class OstbuildBuildComponents(builtins.Builtin):
|
||||
log("Metadata is unchanged from previous")
|
||||
return False
|
||||
else:
|
||||
current_vcs_version = component['revision']
|
||||
previous_metadata = json.loads(previous_metadata_text)
|
||||
previous_vcs_version = previous_metadata['revision']
|
||||
if current_vcs_version == previous_vcs_version:
|
||||
@ -123,7 +123,8 @@ class OstbuildBuildComponents(builtins.Builtin):
|
||||
fileutil.ensure_dir(checkoutdir)
|
||||
component_src = os.path.join(checkoutdir, basename)
|
||||
run_sync(['ostbuild', 'checkout', '--snapshot=' + self.snapshot_path,
|
||||
'--clean', '--overwrite', basename], cwd=checkoutdir)
|
||||
'--checkoutdir=' + component_src,
|
||||
'--clean', '--overwrite', basename])
|
||||
|
||||
artifact_meta = dict(component)
|
||||
|
||||
@ -207,10 +208,10 @@ class OstbuildBuildComponents(builtins.Builtin):
|
||||
|
||||
if len(component_refs_to_resolve) > 0:
|
||||
resolved_refs = self._resolve_refs(component_refs_to_resolve)
|
||||
for name,rev in zip(components.iterkeys(), resolved_refs):
|
||||
for architecture in component_architectures[name]:
|
||||
archname = '%s/%s' % (name, architecture)
|
||||
component_revisions[archname] = rev
|
||||
for name,rev in zip(component_refs_to_resolve, resolved_refs):
|
||||
assert name.startswith('components/')
|
||||
archname = name[len('components/'):]
|
||||
component_revisions[archname] = rev
|
||||
|
||||
bin_snapshot['component-revisions'] = component_revisions
|
||||
|
||||
|
@ -42,35 +42,32 @@ class OstbuildCheckout(builtins.Builtin):
|
||||
parser.add_argument('--overwrite', action='store_true')
|
||||
parser.add_argument('--prefix')
|
||||
parser.add_argument('--snapshot')
|
||||
parser.add_argument('--checkoutdir')
|
||||
parser.add_argument('-a', '--active-tree', action='store_true')
|
||||
parser.add_argument('--clean', action='store_true')
|
||||
parser.add_argument('components', nargs='*')
|
||||
parser.add_argument('component')
|
||||
|
||||
args = parser.parse_args(argv)
|
||||
self.args = args
|
||||
|
||||
self.parse_config()
|
||||
|
||||
if len(args.components) > 0:
|
||||
checkout_components = args.components
|
||||
else:
|
||||
checkout_components = [os.path.basename(os.getcwd())]
|
||||
|
||||
if args.active_tree:
|
||||
self.parse_active_branch()
|
||||
else:
|
||||
self.parse_snapshot(args.prefix, args.snapshot)
|
||||
|
||||
for component_name in checkout_components:
|
||||
found = False
|
||||
component = self.get_component_meta(component_name)
|
||||
(keytype, uri) = buildutil.parse_src_key(component['src'])
|
||||
checkoutdir = os.path.join(os.getcwd(), component_name)
|
||||
fileutil.ensure_parent_dir(checkoutdir)
|
||||
component_name = args.component
|
||||
|
||||
is_dirty = (keytype == 'dirty-git')
|
||||
found = False
|
||||
component = self.get_component_meta(component_name)
|
||||
(keytype, uri) = buildutil.parse_src_key(component['src'])
|
||||
|
||||
if is_dirty:
|
||||
is_local = (keytype == 'local')
|
||||
|
||||
if is_local:
|
||||
if args.checkoutdir:
|
||||
checkoutdir = args.checkoutdir
|
||||
# Kind of a hack, but...
|
||||
if os.path.islink(checkoutdir):
|
||||
os.unlink(checkoutdir)
|
||||
@ -78,42 +75,49 @@ class OstbuildCheckout(builtins.Builtin):
|
||||
shutil.rmtree(checkoutdir)
|
||||
os.symlink(uri, checkoutdir)
|
||||
else:
|
||||
checkoutdir = uri
|
||||
else:
|
||||
if args.checkoutdir:
|
||||
checkoutdir = args.checkoutdir
|
||||
else:
|
||||
checkoutdir = os.path.join(os.getcwd(), component_name)
|
||||
fileutil.ensure_parent_dir(checkoutdir)
|
||||
vcs.get_vcs_checkout(self.mirrordir, keytype, uri, checkoutdir,
|
||||
component['revision'],
|
||||
overwrite=args.overwrite)
|
||||
|
||||
if args.clean:
|
||||
if is_dirty:
|
||||
log("note: ignoring --clean argument due to \"dirty-git:\" specification")
|
||||
else:
|
||||
vcs.clean(keytype, checkoutdir)
|
||||
|
||||
patches = component.get('patches')
|
||||
if patches is not None:
|
||||
(patches_keytype, patches_uri) = buildutil.parse_src_key(patches['src'])
|
||||
if patches_keytype == 'git':
|
||||
patches_mirror = buildutil.get_mirrordir(self.mirrordir, patches_keytype, patches_uri)
|
||||
vcs.get_vcs_checkout(self.mirrordir, patches_keytype, patches_uri,
|
||||
self.patchdir, patches['branch'],
|
||||
overwrite=True)
|
||||
patchdir = self.patchdir
|
||||
else:
|
||||
patchdir = patches_uri
|
||||
if args.clean:
|
||||
if is_local:
|
||||
log("note: ignoring --clean argument due to \"local:\" specification")
|
||||
else:
|
||||
vcs.clean(keytype, checkoutdir)
|
||||
|
||||
patch_subdir = patches.get('subdir', None)
|
||||
if patch_subdir is not None:
|
||||
patchdir = os.path.join(patchdir, patch_subdir)
|
||||
else:
|
||||
patchdir = self.patchdir
|
||||
for patch in patches['files']:
|
||||
patch_path = os.path.join(patchdir, patch)
|
||||
run_sync(['git', 'am', '--ignore-date', '-3', patch_path], cwd=checkoutdir)
|
||||
patches = component.get('patches')
|
||||
if patches is not None:
|
||||
(patches_keytype, patches_uri) = buildutil.parse_src_key(patches['src'])
|
||||
if patches_keytype == 'git':
|
||||
patches_mirror = buildutil.get_mirrordir(self.mirrordir, patches_keytype, patches_uri)
|
||||
vcs.get_vcs_checkout(self.mirrordir, patches_keytype, patches_uri,
|
||||
self.patchdir, patches['branch'],
|
||||
overwrite=True)
|
||||
patchdir = self.patchdir
|
||||
else:
|
||||
patchdir = patches_uri
|
||||
|
||||
metadata_path = os.path.join(checkoutdir, '_ostbuild-meta.json')
|
||||
f = open(metadata_path, 'w')
|
||||
json.dump(component, f, indent=4, sort_keys=True)
|
||||
f.close()
|
||||
patch_subdir = patches.get('subdir', None)
|
||||
if patch_subdir is not None:
|
||||
patchdir = os.path.join(patchdir, patch_subdir)
|
||||
else:
|
||||
patchdir = self.patchdir
|
||||
for patch in patches['files']:
|
||||
patch_path = os.path.join(patchdir, patch)
|
||||
run_sync(['git', 'am', '--ignore-date', '-3', patch_path], cwd=checkoutdir)
|
||||
|
||||
metadata_path = os.path.join(checkoutdir, '_ostbuild-meta.json')
|
||||
f = open(metadata_path, 'w')
|
||||
json.dump(component, f, indent=4, sort_keys=True)
|
||||
f.close()
|
||||
|
||||
log("Checked out: %r" % (checkoutdir, ))
|
||||
log("Checked out: %r" % (checkoutdir, ))
|
||||
|
||||
builtins.register(OstbuildCheckout)
|
||||
|
Loading…
x
Reference in New Issue
Block a user