You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sqoop.apache.org by gw...@apache.org on 2015/07/27 23:15:12 UTC

sqoop git commit: SQOOP-2428: Sqoop2: Precommit: Print actions in order they've been executed

Repository: sqoop
Updated Branches:
  refs/heads/sqoop2 e1a8f5ca3 -> 7e637244a


SQOOP-2428: Sqoop2: Precommit: Print actions in order they've been executed

(Jarek Jarcec Cecho via Gwen Shapira)


Project: http://git-wip-us.apache.org/repos/asf/sqoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/sqoop/commit/7e637244
Tree: http://git-wip-us.apache.org/repos/asf/sqoop/tree/7e637244
Diff: http://git-wip-us.apache.org/repos/asf/sqoop/diff/7e637244

Branch: refs/heads/sqoop2
Commit: 7e637244a45b0d7adc14e5d6f203743b147167ef
Parents: e1a8f5c
Author: Gwen Shapira <cs...@gmail.com>
Authored: Mon Jul 27 14:14:04 2015 -0700
Committer: Gwen Shapira <cs...@gmail.com>
Committed: Mon Jul 27 14:14:04 2015 -0700

----------------------------------------------------------------------
 dev-support/test-patch.py | 118 +++++++++++++++++++++++------------------
 1 file changed, 66 insertions(+), 52 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/sqoop/blob/7e637244/dev-support/test-patch.py
----------------------------------------------------------------------
diff --git a/dev-support/test-patch.py b/dev-support/test-patch.py
index 7ae7901..50ce78c 100755
--- a/dev-support/test-patch.py
+++ b/dev-support/test-patch.py
@@ -94,29 +94,42 @@ def jira_get_defect(result, defect, username, password):
   url = "%s/rest/api/2/issue/%s" % (BASE_JIRA_URL, defect)
   return jira_request(result, url, username, password, None, {}).read()
 
+def jira_color(level):
+  if level == ResultItem.INFO:
+    return "INFO:"
+  elif level == ResultItem.SUCCESS:
+    return "{color:green}SUCCESS:{color}"
+  elif level == ResultItem.ERROR:
+    return "{color:red}ERROR:{color}"
+  elif level == ResultItem.FATAL:
+    return "{color:red}ERROR:{color}"
+  elif level == ResultItem.WARNING:
+    return "{color:yellow}WARNING:{color}"
+  else:
+    return level
+
+
 def jira_generate_comment(result, branch):
   body =  [ "Testing file [%s|%s] against branch %s took %s." % (result.attachment.split('/')[-1] , result.attachment, branch, datetime.datetime.now() - result.start_time) ]
   body += [ "" ]
-  if result._fatal:
-    result._error = [ result._fatal ] + result._error
-  if result._error:
-    count = len(result._error)
-    if count == 1:
-      body += [ "{color:red}Overall:{color} -1 due to an error" ]
-    else:
-      body += [ "{color:red}Overall:{color} -1 due to %d errors" % (count) ]
-  else:
+
+  if result.overall == "+1":
     body += [ "{color:green}Overall:{color} +1 all checks pass" ]
+  else:
+    body += [ "{color:red}Overall:{color} -1 due to an error(s), see details below:" ]
   body += [ "" ]
-  for error in result._error:
-    body += [ "{color:red}ERROR:{color} %s" % (error.replace("\n", "\\n")) ]
-  for info in result._info:
-    body += [ "INFO: %s" % (info.replace("\n", "\\n")) ]
-  for success in result._success:
-    body += [ "{color:green}SUCCESS:{color} %s" % (success.replace("\n", "\\n")) ]
+
+  for item in result._items:
+    body += [ "%s %s" % (jira_color(item.level), item.message.replace("\n", "\\n")) ]
+    for bullet in item.bullets:
+      body += [ "* %s" % bullet ]
+    if len(item.bullets) > 0:
+      body += [ "\\n" ]
+
   if "BUILD_URL" in os.environ:
     body += [ "" ]
     body += [ "Console output is available %s." % (jenkins_link_for_jira("here", "console")) ]
+
   body += [ "" ]
   body += [ "This message is automatically generated." ]
   return "\\n".join(body)
@@ -202,11 +215,11 @@ def git_apply(result, cmd, patch_file, strip, output_dir):
       output = fh.read()
   if rc == 0:
     if output:
-      result.success("Patch applied, but there has been warnings:\n{code}%s{code}\n" % (output))
+      result.warning("Patch applied, but there has been warnings:\n{code}%s{code}\n" % (output))
     else:
       result.success("Patch applied correctly")
   else:
-    result.fatal("failed to apply patch (exit code %d):\n{code}%s{code}\n" % (rc, output))
+    result.fatal("Failed to apply patch (exit code %d):\n{code}%s{code}\n" % (rc, output))
 
 def static_test(result, patch_file, output_dir):
   output_file = "%s/static-test.txt" % (output_dir)
@@ -221,7 +234,7 @@ def mvn_clean(result, output_dir):
   if rc == 0:
     result.success("Clean was successful")
   else:
