[asterisk-commits] digium commits: Improve reliability of extracting user from ... (repotools[master])
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Wed Jun 10 09:50:41 CDT 2015
Joshua Colp has submitted this change and it was merged.
Change subject: digium_commits: Improve reliability of extracting user from messages
......................................................................
digium_commits: Improve reliability of extracting user from messages
This patch makes extracting user information from a variety of fields in
commit messages slightly more reliable. It:
* Checks and parses usernames using the same method where all user names
can appear. Previously, a full username extraction was only performed
on coders; now, authors, testers, and other fields are fully parsed.
* The regex for "Tested by" and "Reported by" previously allowed for any
number of spaces between the first and second word. In practice, this
caused matching problems. We now looking for only a single space or a
hyphen.
Change-Id: Id85d719aa2cc59015f1b49539563ddbb7b2b1928
---
M digium_commits.py
1 file changed, 47 insertions(+), 33 deletions(-)
Approvals:
Mark Michelson: Looks good to me, but someone else must approve
Joshua Colp: Looks good to me, approved; Verified
diff --git a/digium_commits.py b/digium_commits.py
index 522731f..7739e66 100644
--- a/digium_commits.py
+++ b/digium_commits.py
@@ -9,7 +9,8 @@
import re
from datetime import datetime
-from digium_jira_user import AsteriskUser
+from digium_jira_user import get_user_by_username
+
class DigiumCommitMessageParser:
'''
@@ -37,12 +38,49 @@
string "Blocked revisions " is found in the commit message.
'''
self.message = unicode(message).encode('utf-8')
- self.author = AsteriskUser(author.strip())
+ self.author = get_user_by_username(author.strip())
self.raw = raw
self.block = False
if self.message.find("Blocked revisions ") >= 0:
self.block = True
+
+ def extract_user(self, raw_user):
+ """Create an AsteriskUser object from a raw user string
+
+ Keyword Arguments:
+ raw_user The raw string containing the user information
+
+ Returns:
+ An AsteriskUser object
+ """
+ realname = None
+ email = None
+ license = None
+
+ name = raw_user.strip()
+ if ':' in name:
+ name.replace(':', '')
+ if '<' in name:
+ realname = name[:name.index('<')]
+ email = name[(name.index('<') + 1):name.index('>')]
+ if '(' in name:
+ if not realname:
+ realname = name[:name.index('(')]
+ license = name[(name.index('(') + 1):name.index(')')]
+ if not realname:
+ realname = name
+ if len(realname) == 0:
+ return None
+
+ realname = realname.strip()
+ user = get_user_by_username(realname)
+ if email:
+ user.email = email.strip()
+ if license:
+ user.license = license.strip()
+
+ return user
def get_issues(self, closed=False):
'''
@@ -92,11 +130,11 @@
The return value is a list of strings.
'''
all_testers = []
- for match in re.finditer("[Tt]ested(\s*|-)[Bb]y:?(.*)", self.message):
+ for match in re.finditer("[Tt]ested[- ][Bb]y:?(.*)", self.message):
testers = match.group(1).split(",")
for t in testers:
- user = AsteriskUser(t)
- if user not in all_testers:
+ user = self.extract_user(t)
+ if user and user not in all_testers:
all_testers.append(user)
return all_testers
@@ -116,9 +154,6 @@
coders = []
tokens = self.message.split('\n')
patches = False
- realname = None
- email = None
- license = None
for token in tokens:
if 'patches:' in token.lower():
patches = True
@@ -130,28 +165,8 @@
if 'submitted by' in token.lower():
name = token[token.lower().index('submitted by') + 12:]
if name:
- name = name.strip()
- if ':' in name:
- name.replace(':', '')
- if '<' in name:
- realname = name[:name.index('<')]
- email = name[(name.index('<') + 1):name.index('>')]
- if '(' in name:
- if not realname:
- realname = name[:name.index('(')]
- license = name[(name.index('(') + 1):name.index(')')]
- if not realname:
- realname = name
- if len(realname) == 0:
- continue
- realname = realname.strip()
- user = AsteriskUser(realname)
- if email:
- user.email = email.strip()
- if license:
- user.license = license.strip()
-
- if user not in coders:
+ user = self.extract_user(name)
+ if user and user not in coders:
coders.append(user)
if len(coders) == 0:
coders.append(self.author)
@@ -166,9 +181,9 @@
"Reported by: ", then returns the name found after that.
'''
reporter = None
- match = re.search("[Rr]eported(\s*|-)[Bb]y:?(.*)", self.message)
+ match = re.search("[Rr]eported[ -][Bb]y:?(.*)", self.message)
if match is not None:
- reporter = AsteriskUser(match.group(1))
+ reporter = self.extract_user(match.group(1))
return reporter
def get_commit_summary(self):
@@ -223,7 +238,6 @@
text += '\n'
return text
-
def __repr__(self):
'''Return a string represenation of the object'''
--
To view, visit https://gerrit.asterisk.org/608
To unsubscribe, visit https://gerrit.asterisk.org/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Id85d719aa2cc59015f1b49539563ddbb7b2b1928
Gerrit-PatchSet: 1
Gerrit-Project: repotools
Gerrit-Branch: master
Gerrit-Owner: Matt Jordan <mjordan at digium.com>
Gerrit-Reviewer: Joshua Colp <jcolp at digium.com>
Gerrit-Reviewer: Mark Michelson <mmichelson at digium.com>
Gerrit-Reviewer: Matt Jordan <mjordan at digium.com>
More information about the asterisk-commits
mailing list