You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kafka.apache.org by ne...@apache.org on 2013/09/18 05:45:05 UTC

git commit: KAFKA-1053 Kafka patch review tool that integrates JIRA and reviewboard; reviewed by Joel Koshy, Swapnil Ghike and Guozhang Wang

Updated Branches:
  refs/heads/0.8 c6ca97173 -> d6f95cf97


KAFKA-1053 Kafka patch review tool that integrates JIRA and reviewboard; reviewed by Joel Koshy, Swapnil Ghike and Guozhang Wang


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

Branch: refs/heads/0.8
Commit: d6f95cf97a928067977fef5216e954d5147fd138
Parents: c6ca971
Author: Neha Narkhede <ne...@gmail.com>
Authored: Tue Sep 17 20:44:33 2013 -0700
Committer: Neha Narkhede <ne...@gmail.com>
Committed: Tue Sep 17 20:44:33 2013 -0700

----------------------------------------------------------------------
 .reviewboardrc        |   3 ++
 kafka-patch-review.py | 103 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 106 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kafka/blob/d6f95cf9/.reviewboardrc
----------------------------------------------------------------------
diff --git a/.reviewboardrc b/.reviewboardrc
new file mode 100644
index 0000000..5e8d670
--- /dev/null
+++ b/.reviewboardrc
@@ -0,0 +1,3 @@
+REPOSITORY = 'git://git.apache.org/kafka.git'
+TARGET_GROUPS = 'kafka'
+GUESS_FIELDS = True	

http://git-wip-us.apache.org/repos/asf/kafka/blob/d6f95cf9/kafka-patch-review.py
----------------------------------------------------------------------
diff --git a/kafka-patch-review.py b/kafka-patch-review.py
new file mode 100644
index 0000000..f1d5192
--- /dev/null
+++ b/kafka-patch-review.py
@@ -0,0 +1,103 @@
+#!/usr/bin/env python
+
+import argparse
+import sys
+import os 
+import time
+import datetime
+import tempfile
+from jira.client import JIRA
+
+def get_jira():
+  options = {
+    'server': 'https://issues.apache.org/jira'
+  }
+  # read the config file
+  home=jira_home=os.getenv('HOME')
+  home=home.rstrip('/')
+  jira_config = dict(line.strip().split('=') for line in open(home + '/jira.ini'))
+  jira = JIRA(options,basic_auth=(jira_config['user'], jira_config['password']))
+  return jira 
+
+def main():
+  ''' main(), shut up, pylint '''
+  popt = argparse.ArgumentParser(description='Kafka patch review tool')
+  popt.add_argument('-b', '--branch', action='store', dest='branch', required=True, help='Tracking branch to create diff against')
+  popt.add_argument('-j', '--jira', action='store', dest='jira', required=True, help='JIRA corresponding to the reviewboard')
+  popt.add_argument('-s', '--summary', action='store', dest='summary', required=False, help='Summary for the reviewboard')
+  popt.add_argument('-d', '--description', action='store', dest='description', required=False, help='Description for reviewboard')
+  popt.add_argument('-r', '--rb', action='store', dest='reviewboard', required=False, help='Review board that needs to be updated')
+  popt.add_argument('-t', '--testing-done', action='store', dest='testing', required=False, help='Text for the Testing Done section of the reviewboard')
+  popt.add_argument('-db', '--debug', action='store_true', required=False, help='Enable debug mode')
+  opt = popt.parse_args()
+
+  patch_file=tempfile.gettempdir() + "/" + opt.jira + ".patch"
+  if opt.reviewboard:
+    ts = time.time()
+    st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d_%H:%M:%S')
+    patch_file=tempfile.gettempdir() + "/" + opt.jira + '_' + st + '.patch'
+  
+  git_remote_update="git remote update"
+  print "Updating your remote branches to pull the latest changes"
+  p=os.popen(git_remote_update)
+  p.close()
+
+  rb_command="post-review --publish --tracking-branch " + opt.branch + " --target-groups=kafka --bugs-closed=" + opt.jira
+  if opt.debug:
+    rb_command=rb_command + " --debug" 
+  summary="Patch for " + opt.jira
+  if opt.summary:
+    summary=opt.summary
+  rb_command=rb_command + " --summary \"" + summary + "\""
+  if opt.description:
+    rb_command=rb_command + " --description \"" + opt.description + "\""
+  if opt.reviewboard:
+    rb_command=rb_command + " -r " + opt.reviewboard
+  if opt.testing:
+    rb_command=rb_command + " --testing-done=" + opt.testing
+  if opt.debug:
+    print rb_command
+  p=os.popen(rb_command)
+  rb_url=""
+  for line in p:
+    print line
+    if line.startswith('http'):
+      rb_url = line
+    elif line.startswith("There don't seem to be any diffs"):
+      print 'ERROR: Your reviewboard was not created/updated since there was no diff to upload. The reasons that can cause this issue are 1) Your diff is not checked into your local branch. Please check in the diff to the local branch and retry 2) You are not specifying the local branch name as part of the --branch option. Please specify the remote branch name obtained from git branch -r'
+      p.close()
+      sys.exit(1)
+    elif line.startswith("Your review request still exists, but the diff is not attached") and not opt.debug:
+      print 'ERROR: Your reviewboard was not created/updated. Please run the script with the --debug option to troubleshoot the problem'
+      p.close()
+      sys.exit(1)
+  p.close()
+  if opt.debug: 
+    print 'rb url=',rb_url
+ 
+  git_command="git diff " + opt.branch + " > " + patch_file
+  if opt.debug:
+    print git_command
+  p=os.popen(git_command)
+  p.close()
+
+  print 'Creating diff against', opt.branch, 'and uploading patch to JIRA',opt.jira
+  jira=get_jira()
+  issue = jira.issue(opt.jira)
+  attachment=open(patch_file)
+  jira.add_attachment(issue,attachment)
+  attachment.close()
+
+  comment="Created reviewboard " 
+  if not opt.reviewboard:
+    print 'Created a new reviewboard ',rb_url
+  else:
+    print 'Updated reviewboard',opt.reviewboard
+    comment="Updated reviewboard "
+
+  comment = comment + rb_url 
+  jira.add_comment(opt.jira, comment)
+
+if __name__ == '__main__':
+  sys.exit(main())
+