[Libreoffice-commits] dev-tools.git: ciabot/config-example.cfg ciabot/libreoffice-bugzilla2.py
Markus Mohrhard
markus.mohrhard at googlemail.com
Sun Oct 26 13:37:49 PDT 2014
ciabot/config-example.cfg | 7 +
ciabot/libreoffice-bugzilla2.py | 203 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 210 insertions(+)
New commits:
commit 20ff074cdf9ce3f68fb8ef399b02dbf0649aea4d
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sun Oct 26 21:36:02 2014 +0100
implement new git bugzilla script
diff --git a/ciabot/config-example.cfg b/ciabot/config-example.cfg
new file mode 100644
index 0000000..3671e1a
--- /dev/null
+++ b/ciabot/config-example.cfg
@@ -0,0 +1,7 @@
+[core]
+location = /home/moggi/devel/libo_push/
+
+[bugzilla]
+url = bugs.freedesktop.org/xmlrpc.cgi
+user = your.user.name at bugs.com
+password = MySecretPassword
diff --git a/ciabot/libreoffice-bugzilla2.py b/ciabot/libreoffice-bugzilla2.py
new file mode 100644
index 0000000..1a72143
--- /dev/null
+++ b/ciabot/libreoffice-bugzilla2.py
@@ -0,0 +1,203 @@
+# libreoffice git bugzilla integration
+# Copyright (C) 2014 Markus Mohrhard
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+from __future__ import print_function
+
+import datetime
+import os
+import re
+import sys, getopt
+import git
+import ConfigParser
+
+if hasattr(sys.version_info, "major") and sys.version_info.major >= 3:
+# pylint: disable=F0401,E0611
+ from urllib.parse import urlparse
+else:
+ from urlparse import urlparse
+
+import bugzilla
+from bugzilla import Bugzilla
+from bugzilla.base import _BugzillaToken
+
+master_target = "4.4.0"
+bug_regex = "fdo#(\d+)"
+
+class FreedesktopBZ:
+ bzclass = bugzilla.Bugzilla44
+
+ bz = None
+
+ def connect(self):
+ config = ConfigParser.ConfigParser()
+ config.read('config.cfg')
+ url = config.get('bugzilla', 'url')
+ user = config.get('bugzilla', 'user')
+ password = config.get('bugzilla', 'password')
+ self.bz = self.bzclass(url=url)
+ self.bz.login(user=user, password=password)
+
+ def update_whiteboard(self, commit, bugnr, new_version, branch, repo_name):
+ bug = self.bz.getbug(bugnr)
+ print(bug)
+ old_whiteboard = bug.getwhiteboard()
+
+ m = re.search(new_version, old_whiteboard)
+ if m is not None and len(m.groups()) > 0:
+ new_whiteboard = old_whiteboard + " target:" + new_version
+ bug.setwhiteboard(new_whiteboard)
+
+ cgiturl = "http://cgit.freedesktop.org/libreoffice/%s/commit/?id=%s" %(repo_name, commit.hexsha)
+ if branch is not None:
+ cgiturl = cgiturl + "&h=" + branch
+ else:
+ branch = "master"
+
+ comment_msg = """%s committed a patch related to this issue.
+It has been pushed to "%s":
+
+%s
+
+%s
+It will be available in %s.
+
+The patch should be included in the daily builds available at
+http://dev-builds.libreoffice.org/daily/ in the next 24-48 hours. More
+information about daily builds can be found at:
+http://wiki.documentfoundation.org/Testing_Daily_Builds
+Affected users are encouraged to test the fix and report feedback.""" %(commit.author, branch, cgiturl, commit.summary, new_version)
+ print(comment_msg)
+ bug.addcomment(comment_msg)
+
+
+
+
+def find_target_version(repo, branch):
+ if branch is None:
+ return master_target
+
+ # check if committed to a release branch
+ # form libreoffice-x-y-z => will be available in x.y.z
+ match = re.search("libreoffice-(\d+)-(\d+)-(\d+)", branch)
+ if match is not None:
+ return ".".join(map(str, match.groups()))
+
+ # form libreoffice-x-y
+ # branch of libreoffice-x-y-z exists => will be available in x.y.z+1
+ # else
+ # tag libreoffice-x.y.0.z exists => will be available in x.y.0.z+1 (RC)
+ # else
+ # beta
+ match = re.search("libreoffice-(\d+)-(\d+)", branch)
+ if match is not None:
+ base = ".".join(map(str, match.groups()))
+ branches = repo.remote().refs
+ branch_names = [str(branch) for branch in branches]
+ print(branch_names)
+ search_string = "libreoffice-"+"-".join(map(str, match.groups())) + "-(\d+)"
+ print(search_string)
+ micro_list = [m.group(1) for m in [re.search(search_string, branch) for branch in branch_names] if m is not None]
+ if micro_list.count() == 0:
+ # first search if we are at an RC already
+ search_string = "libreoffice-" + base + ".0." + "(\d+)"
+ rc_list = [m.group(1) for m in [re.search(search_string, str(tag)) for tag in tags] if m is not None]
+ print(rc_list)
+ if len(rc_list) > 0:
+ return base + ".0." + str(max(rc_list) + 1)
+
+ # we have not yet tagged an RC, check which betas have been tagged
+ search_string = "libreoffice-" + base + ".0.0.beta(\d+)"
+ beta_list = [m.group(1) for m in [re.search(search_string, str(tag)) for tag in tags] if m is not None]
+ if len(beta_list) == 0:
+ # no beta yet
+ return base + ".0.0.beta0"
+ if max(beta_list) == 2:
+ # we only release two betas, therefore now the next will be a RC
+ return base + ".0.1"
+
+ # normal beta
+ return base + ".0.0.beta" + str(max(beta_list) + 1)
+ print(micro_list)
+ return base + "." + str(max(micro_list))
+
+ return None
+
+def get_commit(repo, commit_id):
+ commit = repo.commit(commit_id)
+ return commit
+
+def find_bugid(repo, commit_id):
+ commit = get_commit(repo, commit_id)
+ summary_line = commit.summary
+ m = re.search(bug_regex, summary_line)
+ if m is None or len(m.groups()) == 0:
+ print("no bugid found")
+ sys.exit()
+
+ return m.groups()
+
+def read_repo(repo_name):
+ config = ConfigParser.ConfigParser()
+ config.read('config.cfg')
+ path = config.get(repo_name, 'location')
+ repo = git.repo.base.Repo(path)
+ return repo
+
+def main(argv):
+ print(argv)
+ try:
+ opts, args = getopt.getopt(argv,"hc:b:r:",["commit=","branch=","repo=","help"])
+ except getopt.GetoptError:
+ print('test.py -c commitid -r repo [-b branchname]')
+ sys.exit(2)
+
+ commit_id = None
+ branch = None
+ repo_name = None
+
+ for opt, arg in opts:
+ if opt == '-h':
+ print('test.py -c commitid [-b branchname] [-r repo]')
+ sys.exit()
+ elif opt in ("-c", "--commit_id"):
+ commit_id = arg
+ elif opt in ("-b", "--branch"):
+ branch = arg
+ elif opt in ("-r", "--repo"):
+ repo_name = arg
+
+ print(commit_id)
+ print(branch)
+ print(repo_name)
+
+ repo = read_repo(repo_name)
+
+ target_version = find_target_version(repo, branch)
+
+ bug_ids = find_bugid(repo, commit_id)
+
+ commit = get_commit(repo, commit_id)
+
+ if target_version is None:
+ sys.exit()
+
+ bz = FreedesktopBZ()
+ bz.connect()
+ for bug_id in bug_ids:
+ bz.update_whiteboard(commit, bug_id, target_version, branch, repo_name)
+
+if __name__ == "__main__":
+ main(sys.argv[1:])
More information about the Libreoffice-commits
mailing list