in tools/dev/contribulyze.py [0:0]
def graze(input):
just_saw_separator = False
while True:
line = input.readline()
if line == '': break
if line == log_separator:
if just_saw_separator:
sys.stderr.write('Two separators in a row.\n')
sys.exit(1)
else:
just_saw_separator = True
num_lines = None
continue
else:
if just_saw_separator:
m = log_header_re.match(line)
if not m:
sys.stderr.write('Could not match log message header.\n')
sys.stderr.write('Line was:\n')
sys.stderr.write("'%s'\n" % line)
sys.exit(1)
else:
log = LogMessage(m.group(1), m.group(2), m.group(3))
num_lines = int(m.group(4))
just_saw_separator = False
saw_patch = False
line = input.readline()
# Handle 'svn log -v' by waiting for the blank line.
while line != '\n':
line = input.readline()
# Parse the log message.
field = None
while num_lines > 0:
line = input.readline()
log.accum(line)
m = field_re.match(line)
if m:
# We're on the first line of a field. Parse the field.
while m:
if not field:
ident = m.group(1)
if ident in field_aliases:
field = Field(field_aliases[ident], ident)
else:
field = Field(ident)
# Each line begins either with "WORD by:", or with whitespace.
in_field_re = re.compile('^('
+ (field.alias or field.name)
+ ' by:\s+|\s+)([^\s(].*)')
m = in_field_re.match(line)
if m is None:
sys.stderr.write("Error matching: %s\n" % (line))
user, real, email = Contributor.parse(m.group(2))
if user == 'me':
user = log.committer
c = Contributor.get(user, real, email)
c.add_activity(field.name, log)
if (field.name == 'Patch'):
saw_patch = True
field.add_contributor(c)
line = input.readline()
if line == log_separator:
# If the log message doesn't end with its own
# newline (that is, there's the newline added by the
# svn client, but no further newline), then just move
# on to the next log entry.
just_saw_separator = True
num_lines = 0
break
log.accum(line)
num_lines -= 1
m = in_field_re.match(line)
if not m:
m = field_re.match(line)
if not m:
aside_match = parenthetical_aside_re.match(line)
if aside_match:
field.add_endum(line)
log.add_field(field)
field = None
num_lines -= 1
if not saw_patch and log.committer != '(no author)':
c = Contributor.get(log.committer, None, None)
c.add_activity('Patch', log)
continue