in tools/server-side/svnpredumpfilter.py [0:0]
def svn_log_stream_get_dependencies(stream, included_paths):
import re
dt = DependencyTracker(included_paths)
header_re = re.compile(r'^r([0-9]+) \|.*$')
action_re = re.compile(r'^ [ADMR] /(.*)$')
copy_action_re = re.compile(r'^ [AR] /(.*) \(from /(.*):[0-9]+\)$')
line_buf = None
last_revision = 0
eof = False
path_copies = set()
found_changed_path = False
while not eof:
try:
line = line_buf is not None and line_buf or readline(stream)
except EOFError:
break
# We should be sitting at a log divider line.
if line != '-' * 72:
raise LogStreamError("Expected log divider line; not found.")
# Next up is a log header line.
try:
line = readline(stream)
except EOFError:
break
match = header_re.search(line)
if not match:
raise LogStreamError("Expected log header line; not found.")
pieces = map(string.strip, line.split('|'))
revision = int(pieces[0][1:])
if last_revision and revision >= last_revision:
raise LogStreamError("Revisions are misordered. Make sure log stream "
"is from 'svn log' with the youngest revisions "
"before the oldest ones (the default ordering).")
log("Parsing revision %d" % (revision), 1)
last_revision = revision
idx = pieces[-1].find(' line')
if idx != -1:
log_lines = int(pieces[-1][:idx])
else:
log_lines = 0
# Now see if there are any changed paths. If so, parse and process them.
line = readline(stream)
if line == 'Changed paths:':
while 1:
try:
line = readline(stream)
except EOFError:
eof = True
break
match = copy_action_re.search(line)
if match:
found_changed_path = True
path_copies.add((sanitize_path(match.group(1)),
sanitize_path(match.group(2))))
elif action_re.search(line):
found_changed_path = True
else:
break
# Finally, skip any log message lines. (If there are none,
# remember the last line we read, because it probably has
# something important in it.)
if log_lines:
for i in range(log_lines):
readline(stream)
line_buf = None
else:
line_buf = line
if not found_changed_path:
raise LogStreamError("No changed paths found; did you remember to run "
"'svn log' with the --verbose (-v) option when "
"generating the input to this script?")
dt.include_missing_copies(path_copies)
return dt