From 3b4496abd6a871e75fc8fa3b65a22c8d3cb060bb Mon Sep 17 00:00:00 2001 From: Daniel Brown <ddb@star.sr.bham.ac.uk> Date: Fri, 9 Aug 2013 13:19:09 +0100 Subject: [PATCH] added multiselect for starting multiple commits at once for a given set of kat files --- pykat/testing/web/templates/finesse_test.html | 40 +++++-- pykat/testing/web/web_interface.py | 101 ++++++++++-------- 2 files changed, 87 insertions(+), 54 deletions(-) diff --git a/pykat/testing/web/templates/finesse_test.html b/pykat/testing/web/templates/finesse_test.html index 487dcfd..8efb6e6 100644 --- a/pykat/testing/web/templates/finesse_test.html +++ b/pykat/testing/web/templates/finesse_test.html @@ -59,17 +59,19 @@ <div class="new_test"> <h2>Start new test</h2> - <select id="branch_list" style="width: 100px;"> + <select id="branch_list" style="width: 200px;"> <option text="develop" value="develop"/> </select> - - <select id="commit_list" style="width: 300px;"> - </select> - - <input type="button" value="Refresh" id="btnGetLogs"/> <br/> - + <select style="float:left;vertical-align: top; height:210px;width:200px;" multiple="multiple" size="10" id="commit_list" style="width: 300px;"> + </select> + <div style="float:left; vertical-align: display:block; width:450px; overflow:auto; padding:5px; margin-left:10px; height:200px; border: 1px solid #aaa;"> + <h4 style="padding:0px; margin:0px;" id="gitDescriptionHdr">Git log description</h4> + <p id="gitDescriptionTxt">[Select item to see commit message]</p> + </div> + <br style="clear:both;" /> <input type="checkbox" id="chkNoBuild" />Use previously built kat (Will built if it can't find any previous kats of the requested version)<br> + <input type="button" value="Refresh branches and logs" id="btnGetLogs"/> <input type="button" value="Start new FINESSSE test" id="btnStartTest"/> <section class="container"> @@ -102,6 +104,9 @@ <script type="text/javascript" charset="utf8" src="http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/jquery.dataTables.min.js"></script> <script type="text/JavaScript"> + + var commit_msgs = {}; + function sortKatList(list){ // resort alphabetically the options visible var rvals = $(list); @@ -154,6 +159,21 @@ $("#rightValues").append(selectedItem); sortKatList("#rightValues"); }); + + $("#commit_list").change(function(){ + vals = $("#commit_list option:selected").val(); + + if($.isArray(vals)){ + $("#gitDescriptionHdr").text("Git log: " + vals[0]); + $("#gitDescriptionTxt").text(commit_msgs[vals[0]]); + }else if(vals.length == 40){ + $("#gitDescriptionHdr").text("Git log: " + vals); + $("#gitDescriptionTxt").text(commit_msgs[vals]); + }else{ + $("#gitDescriptionHdr").text("Git log: "); + $("#gitDescriptionTxt").text("[Select item to see commit message]"); + } + }); $('#btnGetPrevTests').click(function(){ getPreviousTests(); @@ -470,13 +490,15 @@ $.ajax({ type: "POST", contentType: "application/json; charset=utf-8", - url: "/finesse/get_50_" + $("#branch_list").val() + "_logs", + url: "/finesse/get_100_" + $("#branch_list").val() + "_logs", success: function (data) { logs = data.logs; list.empty(); + commit_msgs = {}; for(var i=0; i<logs.length; i++){ - list.append($('<option>', { value: logs[i].commit, text: logs[i].commit + " - " + logs[i].message})); + commit_msgs[logs[i].commit] = logs[i].message; + list.append($('<option>', { value: logs[i].commit, text: logs[i].commit})); } $("#btnStartTest").attr("disabled", false); diff --git a/pykat/testing/web/web_interface.py b/pykat/testing/web/web_interface.py index ff2fbca..fd255b4 100644 --- a/pykat/testing/web/web_interface.py +++ b/pykat/testing/web/web_interface.py @@ -285,6 +285,7 @@ def home_page(): @app.route('/finesse/rerun_test_<id>', methods=["POST"]) def finesse_start_rerun(id): + id = int(id) try: schedule_lock.acquire() @@ -339,64 +340,74 @@ def finesse_start_test(): return jsonify(__finesse_start_test(request.json["git_commit"], request.json["kats"], nobuild)) def __finesse_start_test(git_commit, kats, nobuild=False): + global current_test, test_id + git_commits = [] + + if type(git_commit) is not list: + git_commits.append(git_commit) + elif type(git_commit) is list: + git_commits = git_commit + else: + raise Exception("git_commit variable was not a list of git commit strings or a single string git commit") + try: schedule_lock.acquire() - test_id += 1 - - TEST_OUTPUT_PATH = os.path.join(app.instance_path, "tests") - - if not os.path.exists(TEST_OUTPUT_PATH): - os.mkdir(TEST_OUTPUT_PATH) + for git_commit in git_commits: - TEST_RUN_PATH = os.path.join(TEST_OUTPUT_PATH, str(test_id)) - - if os.path.exists(TEST_RUN_PATH): - shutil.rmtree(TEST_RUN_PATH) + test_id += 1 + + TEST_OUTPUT_PATH = os.path.join(app.instance_path, "tests") - os.mkdir(TEST_RUN_PATH) - - # if we are not building then check to see if we can find a previous version - # of kat and if so put it in the correct folder for the test to find - if nobuild: - if sys.platform == "win32": - EXE = ".exe" - else: - EXE = "" + if not os.path.exists(TEST_OUTPUT_PATH): + os.mkdir(TEST_OUTPUT_PATH) - TEST_BUILD_PATH = os.path.join(TEST_RUN_PATH,"build") - KAT_EXE = os.path.join(app.instance_path, "kat_store", "kat_" + str(git_commit) + EXE) + TEST_RUN_PATH = os.path.join(TEST_OUTPUT_PATH, str(test_id)) - if os.path.exists(KAT_EXE): - print "using existing kat file " + KAT_EXE - utils.git(["clone","git://gitmaster.atlas.aei.uni-hannover.de/finesse/base.git",TEST_BUILD_PATH]) - KAT_NEW_EXE = os.path.join(TEST_BUILD_PATH,"kat" + EXE) - shutil.copyfile(KAT_EXE, KAT_NEW_EXE) + if os.path.exists(TEST_RUN_PATH): + shutil.rmtree(TEST_RUN_PATH) - - print "nobuild", nobuild - - test = finesse_test.FinesseTestProcess(os.path.join(app.instance_path, "finesse_test"), - TEST_RUN_PATH, - git_commit, - run_fast=False, kats=kats, test_id=test_id, - emails="", nobuild=nobuild) - - db.insert(dict(t="test", - test_id=test.test_id, - git_commit=test.get_version(), - cancelled=test.cancelling, - error=test.errorOccurred, - diffFound=test.diffFound, - testFinished=test.finished_test)) - - __run_new(test) + os.mkdir(TEST_RUN_PATH) + + # if we are not building then check to see if we can find a previous version + # of kat and if so put it in the correct folder for the test to find + if nobuild: + if sys.platform == "win32": + EXE = ".exe" + else: + EXE = "" + + TEST_BUILD_PATH = os.path.join(TEST_RUN_PATH,"build") + KAT_EXE = os.path.join(app.instance_path, "kat_store", "kat_" + str(git_commit) + EXE) + + if os.path.exists(KAT_EXE): + print "using existing kat file " + KAT_EXE + utils.git(["clone","git://gitmaster.atlas.aei.uni-hannover.de/finesse/base.git",TEST_BUILD_PATH]) + KAT_NEW_EXE = os.path.join(TEST_BUILD_PATH,"kat" + EXE) + shutil.copyfile(KAT_EXE, KAT_NEW_EXE) + + test = finesse_test.FinesseTestProcess(os.path.join(app.instance_path, "finesse_test"), + TEST_RUN_PATH, + git_commit, + run_fast=False, kats=kats, test_id=test_id, + emails="", nobuild=nobuild) + + db.insert(dict(t="test", + test_id=test.test_id, + git_commit=test.get_version(), + cancelled=test.cancelling, + error=test.errorOccurred, + diffFound=test.diffFound, + testFinished=test.finished_test)) + + __run_new(test) + finally: schedule_lock.release() - return {'id':test.test_id} + return {'OK'} @app.route('/finesse/get_tests', methods=["POST"]) def finesse_get_tests(): -- GitLab