summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2015-12-17 10:55:21 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-12-18 12:18:18 +0000
commite6f27619af721bc78698374fdfe5946e0076b62b (patch)
tree61c7eb8e5736d890296ddd0df52094e076d22dbb
parentf1f3716776078d68bd9e3734bca881a486dc2ea3 (diff)
downloadpoky-e6f27619af721bc78698374fdfe5946e0076b62b.tar.gz
combo-layer: Stop using filterdiff
I ran into an issue where a patch just deleting a single file within the repository (meta/recipes-devtools/m4/m4/make.patch) would get skipped by combo-layer. It turns out this has the patch header (commented to avoid breaking scripts): : diff --git a/meta/recipes-devtools/m4/m4/make.patch b/meta/recipes-devtools/m4/m4/make.patch : deleted file mode 100644 : index 79fb415..0000000 : --- a/meta/recipes-devtools/m4/m4/make.patch : +++ /dev/null : @@ -1,42 +0,0 @@ and this is classed as > 5 headers in filterdiff. When we piped the path through filterdiff, the --- line disappears, then the second time we pass through filterdiff, it shows no lines changed and the patch is assumed to be empty and skipped. Changing MAX_HEADERS in filterdiff is one way to fix this, another would be to grep out "deleted file mode" lines. Instead, we can use new git syntax to exclude files from the git format-patch instead and avoid filterdiff entirely. (From OE-Core rev: 296c70afeef75396dea9ae436058314d406dc257) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rwxr-xr-xscripts/combo-layer41
1 files changed, 8 insertions, 33 deletions
diff --git a/scripts/combo-layer b/scripts/combo-layer
index 92c5cbb813..f028098cbb 100755
--- a/scripts/combo-layer
+++ b/scripts/combo-layer
@@ -662,7 +662,14 @@ def action_update(conf, args):
662 patch_cmd_range = "%s..%s" % (repo['last_revision'], top_revision) 662 patch_cmd_range = "%s..%s" % (repo['last_revision'], top_revision)
663 rev_cmd_range = patch_cmd_range 663 rev_cmd_range = patch_cmd_range
664 664
665 file_filter = repo.get('file_filter',"") 665 file_filter = repo.get('file_filter',".")
666
667 # Filter out unwanted files
668 exclude = repo.get('file_exclude', '')
669 if exclude:
670 for path in exclude.split():
671 p = "%s/%s" % (dest_dir, path) if dest_dir != '.' else path
672 file_filter += " ':!%s'" % p
666 673
667 patch_cmd = "git format-patch -N %s --output-directory %s %s -- %s" % \ 674 patch_cmd = "git format-patch -N %s --output-directory %s %s -- %s" % \
668 (prefix,repo_patch_dir, patch_cmd_range, file_filter) 675 (prefix,repo_patch_dir, patch_cmd_range, file_filter)
@@ -681,38 +688,6 @@ def action_update(conf, args):
681 runcmd("%s %s %s %s" % (repo['hook'], patch, revlist[count], name)) 688 runcmd("%s %s %s %s" % (repo['hook'], patch, revlist[count], name))
682 count=count-1 689 count=count-1
683 690
684 # Step 3a: Filter out unwanted files and patches.
685 exclude = repo.get('file_exclude', '')
686 if exclude:
687 filter = ['filterdiff', '-p1']
688 for path in exclude.split():
689 filter.append('-x')
690 filter.append('%s/%s' % (dest_dir, path) if dest_dir != '.' else path)
691 for patch in patchlist[:]:
692 filtered = patch + '.tmp'
693 with open(filtered, 'w') as f:
694 runcmd(filter + [patch], out=f)
695 # Now check for empty patches.
696 if runcmd(['filterdiff', '--list', filtered]):
697 # Possibly modified.
698 os.unlink(patch)
699 os.rename(filtered, patch)
700 else:
701 # Empty, ignore it. Must also remove from revlist.
702 with open(patch, 'r') as f:
703 fromline = f.readline()
704 if not fromline:
705 # Patch must have been empty to start with. No need
706 # to remove it.
707 continue
708 m = re.match(r'''^From ([0-9a-fA-F]+) .*\n''', fromline)
709 rev = m.group(1)
710 logger.debug('skipping empty patch %s = %s' % (patch, rev))
711 os.unlink(patch)
712 os.unlink(filtered)
713 patchlist.remove(patch)
714 revlist.remove(rev)
715
716 # Step 4: write patch list and revision list to file, for user to edit later 691 # Step 4: write patch list and revision list to file, for user to edit later
717 patchlist_file = os.path.join(os.getcwd(), patch_dir, "patchlist-%s" % name) 692 patchlist_file = os.path.join(os.getcwd(), patch_dir, "patchlist-%s" % name)
718 repo['patchlist'] = patchlist_file 693 repo['patchlist'] = patchlist_file