codereview: work better with mq

R=rsc
CC=golang-dev
https://golang.org/cl/1140043
diff --git a/lib/codereview/codereview.py b/lib/codereview/codereview.py
index 9af28cf..4b1797a 100644
--- a/lib/codereview/codereview.py
+++ b/lib/codereview/codereview.py
@@ -533,11 +533,18 @@
 #######################################################################
 # Mercurial helper functions
 
+# Get effective change nodes taking into account applied MQ patches
+def effective_revpair(repo):
+    try:
+	return cmdutil.revpair(repo, ['qparent'])
+    except:
+	return cmdutil.revpair(repo, None)
+
 # Return list of changed files in repository that match pats.
 def ChangedFiles(ui, repo, pats, opts):
 	# Find list of files being operated on.
 	matcher = cmdutil.match(repo, pats, opts)
-	node1, node2 = cmdutil.revpair(repo, None)
+	node1, node2 = effective_revpair(repo)
 	modified, added, removed = repo.status(node1, node2, matcher)[:3]
 	l = modified + added + removed
 	l.sort()
@@ -546,7 +553,7 @@
 # Return list of changed files in repository that match pats and still exist.
 def ChangedExistingFiles(ui, repo, pats, opts):
 	matcher = cmdutil.match(repo, pats, opts)
-	node1, node2 = cmdutil.revpair(repo, None)
+	node1, node2 = effective_revpair(repo)
 	modified, added, _ = repo.status(node1, node2, matcher)[:3]
 	l = modified + added
 	l.sort()
@@ -2828,8 +2835,11 @@
     if self.options.revision:
       self.base_rev = self.options.revision
     else:
-      self.base_rev = RunShell(["hg", "parent", "-q"]).split(':')[1].strip()
-
+      mqparent, err = RunShellWithReturnCode(['hg', 'log', '--rev', 'qparent', '--template={node}'])
+      if not err:
+        self.base_rev = mqparent
+      else:
+        self.base_rev = RunShell(["hg", "parent", "-q"]).split(':')[1].strip()
   def _GetRelPath(self, filename):
     """Get relative path of a file according to the current directory,
     given its logical path in the repo."""