# HG changeset patch # User Matt Mackall # Date 2014-09-29 22:23:38 # Node ID 939ce500c92a3dcc0e10815242361ff70a6fcae9 # Parent d7f7f1860f00a74d755ef0b26bc8e468e7c358fb # Parent a111e460318af49aeb6578cf142a63426c5e764d merge with stable diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -4385,7 +4385,7 @@ def log(ui, repo, *pats, **opts): 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)" diff --git a/mercurial/hgweb/common.py b/mercurial/hgweb/common.py --- a/mercurial/hgweb/common.py +++ b/mercurial/hgweb/common.py @@ -112,9 +112,9 @@ def _statusmessage(code): 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: diff --git a/mercurial/hgweb/hgweb_mod.py b/mercurial/hgweb/hgweb_mod.py --- a/mercurial/hgweb/hgweb_mod.py +++ b/mercurial/hgweb/hgweb_mod.py @@ -71,8 +71,8 @@ class hgweb(object): 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 @@ class hgweb(object): 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 @@ class hgweb(object): 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 diff --git a/tests/test-hgweb.t b/tests/test-hgweb.t --- a/tests/test-hgweb.t +++ b/tests/test-hgweb.t @@ -531,6 +531,50 @@ static file 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