From b7ee7cf5bbfd0f305a75e4df9455f9968aa67878 Mon Sep 17 00:00:00 2001 From: Markus Lehtonen Date: Wed, 7 Jan 2015 18:00:42 +0200 Subject: combo-layer: support updating up to arbitrary commit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Support defining the top commit up to which to update. In other words, this makes it possible to update up to certain point other than the branch head. The update point (git commitish) is given on the command line by appending the component name(s) with a colon and the commitish, e.g. $ combo-layer update my_component:sha1 Only the "update" action supports this. Signed-off-by: Markus Lehtonen Signed-off-by: Ross Burton --- scripts/combo-layer | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/scripts/combo-layer b/scripts/combo-layer index 37d1f4712d..851003d855 100755 --- a/scripts/combo-layer +++ b/scripts/combo-layer @@ -26,6 +26,7 @@ import logging import subprocess import ConfigParser import re +from collections import OrderedDict __version__ = "0.2.1" @@ -347,7 +348,13 @@ def action_update(conf, args): generate the patch list apply the generated patches """ - repos = get_repos(conf, args[1:]) + components = [arg.split(':')[0] for arg in args[1:]] + revisions = [] + for arg in args[1:]: + revision= arg.split(':', 1)[1] if ':' in arg else None + revisions.append(revision) + # Map commitishes to repos + repos = OrderedDict(zip(get_repos(conf, components), revisions)) # make sure combo repo is clean check_repo_clean(os.getcwd()) @@ -361,9 +368,9 @@ def action_update(conf, args): if conf.nopull: logger.info("Skipping pull (-n)") else: - action_pull(conf, args) + action_pull(conf, ['arg0'] + components) - for name in repos: + for name, revision in repos.iteritems(): repo = conf.repos[name] ldir = repo['local_repo_dir'] dest_dir = repo['dest_dir'] @@ -372,18 +379,21 @@ def action_update(conf, args): # Step 2: generate the patch list and store to patch dir logger.info("Generating patches from %s..." % name) + top_revision = revision or branch + if not check_rev_branch(name, ldir, top_revision, branch): + sys.exit(1) if dest_dir != ".": prefix = "--src-prefix=a/%s/ --dst-prefix=b/%s/" % (dest_dir, dest_dir) else: prefix = "" if repo['last_revision'] == "": logger.info("Warning: last_revision of component %s is not set, starting from the first commit" % name) - patch_cmd_range = "--root %s" % branch - rev_cmd_range = branch + patch_cmd_range = "--root %s" % top_revision + rev_cmd_range = top_revision else: if not check_rev_branch(name, ldir, repo['last_revision'], branch): sys.exit(1) - patch_cmd_range = "%s..%s" % (repo['last_revision'], branch) + patch_cmd_range = "%s..%s" % (repo['last_revision'], top_revision) rev_cmd_range = patch_cmd_range file_filter = repo.get('file_filter',"") -- cgit 1.2.3-korg