From 96a5637cbb899ffb4764671329df44e04570c6c4 Mon Sep 17 00:00:00 2001 From: Daniel Brown <ddb@star.sr.bham.ac.uk> Date: Sat, 3 Aug 2013 23:10:41 +0100 Subject: [PATCH] Full run now working. Search for test scripts added and full output of test exceptions --- pykat/testing/test.py | 138 +++++++------- pykat/testing/utils.py | 25 ++- pykat/testing/web/database_indices.py | 20 ++- pykat/testing/web/templates/finesse_test.html | 21 ++- .../web/templates/finesse_test_view.html | 25 ++- pykat/testing/web/web_interface.py | 168 +++++++++++++----- 6 files changed, 266 insertions(+), 131 deletions(-) diff --git a/pykat/testing/test.py b/pykat/testing/test.py index a56f249..25483a7 100644 --- a/pykat/testing/test.py +++ b/pykat/testing/test.py @@ -16,29 +16,11 @@ from datetime import datetime from pykat.testing import utils import sys, traceback -class RunException(Exception): - def __init__(self, returncode, args, err, out): - self.returncode = returncode - self.args = args - self.err = err - self.out = out - class DiffException(Exception): def __init__(self, msg, outfile): self.msg = msg self.outfile = outfile -def runcmd(args): - p = sub.Popen(args, stdout=sub.PIPE, stderr=sub.PIPE) - out, err = p.communicate() - - if p.returncode != 0: - print "STDERR: " + err - print "STDOUT: " + out - raise RunException(p.returncode, args, err, out) - - return [out,err] - class FinesseTestProcess(Thread): queue_time = None @@ -58,6 +40,11 @@ class FinesseTestProcess(Thread): diffing = False kats_to_run = [] + # Define storage structures for generating report later + kat_run_exceptions = {} + output_differences = {} + run_times = {} + def __init__(self, TEST_DIR, BASE_DIR, test_commit, run_fast=False, kats=[], test_id="0", git_bin="",emails="", nobuild=True,*args, **kqwargs): @@ -75,12 +62,14 @@ class FinesseTestProcess(Thread): self.emails = "" if type(nobuild) is str: + if nobuild.lower() == "true": self.nobuild = True elif nobuild.lower() == "false": self.nobuild = False else: raise Exception("nobuild is not a boolean value") + elif type(nobuild) is bool: self.nobuild = nobuild else: @@ -149,36 +138,29 @@ class FinesseTestProcess(Thread): print "Checking out finesse base..." utils.git(["clone","git://gitmaster.atlas.aei.uni-hannover.de/finesse/base.git",BUILD_PATH]) - os.chdir(BUILD_PATH) print "Checking out and building develop version of finesse " + self.git_commit SRC_PATH = os.path.join(BUILD_PATH,"src") if sys.platform == "win32": - runcmd(["bash","./finesse.sh","--checkout"]) + utils.runcmd(["bash","./finesse.sh","--checkout"],cwd=BUILD_PATH) self.cancelCheck() - os.chdir(SRC_PATH) - utils.git(["checkout",self.git_commit]) + utils.git(["checkout",self.git_commit],cwd=SRC_PATH) self.cancelCheck() - os.chdir(BUILD_PATH) - runcmd(["bash","./finesse.sh","--build"]) + utils.runcmd(["bash","./finesse.sh","--build"],cwd=BUILD_PATH) self.cancelCheck() else: - runcmd(["./finesse.sh","--checkout","develop"]) + utils.runcmd(["./finesse.sh","--checkout","develop"],cwd=BUILD_PATH) self.cancelCheck() - os.chdir(SRC_PATH) - utils.git(["checkout",self.git_commit]) + utils.git(["checkout",self.git_commit],cwd=SRC_PATH) self.cancelCheck() - os.chdir(BUILD_PATH) - runcmd(["./finesse.sh","--build"]) + utils.runcmd(["./finesse.sh","--build"],cwd=BUILD_PATH) self.cancelCheck() - - os.chdir(self.BASE_DIR) - + FINESSE_EXE = os.path.join(self.BASE_DIR,"build","kat" + EXE) # check if kat runs @@ -197,33 +179,27 @@ class FinesseTestProcess(Thread): os.mkdir(OUTPUTS_DIR) - os.environ["KATINI"] = os.path.join(self.TEST_DIR,"kat.ini") + os.environ["KATINI"] = os.path.join(self.TEST_DIR,"kat_test","kat.ini") self.cancelCheck() # Clean up and pull latest test repository print "Cleaning test repository..." - os.chdir(self.TEST_DIR) - utils.git(["clean","-xdf"]) + utils.git(["clean","-xdf"], cwd=self.TEST_DIR) self.cancelCheck() - utils.git(["reset","--hard"]) + utils.git(["reset","--hard"], cwd=self.TEST_DIR) self.cancelCheck() print "Pulling latest test..." - utils.git(["pull"]) + utils.git(["pull"],cwd=self.TEST_DIR) self.cancelCheck() - # Define storage structures for generating report later - kat_run_exceptions = {} - output_differences = {} - run_times = {} - self.total_kats = 0 # create dictionary structures # and count up total number of files to process for suite in self.kats_to_run.keys(): - kat_run_exceptions[suite] = {} - output_differences[suite] = {} - run_times[suite] = {} + self.kat_run_exceptions[suite] = {} + self.output_differences[suite] = {} + self.run_times[suite] = {} self.total_kats += len(self.kats_to_run[suite]) @@ -235,7 +211,7 @@ class FinesseTestProcess(Thread): self.cancelCheck() print "Running suite: " + suite + "..." kats = self.kats_to_run[suite] - os.chdir(os.path.join(self.TEST_DIR,"kat_test",suite)) + SUITE_PATH = os.path.join(self.TEST_DIR,"kat_test",suite) SUITE_OUTPUT_DIR = os.path.join(OUTPUTS_DIR,suite) os.mkdir(SUITE_OUTPUT_DIR) @@ -254,21 +230,29 @@ class FinesseTestProcess(Thread): else: try: start = time.time() - out,err = runcmd([FINESSE_EXE, "--noheader", kat]) - finish = time.time()-start - run_times[suite][kat] = finish - shutil.move(basename + ".out", SUITE_OUTPUT_DIR) - except RunException as e: + out,err = utils.runcmd([FINESSE_EXE, "--noheader", kat],cwd=SUITE_PATH) + + OUT_FILE = os.path.join(SUITE_PATH,basename + ".out") + shutil.move(OUT_FILE, SUITE_OUTPUT_DIR) + + except utils.RunException as e: + + print "STDERR: " + e.out + print "STDOUT: " + e.err + print "Error running " + kat + ": " + e.err - kat_run_exceptions[suite][kat] = e + self.kat_run_exceptions[suite][kat] = e + # if this happens a difference definitely is found + self.diffFound = True finally: + self.run_times[suite][kat] = time.time()-start self.done_kats += 1 self.cancelCheck() for suite in self.kats_to_run.keys(): - if len(kat_run_exceptions[suite].keys()) > 0: - print "Could not run the following kats:\n" + "\n".join(kat_run_exceptions.keys()) + " in " + suite + if len(self.kat_run_exceptions[suite].keys()) > 0: + print "Could not run the following kats:\n" + "\n".join(self.kat_run_exceptions[suite].keys()) + " in " + suite else: print "No errors whilst running" + suite @@ -280,9 +264,9 @@ class FinesseTestProcess(Thread): print "Diffing suite: " + suite + "..." outs = [] - os.chdir(os.path.join(OUTPUTS_DIR,suite)) + SUITE_PATH = os.path.join(OUTPUTS_DIR,suite) - for files in os.listdir("."): + for files in os.listdir(SUITE_PATH): if files.endswith(".out"): outs.append(files) @@ -296,12 +280,13 @@ class FinesseTestProcess(Thread): self.running_kat = out ref_file = os.path.join(REF_DIR,out) + out_file = os.path.join(SUITE_PATH,out) if not os.path.exists(ref_file): raise DiffException("Reference file doesn't exist for " + out, out) ref_arr = np.loadtxt(ref_file) - out_arr = np.loadtxt(out) + out_arr = np.loadtxt(out_file) if ref_arr.shape != out_arr.shape: raise DiffException("Reference and output are different shapes", out) @@ -317,20 +302,28 @@ class FinesseTestProcess(Thread): if diff: self.diffFound = True + # store the rows which are different ix = np.where(rel_diff >= self.diff_rel_eps)[0][0] - output_differences[suite][out] = (ref_arr[ix], out_arr[ix], np.max(rel_diff)) + self.output_differences[suite][out] = (ref_arr[ix], + out_arr[ix], + np.max(rel_diff)) + else: + max = np.max(rel_diff) + + self.output_differences[suite][out] = ([], + [], + max) self.done_kats += 1 - os.chdir(self.BASE_DIR) + REPORT_PATH = os.path.join(self.BASE_DIR,"reports") - if not os.path.exists("reports"): - os.mkdir("reports") + if not os.path.exists(REPORT_PATH): + os.mkdir(REPORT_PATH) - os.chdir("reports") today = datetime.utcnow() - reportname = today.strftime('%d%m%y') + reportname = os.path.join(REPORT_PATH,"report.log") #today.strftime('%d%m%y') print "Writing report to " + reportname f = open(reportname,'w') @@ -348,19 +341,19 @@ class FinesseTestProcess(Thread): isError = False for suite in self.kats_to_run.keys(): - f.write("\n\n" + str(len(output_differences[suite].keys())) + " differences in suite " + suite) - for k in output_differences[suite].keys(): + f.write("\n\n" + str(len(self.output_differences[suite].keys())) + " differences in suite " + suite) + for k in self.output_differences[suite].keys(): isError = True f.write(k + ":\n") - f.write(" ref: " + str(output_differences[suite][k][0]) + "\n") - f.write(" out: " + str(output_differences[suite][k][1]) + "\n") - f.write(" Max relative difference: " + str(output_differences[suite][k][2]) + "\n") + f.write(" ref: " + str(self.output_differences[suite][k][0]) + "\n") + f.write(" out: " + str(self.output_differences[suite][k][1]) + "\n") + f.write(" Max relative difference: " + str(self.output_differences[suite][k][2]) + "\n") - f.write("\n\n" + str(len(output_differences[suite].keys())) + " errors in suite " + suite) - for k in kat_run_exceptions[suite].keys(): + f.write("\n\n" + str(len(self.output_differences[suite].keys())) + " errors in suite " + suite) + for k in self.kat_run_exceptions[suite].keys(): isError = True f.write(k + ":\n") - f.write("err: " + kat_run_exceptions[suite][k].err + "\n") + f.write("err: " + self.kat_run_exceptions[suite][k].err + "\n") f.close() @@ -379,7 +372,6 @@ class FinesseTestProcess(Thread): #else: # print "No emails specified" - return output_differences def run(self): @@ -396,7 +388,7 @@ class FinesseTestProcess(Thread): traceback.print_exception(exc_type, exc_value, exc_traceback, limit=5, file=sys.stdout) finally: - finished_test = True + self.finished_test = True diff --git a/pykat/testing/utils.py b/pykat/testing/utils.py index cf48ad8..0e68a7f 100644 --- a/pykat/testing/utils.py +++ b/pykat/testing/utils.py @@ -15,8 +15,8 @@ class RunException(Exception): self.err = err self.out = out -def runcmd(args): - p = sub.Popen(args, stdout=sub.PIPE, stderr=sub.PIPE) +def runcmd(args, cwd="."): + p = sub.Popen(args, stdout=sub.PIPE, stderr=sub.PIPE, cwd=cwd) out, err = p.communicate() if p.returncode != 0: @@ -26,24 +26,23 @@ def runcmd(args): return [out,err] -def git(args, git_bin=GIT_BIN): +def git(args, git_bin=GIT_BIN, cwd="."): cmd = "" + + if type(args) is not list: + if type(args) is not str: + print type(args) + raise Exception("arg for utils.git must be a list or string") if type(args) is str: - args = args.split(" ") - elif type(args) is not list: - raise Exception("arg for utils.git must be a list or string") - + args = args.split(" ") + args.insert(0, git_bin) - - print "GIT CMD: " + " ".join(args), os.getcwd() - p = sub.Popen(args, stdout=sub.PIPE, stderr=sub.PIPE) + p = sub.Popen(args, stdout=sub.PIPE, stderr=sub.PIPE, cwd=cwd) out, err = p.communicate() - if p.returncode != 0: - print "STDERR: " + err - print "STDOUT: " + err + if p.poll() != 0: raise RunException(p.poll(), args, err, out) return [out, err] diff --git a/pykat/testing/web/database_indices.py b/pykat/testing/web/database_indices.py index 8cb506f..e0320e9 100644 --- a/pykat/testing/web/database_indices.py +++ b/pykat/testing/web/database_indices.py @@ -32,4 +32,22 @@ class SrcCommitIndex(HashIndex): return None def make_key(self, key): - return key \ No newline at end of file + return key + + +class KatTestIndex(HashIndex): + + def __init__(self, *args, **kwargs): + kwargs['key_format'] = '32s' + super(KatTestIndex, self).__init__(*args, **kwargs) + + def make_key_value(self, data): + if data['t'] == 'kattest': + key = str(data['suite']) + str(data['kat']) + return md5(key).digest(), None + else: + return None + + def make_key(self, key): + return md5(key).digest() + \ No newline at end of file diff --git a/pykat/testing/web/templates/finesse_test.html b/pykat/testing/web/templates/finesse_test.html index b766a42..b975e29 100644 --- a/pykat/testing/web/templates/finesse_test.html +++ b/pykat/testing/web/templates/finesse_test.html @@ -82,6 +82,7 @@ <div> <div style="width: 100px;">Files available</div> <select id="rightValues" size="12" multiple> + <input type="text" id="txtKatSearch" /> </select> </div> </section> @@ -108,10 +109,24 @@ window.setInterval(function(){ updateQueuedTests(); updateProgress(); - }, 1000); + }, 5000); }); + $('#txtKatSearch').change(function(){ + term = $('#txtKatSearch').val(); + + term.trim(); + + match = $("#rightValues span > option"); + match.unwrap(); + + if(term.length > 0){ + match = $("#rightValues :not(:contains('" + term + "'))"); + match.wrap("<span></span>"); + } + }); + $("#btnLeft").click(function () { var selectedItem = $("#rightValues option:selected"); $("#leftValues").append(selectedItem); @@ -305,6 +320,8 @@ opts = $('#leftValues option'); kats = {}; + $('#btnStartTest').attr('disabled',true) + for(var i=0; i<opts.length; i++){ suite = opts[i].text.split(" - ")[0] @@ -326,9 +343,11 @@ success: function (data) { updateQueuedTests(); updateProgress(); + $('#btnStartTest').attr('disabled',false) }, error: function(jqXHR, textStatus, err){ console.log('error: ' + err); + $('#btnStartTest').attr('disabled',false) }, dataType: "json" }); diff --git a/pykat/testing/web/templates/finesse_test_view.html b/pykat/testing/web/templates/finesse_test_view.html index fad5571..f15f08b 100644 --- a/pykat/testing/web/templates/finesse_test_view.html +++ b/pykat/testing/web/templates/finesse_test_view.html @@ -9,12 +9,31 @@ <div> <h1>FINESSE Test {{ view_test_id }} View</h1> - <a href="/finesse/view/{{view_test_id}}/build.log">build.log</a> | <a href="/finesse/view/{{view_test_id}}/make.log">make.log</a> + <a href="/finesse/view/{{view_test_id}}/build.log">build.log</a> | <a href="/finesse/view/{{view_test_id}}/make.log">make.log</a>| <a href="/finesse/view/{{view_test_id}}/report.log">report.log</a> <h3>Test Exceptions:</h3> - <pre>{{ excp_message}}</pre> - <pre>{{ excp_traceback}}</pre> + <pre>{{ excp_message }}</pre> + <pre>{{ excp_traceback }}</pre> + <h3>Kat result summary</h3> + + <h4>Results</h4> + {% for suite in kats.keys() %} + <ul> + <li>{{ suite }}</li> + <ul> + {% for item in kats[suite] %} + <li>{{item[0]}} - Max rel diff = {{item[1]}}</li> + {% if item[2][0] != "" %} + <ul> + <li>stdout: <pre>{{item[2][0]}}</pre></li> + <li>stderr: <pre>{{item[2][1]}}</pre></li> + </ul> + {% endif %} + {% endfor %} + </ul> + </ul> + {% endfor %} </div> </body> </html> \ No newline at end of file diff --git a/pykat/testing/web/web_interface.py b/pykat/testing/web/web_interface.py index 9c9db71..9229c33 100644 --- a/pykat/testing/web/web_interface.py +++ b/pykat/testing/web/web_interface.py @@ -12,11 +12,11 @@ from pykat.testing import utils from pykat.testing import test as finesse_test import shutil from pykat.testing.web import app - +from hashlib import md5 from CodernityDB.database_thread_safe import ThreadSafeDatabase from CodernityDB.database import RecordNotFound -from pykat.testing.web.database_indices import TestIDIndex, SrcCommitIndex +from pykat.testing.web.database_indices import TestIDIndex, SrcCommitIndex, KatTestIndex import os, sys, traceback @@ -53,12 +53,14 @@ else: db.create() db.add_index(TestIDIndex(db.path, 'testid')) db.add_index(SrcCommitIndex(db.path, 'srccommit')) - + db.add_index(KatTestIndex(db.path, 'kattest')) + SRC_GIT_PATH = os.path.join(app.instance_path, "finesse_src",".git") # get HEAD commit to set as starting point for commit checker -latest_commit_id_tested = utils.git('--git-dir {0} log -1 --pretty=format:"%H"'.format(SRC_GIT_PATH))[0].split("\n")[0] +latest_data = utils.git(['--git-dir',SRC_GIT_PATH,"log","-1",'--pretty=format:"%H"']) +latest_commit_id_tested = latest_data[0].split("\n")[0].rstrip('"').lstrip("\\") print "loading web interface" @@ -109,32 +111,89 @@ class FinesseProcessWatcher(Thread): print "Watcher is continuing" - doc = db.get('testid', self.process_to_watch.test_id,with_doc=True)["doc"] - doc["cancelled"] = self.process_to_watch.cancelling - doc["error"] = self.process_to_watch.errorOccurred - doc["startTime"] = str(start) - doc["endTime"] = str(datetime.now()) - doc["testRun"] = self.process_to_watch.finished_test - doc["diffFound"] = self.process_to_watch.diffFound - - db.update(doc) - try: - # once done check if any other tests need to be ran - schedule_lock.acquire() - - if len(scheduled_tests) > 0: - print "Watcher starting next test" - current_test = scheduled_tests.pop(0) - watcher = FinesseProcessWatcher() - watcher.setProcessToWatch(current_test) - watcher.start() - else: - print "Watcher found no more tests to run" - current_test = None - watcher = None + testdoc = db.get('testid', + self.process_to_watch.test_id, + with_doc=True)["doc"] + + testdoc["cancelled"] = self.process_to_watch.cancelling + testdoc["error"] = self.process_to_watch.errorOccurred + testdoc["startTime"] = str(start) + testdoc["endTime"] = str(datetime.now()) + testdoc["testFinished"] = self.process_to_watch.finished_test + testdoc["diffFound"] = self.process_to_watch.diffFound + + kats_run = list() + + print "Storing kat run time data..." + + if self.process_to_watch is not None: + for suite in self.process_to_watch.run_times.keys(): + print suite + for kat in self.process_to_watch.run_times[suite].keys(): + key = md5(str(suite) + str(kat)).digest() + out = kat[:-4] + ".out" + + if out in self.process_to_watch.output_differences[suite]: + max_diff = self.process_to_watch.output_differences[suite][out][2] + else: + max_diff = float('NaN') + + if kat in self.process_to_watch.kat_run_exceptions[suite]: + err = self.process_to_watch.kat_run_exceptions[suite][kat]; + runexception = (str(err.err), str(err.out)); + else: + runexception = ("","") + + kats_run.append(dict(suite = suite, + kat = kat, + max_diff = float(max_diff), + runexception = runexception)) + + try: + doc = db.get('kattest', key, with_doc=True)["doc"] + doc["test_id"].append(self.process_to_watch.test_id) + doc["commit"].append(self.process_to_watch.get_version()) + doc["timing"].append(self.process_to_watch.run_times[suite][kat]) + db.update(doc) + + except RecordNotFound: + doc = dict(t="kattest",test_id=[],commit=[],timing=[],suite=suite,kat=kat) + + doc["test_id"].append(self.process_to_watch.test_id) + doc["commit"].append(self.process_to_watch.get_version()) + doc["timing"].append(self.process_to_watch.run_times[suite][kat]) + db.insert(doc) + + #finally update with details on the kat files ran + testdoc["kats_run"] = kats_run + db.update(testdoc) + except RecordNotFound: + print "Could not find database records for test id " + str(self.process_to_watch.test_id) + pass + except: + exc_type, exc_value, exc_traceback = sys.exc_info() + + print "*** Exception for test_id = " + str(self.process_to_watch.test_id) + traceback.print_exception(exc_type, exc_value, exc_traceback, + limit=5, file=sys.stdout) finally: - schedule_lock.release() + try: + # once done check if any other tests need to be ran + schedule_lock.acquire() + + if len(scheduled_tests) > 0: + print "Watcher starting next test" + current_test = scheduled_tests.pop(0) + watcher = FinesseProcessWatcher() + watcher.setProcessToWatch(current_test) + watcher.start() + else: + print "Watcher found no more tests to run" + current_test = None + watcher = None + finally: + schedule_lock.release() @app.route('/finesse/cancel_test_<id>', methods=["POST"]) @@ -169,6 +228,15 @@ def finesse_cancel_test(id): print "Cancelled queued test" scheduled_tests[remove].cancelling = True scheduled_tests.pop(remove) + + try: + #need to update in database for queued test + doc = db.get("testid",id,with_doc=True)["doc"] + doc["cancelled"] = true + db.update(doc) + except RecordNotFound: + pass + return str(id) print "Nothing cancelled" @@ -260,7 +328,7 @@ def __finesse_start_test(git_commit, kats): cancelled=test.cancelling, error=test.errorOccurred, diffFound=test.diffFound, - testRun=test.finished_test)) + testFinished=test.finished_test)) __run_new(test) finally: @@ -295,7 +363,11 @@ def finesse_get_test_progress(): percent_done = current_test.percent_done() status = current_test.get_progress() version = current_test.get_version() - return jsonify(cancelling=cancelling, running=True, id=test_id, percent=percent_done, status=status, version=version) + + return jsonify(cancelling=cancelling, + running=True, id=test_id, + percent=percent_done, status=status, + version=version) finally: schedule_lock.release() @@ -322,14 +394,13 @@ def finesse_get_branches(): def finesse_get_log(count,branch): os.chdir(os.path.join(app.instance_path,"finesse_src")) - print "!!!!", count, branch try: - [out,err] = utils.git("checkout " + branch) - [out,err] = utils.git("pull") + [out,err] = utils.git(["checkout", branch]) + [out,err] = utils.git(["pull"]) except Exception as ex: print "git pull error : " + str(ex) - [out,err] = utils.git("log --max-count={0} --pretty=oneline".format(count)) + [out,err] = utils.git(["log","--max-count={0}".format(count),"--pretty=oneline"]) log_entries = out.split("\n") @@ -348,7 +419,6 @@ def finesse_get_log(count,branch): log2send.append({'commit':vals[0], 'message':message}) - return jsonify(logs=log2send) @app.route('/finesse/get_<count>_prev_tests', methods=["POST"]) @@ -393,7 +463,7 @@ def finesse_get_prev_tests(count): status = "Cancelled" elif "diffFound" in i and i["diffFound"] == True: status = "ERRORS" - elif "testRun" in i and i["testRun"] == False: + elif "testFinished" in i and i["testFinished"] == False: status = "Not started" else: status = "OK" @@ -432,6 +502,13 @@ def finesse_view_make(view_test_id, log): elif log == "make": log = os.path.join(TEST_PATH, "build", "make.log") + if not os.path.exists(log): + log_string = "No file found" + else: + log_string = open(log).read() + elif log == "report": + log = os.path.join(TEST_PATH, "report", "report.log") + if not os.path.exists(log): log_string = "No file found" else: @@ -457,6 +534,15 @@ def finesse_view(view_test_id): doc = db.get('testid',view_test_id,with_doc=True) doc = doc["doc"] + kats = {} + + for run in doc["kats_run"]: + suite = run["suite"] + if not suite in kats: + kats[suite] = [] + + kats[suite].append((run["kat"], run["max_diff"], run["runexception"])) + if "error" in doc and doc["error"] is not None: traceback = doc["error"]["traceback"] @@ -466,9 +552,11 @@ def finesse_view(view_test_id): message = "No test exceptions thrown" return render_template("finesse_test_view.html", - view_test_id = str(view_test_id), - excp_traceback=traceback, - excp_message=message) + view_test_id = str(view_test_id), + excp_traceback=traceback, + excp_message=message, + kats = kats) + #except RecordNotFound: # pass @@ -511,7 +599,7 @@ def setInterval(interval): @setInterval(600) def checkLatestCommits(): global latest_commit_id_tested - out = utils.git(["--git-dir",SRC_GIT_PATH,"log",latest_commit_id_tested + "..HEAD",'--pretty=format:"%H"']) + out = utils.git(["--git-dir",SRC_GIT_PATH,"log", latest_commit_id_tested[:8] + "..HEAD",'--pretty=format:"%H"']) print "Checking latest commits..." commits_not_tested = [] -- GitLab