From dad24be156b4bce751224cda8609bb0229c00c39 Mon Sep 17 00:00:00 2001 From: Bogdano Arendartchuk Date: Fri, 20 Oct 2006 15:47:57 +0000 Subject: - SVN.log now contains information about the changed paths --- RepSys/svn.py | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/RepSys/svn.py b/RepSys/svn.py index e83b072..bc565b0 100644 --- a/RepSys/svn.py +++ b/RepSys/svn.py @@ -11,6 +11,7 @@ class SVNLogEntry: self.revision = revision self.author = author self.date = date + self.changed = [] self.lines = [] def __cmp__(self, other): @@ -248,7 +249,7 @@ class SVN: return None def log(self, url, start=None, end=0, limit=None, **kwargs): - cmd = ["log", url] + cmd = ["log", "-v", url] if start is not None or end != 0: if start is not None and type(start) is not type(0): try: @@ -273,17 +274,32 @@ class SVN: return None revheader = re.compile("^r(?P[0-9]+) \| (?P[^\|]+) \| (?P[^\|]+) \| (?P[0-9]+) (?:line|lines)$") + changedpat = re.compile(r"^\s+(?P[^\s]+) (?P[^\s]+)(?: \([^\s]+ (?P[^:]+)(?:\:(?P[0-9]+))?\))?$") logseparator = "-"*72 linesleft = 0 entry = None log = [] - emptyline = 0 + appendchanged = 0 + changedheader = 0 for line in output.splitlines(): - if emptyline: - emptyline = 0 - continue line = line.rstrip() - if linesleft == 0: + if not line: + appendchanged = 0 + if changedheader: + appendchanged = 1 + changedheader = 0 + elif appendchanged: + m = changedpat.match(line) + if m: + changed = m.groupdict().copy() + from_rev = changed.get("from_rev") + if from_rev is not None: + try: + changed["from_rev"] = int(from_rev) + except (ValueError, TypeError): + raise Error, "invalid revision number in svn log" + entry.changed.append(changed) + elif linesleft == 0: if line != logseparator: m = revheader.match(line) if m: @@ -294,7 +310,7 @@ class SVN: entry = SVNLogEntry(int(m.group("revision")), m.group("author"), timetuple) log.append(entry) - emptyline = 1 + changedheader = 1 else: entry.lines.append(line) linesleft -= 1 -- cgit v1.2.1