-    result.fatal("failed to clean project (exit code %d, %s)" % (rc, jenkins_file_link_for_jira("report", "clean.txt")))
+    result.fatal("Failed to clean project (exit code %d, %s)" % (rc, jenkins_file_link_for_jira("report", "clean.txt")))
 
 def mvn_rat(result, output_dir):
   rc = execute("mvn apache-rat:check 1>%s/rat.txt 2>&1" % output_dir)
@@ -237,11 +250,9 @@ def mvn_rat(result, output_dir):
           if "!?????" in line:
             matcher = re.search("\!\?\?\?\?\? (.*)$", line)
             if matcher:
-              incorrect_files += [ matcher.groups()[0] ]
+              incorrect_files += [ "{{%s}}" % (matcher.groups()[0]) ]
         fd.close()
-    for incorrect_file in set(incorrect_files):
-      result.error("File {{%s}} have missing licence header" % (incorrect_file))
-    result.error("Failed to run license check (exit code %d, %s)" % (rc, jenkins_file_link_for_jira("report", "rat.txt")))
+    result.error("Failed to run license check (exit code %d, %s)" % (rc, jenkins_file_link_for_jira("report", "rat.txt")), set(incorrect_files))
 
 def mvn_install(result, output_dir):
   rc = execute("mvn install -DskipTests 1>%s/install.txt 2>&1" % output_dir)
@@ -287,7 +298,6 @@ def run_mvn_test(command, test_type, result, output_dir):
     archive_dir = os.path.join(output_dir, test_results_dir, test_type)
     if not os.path.exists(archive_dir):
       os.makedirs(archive_dir)
-    result.error("Some of %s tests failed (%s, executed %d tests)" % (test_type, jenkins_file_link_for_jira("report", test_file_name), executed_tests))
     failed_tests = []
     for path in list(find_all_files(".")):
       file_name = os.path.basename(path)
@@ -298,10 +308,9 @@ def run_mvn_test(command, test_type, result, output_dir):
           if "<failure" in line or "<error" in line:
             matcher = re.search("TEST\-(.*).xml$", file_name)
             if matcher:
-              failed_tests += [ matcher.groups()[0] ]
+               failed_tests += [ "Test {{%s}}" % (matcher.groups()[0]) ]
         fd.close()
-    for failed_test in set(failed_tests):
-      result.error("Failed %s test: {{%s}}" % (test_type, failed_test))
+    result.error("Some of %s tests failed (%s, executed %d tests)" % (test_type, jenkins_file_link_for_jira("report", test_file_name), executed_tests), set(failed_tests))
 
 def clean_folder(folder):
   for the_file in os.listdir(folder):
@@ -312,32 +321,42 @@ def clean_folder(folder):
       except Exception, e:
           print e
 
+# Keep track of actions that we did with their results
+class ResultItem(object):
+  FATAL = "FATAL"
+  ERROR = "ERROR"
+  WARNING = "WARNING"
+  INFO = "INFO"
+  SUCCESS = "SUCCESS"
+
+  def __init__(self, level, message, bullets=[]):
+    self.level = level
+    self.message = message
+    self.bullets = bullets
+
 class Result(object):
   def __init__(self):
-    self._error = []
-    self._info = []
-    self._success = []
-    self._fatal = None
+    self._items = []
+    self.overall = "+1"
     self.exit_handler = None
     self.attachment = "Not Found"
     self.start_time = datetime.datetime.now()
-  def error(self, msg):
-    self._error.append(msg)
-  def info(self, msg):
-    self._info.append(msg)
-  def success(self, msg):
-    self._success.append(msg)
-  def fatal(self, msg):
-    self._fatal = msg
+  def error(self, msg, bullets=[]):
+    self.overall = "-1"
+    self._items.append(ResultItem(ResultItem.ERROR, msg, bullets))
+  def info(self, msg, bullets=[]):
+    self._items.append(ResultItem(ResultItem.INFO, msg, bullets))
+  def success(self, msg, bullets=[]):
+    self._items.append(ResultItem(ResultItem.SUCCESS, msg, bullets))
+  def warning(self, msg, bullets=[]):
+    self._items.append(ResultItem(ResultItem.WARNING, msg, bullets))
+  def fatal(self, msg, bullets=[]):
+    self.overall = "-1"
+    self._items.append(ResultItem(ResultsIem.FATAL, msg, bullets))
     self.exit_handler()
     self.exit()
   def exit(self):
     git_cleanup()
-    if self._fatal or self._error:
-      if tmp_dir:
-        print "INFO: output is located %s" % (tmp_dir)
-    elif tmp_dir:
-      shutil.rmtree(tmp_dir)
     sys.exit(0)
 
 usage = "usage: %prog [options]"
@@ -398,15 +417,10 @@ def log_and_exit():
   # Write down comment generated for jira (won't be posted)
   write_file("%s/jira-comment.txt" % output_dir, jira_generate_comment(result, branch).replace("\\n", "\n"))
 
-  if result._fatal:
-    print "FATAL: %s" % (result._fatal)
-  for error in result._error:
-    print "ERROR: %s" % (error)
-  for info in result._info:
-    print "INFO: %s" % (info)
-  for success in result._success:
-    print "SUCCESS: %s" % (success)
-  result.exit()
+  for item in result._items:
+    print "%s: %s" % (item.level, item.message)
+    for bullet in item.bullets:
+      print "* %s" % bullet
 
 result.exit_handler = log_and_exit