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.

(From OE-Core rev: ad4d3b1da190cf08c6ac5f9a94a2a1c4980a184d)

Signed-off-by: Patrick Ohly <patrick.ohly@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Patrick Ohly 2015-08-04 18:24:00 +02:00 committed by Richard Purdie
parent b2a0c2fbd1
commit 8b847ffd04
1 changed files with 15 additions and 3 deletions

View File

@ -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):