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 <[email protected]>
Authored: Tue Sep 17 20:44:33 2013 -0700
Committer: Neha Narkhede <[email protected]>
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())
+

Reply via email to