lucene-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sar...@apache.org
Subject [1/2] lucene-solr:branch_5x: Add script to host release management tools. Currently performs a single task: makes regexes for all JIRAs included in a release by parsing the CHANGES.txt files
Date Fri, 24 Jun 2016 23:35:03 GMT
Repository: lucene-solr
Updated Branches:
  refs/heads/branch_5x 75975019b -> 2489de287


Add script to host release management tools.  Currently performs a single task: makes regexes
for all JIRAs included in a release by parsing the CHANGES.txt files


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

Branch: refs/heads/branch_5x
Commit: c6affbdd1cb7b3d37f7a2c693a36e4961e263b36
Parents: 7597501
Author: Steve Rowe <sarowe@apache.org>
Authored: Fri Jun 24 19:13:16 2016 -0400
Committer: Steve Rowe <sarowe@apache.org>
Committed: Fri Jun 24 19:30:43 2016 -0400

----------------------------------------------------------------------
 dev-tools/scripts/manageRelease.py | 90 +++++++++++++++++++++++++++++++++
 1 file changed, 90 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c6affbdd/dev-tools/scripts/manageRelease.py
----------------------------------------------------------------------
diff --git a/dev-tools/scripts/manageRelease.py b/dev-tools/scripts/manageRelease.py
new file mode 100644
index 0000000..212edd0
--- /dev/null
+++ b/dev-tools/scripts/manageRelease.py
@@ -0,0 +1,90 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import sys
+import os
+sys.path.append(os.path.dirname(__file__))
+from scriptutil import *
+import argparse
+import re
+
+# Pulls out all JIRAs mentioned in the given CHANGES.txt filename under the given version
+# and outputs a regular expression that will match all of them
+def print_changes_jira_regex(filename, version):
+  release_section_re = re.compile(r'\s*====*\s+(.*)\s+===')
+  version_re = re.compile(r'%s(?:$|[^-])' % version)
+  bullet_re = re.compile(r'\s*[-*]\s*(.*)')
+  issue_list_re = re.compile(r'[:,/()\s]*((?:LUCENE|SOLR)-\d+)')
+  more_issues_on_next_line_re = re.compile(r'(?:[:,/()\s]*(?:LUCENE|SOLR)-\d+)+\s*,\s*$')
# JIRA list with trailing comma
+  under_requested_version = False
+  requested_version_found = False
+  more_issues_on_next_line = False
+  lucene_issues = []
+  solr_issues = []
+  with open(filename, 'r') as changes:
+    for line in changes:
+      version_boundary = release_section_re.match(line)
+      if version_boundary is not None:
+        if under_requested_version:
+          break # No longer under the requested version - stop looking for JIRAs
+        else:
+          if version_re.search(version_boundary.group(1)):
+            under_requested_version = True # Start looking for JIRAs
+            requested_version_found = True
+      else:
+        if under_requested_version:
+          bullet_match = bullet_re.match(line)
+          if more_issues_on_next_line or bullet_match is not None:
+            content = bullet_match.group(1) if bullet_match is not None else line
+            for issue in issue_list_re.findall(content):
+              (lucene_issues if issue.startswith('LUCENE-') else solr_issues).append(issue.rsplit('-',
1)[-1])
+            more_issues_on_next_line = more_issues_on_next_line_re.match(content)
+  if not requested_version_found:
+    raise Exception('Could not find %s in %s' % (version, filename))
+  print('\nRegex to match JIRAs in the %s release section in %s:' % (version, filename))
+  if len(lucene_issues) > 0:
+    print(r'LUCENE-(?:%s)\b' % '|'.join(lucene_issues), end='')
+    if len(solr_issues) > 0:
+      print('|', end='')
+  if len(solr_issues) > 0:
+    print(r'SOLR-(?:%s)\b' % '|'.join(solr_issues), end='')
+  print()
+
+def read_config():
+  parser = argparse.ArgumentParser(description='Tools to help manage a Lucene/Solr release')
+  parser.add_argument('version', type=Version.parse, help='Version of the form X.Y.Z')
+  c = parser.parse_args()
+
+  c.branch_type = find_branch_type()
+  c.matching_branch = c.version.is_bugfix_release() and c.branch_type == BranchType.release
or \
+                      c.version.is_minor_release() and c.branch_type == BranchType.stable
or \
+                      c.version.is_major_release() and c.branch_type == BranchType.unstable
+
+  print ("branch_type is %s " % c.branch_type)
+
+  return c
+
+def main():
+  c = read_config()
+  # TODO: add other commands to perform, specifiable via cmdline param
+  # Right now, only one operation is performed: generate regex matching JIRAs for the given
version from CHANGES.txt
+  print_changes_jira_regex('lucene/CHANGES.txt', c.version)
+  print_changes_jira_regex('solr/CHANGES.txt', c.version)
+
+if __name__ == '__main__':
+  try:
+    main()
+  except KeyboardInterrupt:
+    print('\nReceived Ctrl-C, exiting early')


Mime
View raw message