mq: comply with filtering when injecting fake tags (
issue3812)
mq was injecting fake tags whenever the revisions were accessible
to the filtering level.
This issue impacts hgweb since it's common to have "secret" mq
patches. As secret changesets are filtered by hgweb, the tags
computation could break.
--- a/hgext/mq.py Fri Feb 08 05:36:08 2013 -0800
+++ b/hgext/mq.py Mon Feb 11 16:21:48 2013 +0100
@@ -3454,6 +3454,12 @@
% short(mqtags[-1][0]))
return result
+ # do not add fake tags for filtered revisions
+ included = self.changelog.hasnode
+ mqtags = [mqt for mqt in mqtags if included(mqt[0])]
+ if not mqtags:
+ return result
+
mqtags.append((mqtags[-1][0], 'qtip'))
mqtags.append((mqtags[0][0], 'qbase'))
mqtags.append((self.changelog.parents(mqtags[0][0])[0], 'qparent'))
--- a/tests/test-mq.t Fri Feb 08 05:36:08 2013 -0800
+++ b/tests/test-mq.t Mon Feb 11 16:21:48 2013 +0100
@@ -1555,4 +1555,24 @@
1: secret
2: secret
+Test that secret mq patch does not break hgweb
+
+ $ cat > hgweb.cgi <<HGWEB
+ > from mercurial import demandimport; demandimport.enable()
+ > from mercurial.hgweb import hgweb
+ > from mercurial.hgweb import wsgicgi
+ > import cgitb
+ > cgitb.enable()
+ > app = hgweb('.', 'test')
+ > wsgicgi.launch(app)
+ > HGWEB
+ $ . "$TESTDIR/cgienv"
+ $ PATH_INFO=/tags; export PATH_INFO
+ $ QUERY_STRING='style=raw'
+ $ python hgweb.cgi | grep -v ETag:
+ Status: 200 Script output follows\r (esc)
+ Content-Type: text/plain; charset=ascii\r (esc)
+ \r (esc)
+ tip [0-9a-f]{40} (re)
+
$ cd ..