diff --git a/commands/rc_monitor.py b/commands/rc_monitor.py index e7010e4..b2fe7e8 100644 --- a/commands/rc_monitor.py +++ b/commands/rc_monitor.py @@ -126,7 +126,7 @@ class RCMonitor(Command): try: result = site.api_query( action="query", prop="revisions", rvprop="ids|content", - revids=oldrev + "|" + newrev) + revids=(oldrev + "|" + newrev) if oldrev else newrev) except APIError: return None @@ -137,6 +137,14 @@ class RCMonitor(Command): if len(pages) != 1: return None revs = pages[0]["revisions"] + + if not oldrev: + try: + text = revs[0]["*"] + except (IndexError, KeyError): + return None + return _Diff(text.splitlines(), []) + try: oldtext = [rv["*"] for rv in revs if rv["revid"] == int(oldrev)][0] newtext = [rv["*"] for rv in revs if rv["revid"] == int(newrev)][0] @@ -172,9 +180,9 @@ class RCMonitor(Command): return None self._redirects[template] = redirects - search = "|".join("(template:)?" + re.escape(tmpl).replace(" ", "[ _]") + search = "|".join(r"(template:)?" + re.escape(tmpl).replace(r"\ ", r"[ _]") for tmpl in self._redirects[template]) - return re.compile(r"\{\{\s*" + search + r"\s*(\||\}\})", re.U|re.I) + return re.compile(r"\{\{\s*(" + search + r")\s*(\||\}\})", re.U|re.I) def _evaluate_csd(self, diff): """Evaluate a diff for CSD tagging.""" @@ -190,10 +198,12 @@ class RCMonitor(Command): """Return heuristic information about the given RC event.""" oldrev = re.search(r"(?:\?|&)oldid=(.*?)(?:&|$)", event.url) newrev = re.search(r"(?:\?|&)diff=(.*?)(?:&|$)", event.url) - if not oldrev or not newrev: + if not oldrev: return [] - - diff = self._get_diff(oldrev.group(1), newrev.group(1)) + if newrev: + diff = self._get_diff(oldrev.group(1), newrev.group(1)) + else: + diff = self._get_diff(None, oldrev.group(1)) if not diff: return []