diff options
author | Johannes Berg <johannes.berg@intel.com> | 2014-01-01 20:37:13 +0100 |
---|---|---|
committer | Hauke Mehrtens <hauke@hauke-m.de> | 2014-01-18 13:42:31 +0100 |
commit | 3c71184d3a2843c9a1d5a289c71bfbbc126d71fd (patch) | |
tree | 7dcb1acfe26e44b451dcf07f43fac1842e1685cb /gentree.py | |
parent | c2ed7e6cd006e76d1030e4b9944f2800b8175f63 (diff) |
gentree: combine spatches (unless using --gitdebug)
Since spatch is rather slow, but can handle multiple spatches
concatenated in a single file, just do that and run it only
once rather than for each spatch. That shaves off some of the
runtime (startup etc. and finding affected files.)
On my system, I go from
real 9m42.616s
user 8m48.352s
sys 0m22.884s
to
real 9m1.948s
user 8m40.108s
sys 0m12.088s
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Diffstat (limited to 'gentree.py')
-rwxr-xr-x | gentree.py | 72 |
1 files changed, 43 insertions, 29 deletions
@@ -14,6 +14,7 @@ from lib import kconfig, patch, make from lib import bpgit as git from lib import bpgpg as gpg from lib import bpkup as kup +from lib.tempdir import tempdir def read_copy_list(copyfile): """ @@ -679,37 +680,50 @@ def process(kerneldir, outdir, copy_list_file, git_revision=None, git_debug_snapshot(args, "apply backport patch %s" % print_name) sempatches.sort() - prefix_len = len(os.path.join(source_dir, 'patches')) + 1 - for cocci_file in sempatches: - print_name = cocci_file[prefix_len:] - if args.verbose: - logwrite("Applying patch %s" % print_name) - - process = subprocess.Popen(['spatch', '--sp-file', cocci_file, '--in-place', - '--backup-suffix', '.cocci_backup', '--dir', '.'], - stdout=subprocess.PIPE, stderr=subprocess.STDOUT, - close_fds=True, universal_newlines=True, - cwd=args.outdir) - output = process.communicate()[0] - output = output.split('\n') - if output[-1] == '': - output = output[:-1] - if args.verbose: - for line in output: - logwrite('> %s' % line) - if process.returncode != 0: - if not args.verbose: - logwrite("Failed to apply changes from %s" % print_name) + with tempdir() as t: + if not args.gitdebug: + # combine all spatches + fn = os.path.join(t, 'combined.cocci') + f = open(fn, 'w') + for cocci_file in sempatches: + for l in open(cocci_file, 'r'): + f.write(l) + f.write('\n') + f.close() + sempatches = [fn] + prefix_len = 0 + else: + prefix_len = len(os.path.join(source_dir, 'patches')) + 1 + for cocci_file in sempatches: + print_name = cocci_file[prefix_len:] + if args.verbose: + logwrite("Applying patch %s" % print_name) + + process = subprocess.Popen(['spatch', '--sp-file', cocci_file, '--in-place', + '--backup-suffix', '.cocci_backup', '--dir', '.'], + stdout=subprocess.PIPE, stderr=subprocess.STDOUT, + close_fds=True, universal_newlines=True, + cwd=args.outdir) + output = process.communicate()[0] + output = output.split('\n') + if output[-1] == '': + output = output[:-1] + if args.verbose: for line in output: logwrite('> %s' % line) - return 2 - - # remove cocci_backup files - for root, dirs, files in os.walk(args.outdir): - for f in files: - if f.endswith('.cocci_backup'): - os.unlink(os.path.join(root, f)) - git_debug_snapshot(args, "apply backport patch %s" % print_name) + if process.returncode != 0: + if not args.verbose: + logwrite("Failed to apply changes from %s" % print_name) + for line in output: + logwrite('> %s' % line) + return 2 + + # remove cocci_backup files + for root, dirs, files in os.walk(args.outdir): + for f in files: + if f.endswith('.cocci_backup'): + os.unlink(os.path.join(root, f)) + git_debug_snapshot(args, "apply backport patch %s" % print_name) # some post-processing is required configtree = kconfig.ConfigTree(os.path.join(args.outdir, 'Kconfig')) |