| @@ -126,7 +126,7 @@ class RCMonitor(Command): | |||||
| try: | try: | ||||
| result = site.api_query( | result = site.api_query( | ||||
| action="query", prop="revisions", rvprop="ids|content", | action="query", prop="revisions", rvprop="ids|content", | ||||
| revids=oldrev + "|" + newrev) | |||||
| revids=(oldrev + "|" + newrev) if oldrev else newrev) | |||||
| except APIError: | except APIError: | ||||
| return None | return None | ||||
| @@ -137,6 +137,14 @@ class RCMonitor(Command): | |||||
| if len(pages) != 1: | if len(pages) != 1: | ||||
| return None | return None | ||||
| revs = pages[0]["revisions"] | revs = pages[0]["revisions"] | ||||
| if not oldrev: | |||||
| try: | |||||
| text = revs[0]["*"] | |||||
| except (IndexError, KeyError): | |||||
| return None | |||||
| return _Diff(text.splitlines(), []) | |||||
| try: | try: | ||||
| oldtext = [rv["*"] for rv in revs if rv["revid"] == int(oldrev)][0] | oldtext = [rv["*"] for rv in revs if rv["revid"] == int(oldrev)][0] | ||||
| newtext = [rv["*"] for rv in revs if rv["revid"] == int(newrev)][0] | newtext = [rv["*"] for rv in revs if rv["revid"] == int(newrev)][0] | ||||
| @@ -172,9 +180,9 @@ class RCMonitor(Command): | |||||
| return None | return None | ||||
| self._redirects[template] = redirects | 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]) | 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): | def _evaluate_csd(self, diff): | ||||
| """Evaluate a diff for CSD tagging.""" | """Evaluate a diff for CSD tagging.""" | ||||
| @@ -190,10 +198,12 @@ class RCMonitor(Command): | |||||
| """Return heuristic information about the given RC event.""" | """Return heuristic information about the given RC event.""" | ||||
| oldrev = re.search(r"(?:\?|&)oldid=(.*?)(?:&|$)", event.url) | oldrev = re.search(r"(?:\?|&)oldid=(.*?)(?:&|$)", event.url) | ||||
| newrev = re.search(r"(?:\?|&)diff=(.*?)(?:&|$)", event.url) | newrev = re.search(r"(?:\?|&)diff=(.*?)(?:&|$)", event.url) | ||||
| if not oldrev or not newrev: | |||||
| if not oldrev: | |||||
| return [] | 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: | if not diff: | ||||
| return [] | return [] | ||||