--- a/mercurial/commands.py Fri Sep 26 02:19:48 2014 +0200
+++ b/mercurial/commands.py Mon Sep 29 17:23:38 2014 -0500
@@ -4385,7 +4385,7 @@
hg log -T list
- - check if a given changeset is included is a tagged release::
+ - check if a given changeset is included in a tagged release::
hg log -r "a21ccf and ancestor(1.9)"
--- a/mercurial/hgweb/common.py Fri Sep 26 02:19:48 2014 +0200
+++ b/mercurial/hgweb/common.py Mon Sep 29 17:23:38 2014 -0500
@@ -112,9 +112,9 @@
def statusmessage(code, message=None):
return '%d %s' % (code, message or _statusmessage(code))
-def get_stat(spath):
- """stat changelog if it exists, spath otherwise"""
- cl_path = os.path.join(spath, "00changelog.i")
+def get_stat(spath, fn="00changelog.i"):
+ """stat fn (00changelog.i by default) if it exists, spath otherwise"""
+ cl_path = os.path.join(spath, fn)
if os.path.exists(cl_path):
return os.stat(cl_path)
else:
--- a/mercurial/hgweb/hgweb_mod.py Fri Sep 26 02:19:48 2014 +0200
+++ b/mercurial/hgweb/hgweb_mod.py Mon Sep 29 17:23:38 2014 -0500
@@ -71,8 +71,8 @@
r.baseui.setconfig('ui', 'nontty', 'true', 'hgweb')
self.repo = r
hook.redirect(True)
+ self.repostate = ((-1, -1), (-1, -1))
self.mtime = -1
- self.size = -1
self.reponame = name
self.archives = 'zip', 'gz', 'bz2'
self.stripecount = 1
@@ -107,9 +107,12 @@
def refresh(self, request=None):
st = get_stat(self.repo.spath)
- # compare changelog size in addition to mtime to catch
- # rollbacks made less than a second ago
- if st.st_mtime != self.mtime or st.st_size != self.size:
+ pst = get_stat(self.repo.spath, 'phaseroots')
+ # changelog mtime and size, phaseroots mtime and size
+ repostate = ((st.st_mtime, st.st_size), (pst.st_mtime, pst.st_size))
+ # we need to compare file size in addition to mtime to catch
+ # changes made less than a second ago
+ if repostate != self.repostate:
r = hg.repository(self.repo.baseui, self.repo.url())
self.repo = self._getview(r)
self.maxchanges = int(self.config("web", "maxchanges", 10))
@@ -121,8 +124,9 @@
encoding.encoding = self.config("web", "encoding",
encoding.encoding)
# update these last to avoid threads seeing empty settings
+ self.repostate = repostate
+ # mtime is needed for ETag
self.mtime = st.st_mtime
- self.size = st.st_size
if request:
self.repo.ui.environ = request.env
--- a/tests/test-hgweb.t Fri Sep 26 02:19:48 2014 +0200
+++ b/tests/test-hgweb.t Mon Sep 29 17:23:38 2014 -0500
@@ -531,6 +531,50 @@
304 Not Modified
+phase changes are refreshed (issue4061)
+
+ $ echo bar >> foo
+ $ hg ci -msecret --secret
+ $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT 'log?style=raw'
+ 200 Script output follows
+
+
+ # HG changelog
+ # Node ID 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
+
+ changeset: 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
+ revision: 0
+ user: test
+ date: Thu, 01 Jan 1970 00:00:00 +0000
+ summary: base
+ branch: default
+ tag: tip
+
+
+ $ hg phase --draft tip
+ $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT 'log?style=raw'
+ 200 Script output follows
+
+
+ # HG changelog
+ # Node ID a084749e708a9c4c0a5b652a2a446322ce290e04
+
+ changeset: a084749e708a9c4c0a5b652a2a446322ce290e04
+ revision: 1
+ user: test
+ date: Thu, 01 Jan 1970 00:00:00 +0000
+ summary: secret
+ branch: default
+ tag: tip
+
+ changeset: 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
+ revision: 0
+ user: test
+ date: Thu, 01 Jan 1970 00:00:00 +0000
+ summary: base
+
+
+
errors
$ cat errors.log