From 8140c5b7ee1e9a6fb8860ff9e2f9d88ccff48ee6 Mon Sep 17 00:00:00 2001 From: Paul Eggleton Date: Tue, 31 Jul 2012 01:06:24 +0100 Subject: combo-layer: improve patch list handling and output * Ignore blank lines in patch list * Don't fail in interactive mode if patch list is deleted * Show patch counter * Show relative path for patches * Print headings before applying patch list for each component Also change to using a "with" block to read the patch list so it gets closed properly when we're finished. Fixes [YOCTO #2455]. (From OE-Core rev: 65461d7c35fdadb5b008052798731dce19ed187f) Signed-off-by: Paul Eggleton Signed-off-by: Richard Purdie --- scripts/combo-layer | 67 +++++++++++++++++++++++++++++++++++------------------ 1 file changed, 45 insertions(+), 22 deletions(-) (limited to 'scripts/combo-layer') diff --git a/scripts/combo-layer b/scripts/combo-layer index 4025b72a87..40e63b9ede 100755 --- a/scripts/combo-layer +++ b/scripts/combo-layer @@ -263,7 +263,7 @@ def action_update(conf, args): repo_patch_dir = os.path.join(os.getcwd(), patch_dir, name) # Step 2: generate the patch list and store to patch dir - logger.info("generating patches for %s" % name) + logger.info("Generating patches from %s..." % name) if dest_dir != ".": prefix = "--src-prefix=a/%s/ --dst-prefix=b/%s/" % (dest_dir, dest_dir) else: @@ -337,27 +337,50 @@ def apply_patchlist(conf, repos): repo = conf.repos[name] lastrev = repo["last_revision"] prevrev = lastrev - for line in open(repo['patchlist']): - patchfile = line.split()[0] - lastrev = line.split()[1] - if os.path.getsize(patchfile) == 0: - logger.info("(skipping %s - no changes)", lastrev) - else: - cmd = "git am --keep-cr -s -p1 %s" % patchfile - logger.info("Apply %s" % patchfile ) - try: - runcmd(cmd) - except subprocess.CalledProcessError: - logger.info('running "git am --abort" to cleanup repo') - runcmd("git am --abort") - logger.error('"%s" failed' % cmd) - logger.info("please manually apply patch %s" % patchfile) - logger.info("Note: if you exit and continue applying without manually applying the patch, it will be skipped") - if not drop_to_shell(): - if prevrev != repo['last_revision']: - conf.update(name, "last_revision", prevrev) - sys.exit(0) - prevrev = lastrev + + # Get non-blank lines from patch list file + patchlist = [] + if os.path.exists(repo['patchlist']) or not conf.interactive: + # Note: we want this to fail here if the file doesn't exist and we're not in + # interactive mode since the file should exist in this case + with open(repo['patchlist']) as f: + for line in f: + line = line.rstrip() + if line: + patchlist.append(line) + + if patchlist: + logger.info("Applying patches from %s..." % name) + linecount = len(patchlist) + i = 1 + for line in patchlist: + patchfile = line.split()[0] + lastrev = line.split()[1] + patchdisp = os.path.relpath(patchfile) + if os.path.getsize(patchfile) == 0: + logger.info("(skipping %d/%d %s - no changes)" % (i, linecount, patchdisp)) + else: + cmd = "git am --keep-cr -s -p1 %s" % patchfile + logger.info("Applying %d/%d: %s" % (i, linecount, patchdisp)) + try: + runcmd(cmd) + except subprocess.CalledProcessError: + logger.info('Running "git am --abort" to cleanup repo') + runcmd("git am --abort") + logger.error('"%s" failed' % cmd) + logger.info("Please manually apply patch %s" % patchdisp) + logger.info("Note: if you exit and continue applying without manually applying the patch, it will be skipped") + if not drop_to_shell(): + if prevrev != repo['last_revision']: + conf.update(name, "last_revision", prevrev) + sys.exit(0) + prevrev = lastrev + i += 1 + else: + logger.info("No patches to apply from %s" % name) + ldir = conf.repos[name]['local_repo_dir'] + lastrev = runcmd("git rev-parse HEAD", ldir).strip() + if lastrev != repo['last_revision']: conf.update(name, "last_revision", lastrev) -- cgit v1.2.3-54-g00ecf