summaryrefslogtreecommitdiff
path: root/gentree.py
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 /gentree.py
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>
Diffstat (limited to 'gentree.py')
-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'))