summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnthony King <anthonydking@slimroms.net>2014-12-23 18:22:28 +0000
committerLuca Stefani <luca.stefani.ge1@gmail.com>2018-02-10 11:32:12 +0000
commit3d820b7124e972639769f6a48ef8fb912c53afe2 (patch)
treeec2545e61867fbd83bbb76b1c3835b74a6700829
parent694893669ad896dcade28d4c85e41a2252d754bc (diff)
downloadscripts-3d820b7124e972639769f6a48ef8fb912c53afe2.tar.gz
scripts-3d820b7124e972639769f6a48ef8fb912c53afe2.tar.bz2
scripts-3d820b7124e972639769f6a48ef8fb912c53afe2.zip
Add a script to find the best match for caf kernels
Change-Id: Ibd0f5b031861471c24235eca8ddc7758ccb2a6bf
-rw-r--r--best-caf-kernel/best-caf-kernel.py115
1 files changed, 115 insertions, 0 deletions
diff --git a/best-caf-kernel/best-caf-kernel.py b/best-caf-kernel/best-caf-kernel.py
new file mode 100644
index 0000000..540aac1
--- /dev/null
+++ b/best-caf-kernel/best-caf-kernel.py
@@ -0,0 +1,115 @@
+#!/usr/bin/env python
+
+from __future__ import print_function
+
+import sys
+import time
+from multiprocessing import Event, Pool, Process, Queue
+from subprocess import PIPE, Popen
+
+try:
+ from Queue import Empty as Queue_Empty
+except ImportError:
+ from queue import Empty as Queue_Empty
+
+
+def run_subprocess(cmd):
+ sp = Popen(cmd, stdout=PIPE, stderr=PIPE,
+ shell=True, universal_newlines=True)
+ comm = sp.communicate()
+ exit_code = sp.returncode
+ if exit_code != 0:
+ print("There was an error running the subprocess.\n"
+ "cmd: %s\n"
+ "exit code: %d\n"
+ "stdout: %s\n"
+ "stderr: %s" % (cmd, exit_code, comm[0], comm[1]))
+ return comm
+
+
+def get_tags(tag_name):
+ cmd = "git tag -l %s" % tag_name
+ comm = run_subprocess(cmd)
+ return comm[0].strip("\n").split("\n")
+
+
+def get_total_changes(tag_name):
+ cmd = "git diff %s --shortstat" % tag_name
+ comm = run_subprocess(cmd)
+ try:
+ a, d = comm[0].split(",")[1:]
+ a = int(a.strip().split()[0])
+ d = int(d.strip().split()[0])
+ except ValueError:
+ total = None
+ else:
+ total = a + d
+ return total
+
+
+def worker(tag_name):
+ tc = get_total_changes(tag_name)
+ worker.q.put((tag_name, tc))
+
+
+def worker_init(q):
+ worker.q = q
+
+
+def background(q, e, s):
+ best = 9999999999999
+ tag = ""
+ while True:
+ try:
+ tn, tc = q.get(False)
+ except Queue_Empty:
+ if e.is_set():
+ break
+ else:
+ if not s:
+ print("%s has %d lines changed" % (tn, tc))
+ if best > tc:
+ best = tc
+ tag = tn
+ if not s:
+ print("%s is the new best match with %d lines changed" % (tn, tc))
+ print("Best match")
+ print("TAG: %s" % tag)
+ print("Lines changed: %d" % best)
+
+
+def main():
+ import argparse # Only needed for main()
+ parser = argparse.ArgumentParser()
+ parser.add_argument("-j", action="store", dest="jobs", default=1, type=int,
+ metavar="N", help="number of jobs to run at once")
+ parser.add_argument("-s", action="store_true", dest="silent", default=False,
+ help="reduce the verbosity of the output")
+ parser.add_argument("tag_name", metavar="<Tag Name>",
+ help="tag name to search for (can contain wildcards)")
+ args = parser.parse_args()
+
+ tags = get_tags(args.tag_name)
+ if not tags:
+ print("No tags to check. bailing.")
+ sys.exit(1)
+ if not args.silent:
+ print("number of tags to check: %d" % len(tags))
+
+ queue = Queue()
+ event = Event()
+
+ b = Process(target=background, args=(queue, event, args.silent))
+ b.start()
+
+ pool = Pool(args.jobs, worker_init, [queue])
+ pool.map(worker, tags)
+
+ pool.close()
+ pool.join()
+ event.set()
+ b.join()
+
+
+if __name__ == '__main__':
+ main()