summaryrefslogtreecommitdiffstats
path: root/scripts/combo-layer
diff options
context:
space:
mode:
authorPatrick Ohly <patrick.ohly@intel.com>2015-08-04 18:24:00 +0200
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-08-09 00:12:42 -0700
commitad4d3b1da190cf08c6ac5f9a94a2a1c4980a184d (patch)
treee1c332e0b3a0fb99674a076ca4ced54993666fcb /scripts/combo-layer
parent00d01468a692faf4272894dd328e8c532bcf8b49 (diff)
downloadopenembedded-core-ad4d3b1da190cf08c6ac5f9a94a2a1c4980a184d.tar.gz
combo-layer: fix action_pull for unknown branch
When reconfiguring the branch to something not already fetched, action_pull fails with error: pathspec '<new branch name>' did not match any file(s) known to git. It is the "git checkout" which fails like that. To solve this, try the faster "git checkout + git pull" first and only if that fails, fall back to the slow "git fetch + git checkout". In the conf.hard_reset case, do the checkout always after the git fetch. Signed-off-by: Patrick Ohly <patrick.ohly@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'scripts/combo-layer')
-rwxr-xr-xscripts/combo-layer18
1 files changed, 15 insertions, 3 deletions
diff --git a/scripts/combo-layer b/scripts/combo-layer
index 7380f5b959..7435a176be 100755
--- a/scripts/combo-layer
+++ b/scripts/combo-layer
@@ -586,13 +586,25 @@ def action_pull(conf, args):
ldir = repo['local_repo_dir']
branch = repo.get('branch', "master")
logger.info("update branch %s of component repo %s in %s ..." % (branch, name, ldir))
- runcmd("git checkout %s" % branch, ldir)
if not conf.hard_reset:
- output=runcmd("git pull --ff-only", ldir)
- logger.info(output)
+ # Try to pull only the configured branch. Beware that this may fail
+ # when the branch is currently unknown (for example, after reconfiguring
+ # combo-layer). In that case we need to fetch everything and try the check out
+ # and pull again.
+ try:
+ runcmd("git checkout %s" % branch, ldir, printerr=False)
+ except subprocess.CalledProcessError:
+ output=runcmd("git fetch", ldir)
+ logger.info(output)
+ runcmd("git checkout %s" % branch, ldir)
+ runcmd("git pull --ff-only", ldir)
+ else:
+ output=runcmd("git pull --ff-only", ldir)
+ logger.info(output)
else:
output=runcmd("git fetch", ldir)
logger.info(output)
+ runcmd("git checkout %s" % branch, ldir)
runcmd("git reset --hard FETCH_HEAD", ldir)
def action_update(conf, args):