summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2014-01-01 20:37:13 +0100
committerHauke Mehrtens <hauke@hauke-m.de>2014-01-18 13:42:31 +0100
commit3c71184d3a2843c9a1d5a289c71bfbbc126d71fd (patch)
tree7dcb1acfe26e44b451dcf07f43fac1842e1685cb
parentc2ed7e6cd006e76d1030e4b9944f2800b8175f63 (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>
-rwxr-xr-xgentree.py72
1 files changed, 43 insertions, 29 deletions
diff --git a/gentree.py b/gentree.py
index e16e2976..af9b7a88 100755
--- a/gentree.py
+++ b/gentree.py
@@ -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'))