diff options
author | Patrick Ohly <patrick.ohly@intel.com> | 2015-08-04 18:24:00 +0200 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-08-09 00:12:42 -0700 |
commit | ad4d3b1da190cf08c6ac5f9a94a2a1c4980a184d (patch) | |
tree | e1c332e0b3a0fb99674a076ca4ced54993666fcb /scripts/combo-layer | |
parent | 00d01468a692faf4272894dd328e8c532bcf8b49 (diff) | |
download | openembedded-core-ad4d3b1da190cf08c6ac5f9a94a2a1c4980a184d.tar.gz openembedded-core-ad4d3b1da190cf08c6ac5f9a94a2a1c4980a184d.tar.bz2 openembedded-core-ad4d3b1da190cf08c6ac5f9a94a2a1c4980a184d.zip |
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-x | scripts/combo-layer | 18 |
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): |