enable log filtering on "user" and "msg" log attributes - close #14

This commit is contained in:
Josh Holtrop 2012-06-29 11:14:54 -04:00
parent 780e8b6692
commit d191a944d8

23
jsvn
View File

@ -873,14 +873,33 @@ def log(argv, svn, out):
sys.stderr.write('Error: --filter requires argument\n') sys.stderr.write('Error: --filter requires argument\n')
return RET_ERR return RET_ERR
m = re.match('(\S+)=(/?)(.*)$', argv[i + 1]) m = re.match('(\S+)=(/?)(.*)$', argv[i + 1])
if m is not None: if m is None:
sys.stderr.write('Error: Incorrect format for filter argument\n') sys.stderr.write('Error: Incorrect format for filter argument\n')
return RET_ERR return RET_ERR
filters.append(m.group(1, 2, 3)) filters.append(m.group(1, 2, 3))
found_filter = True
argv = argv[:i] + argv[i+2:]
def filters_pass(le):
for f in filters:
keyword, op, match = f
if keyword == 'user':
target = le.user
elif keyword == 'msg':
target = ' '.join(le.message)
else:
sys.stderr.write('Unknown filter target "%s"\n' % keyword)
return False
if op == '/':
if not re.search(match, target):
return False
else:
if match != target:
return False
return True
pout = Popen([svn] + argv, stdout=PIPE).stdout pout = Popen([svn] + argv, stdout=PIPE).stdout
while True: while True:
le = LogEntry(pout) le = LogEntry(pout)
if len(le) > 0: if len(le) > 0 and filters_pass(le):
ansi_color(out, 'yellow') ansi_color(out, 'yellow')
out.write('-' * 72) out.write('-' * 72)
ansi_reset(out) ansi_reset(out)