hgweb: refresh repository using URL not path (issue4323)
hgweb detects out-of-date repository instances (using a highly
suspect mechanism that should probably be fixed) and obtains a new
repository object if needed.
This patch changes the repository object copy to use the repo URL
(instead of path). This preserves more information about the source
repository and allows bundles to be served through hgweb.
A test verifying that bundles can now be served properly via
`hg serve` has been added.
--- a/mercurial/hgweb/hgweb_mod.py Tue Aug 19 10:01:06 2014 -0700
+++ b/mercurial/hgweb/hgweb_mod.py Mon Aug 18 12:12:57 2014 -0700
@@ -110,7 +110,7 @@
# 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:
- r = hg.repository(self.repo.baseui, self.repo.root)
+ r = hg.repository(self.repo.baseui, self.repo.url())
self.repo = self._getview(r)
self.maxchanges = int(self.config("web", "maxchanges", 10))
self.stripecount = int(self.config("web", "stripes", 1))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-hgweb-bundle.t Mon Aug 18 12:12:57 2014 -0700
@@ -0,0 +1,37 @@
+#require serve
+
+ $ hg init server
+ $ cd server
+ $ cat >> .hg/hgrc << EOF
+ > [extensions]
+ > strip=
+ > EOF
+
+ $ echo 1 > foo
+ $ hg commit -A -m 'first'
+ adding foo
+ $ echo 2 > bar
+ $ hg commit -A -m 'second'
+ adding bar
+
+Produce a bundle to use
+
+ $ hg strip -r 1
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ saved backup bundle to $TESTTMP/server/.hg/strip-backup/ed602e697e0f-backup.hg (glob)
+
+Serve from a bundle file
+
+ $ hg serve -R .hg/strip-backup/ed602e697e0f-backup.hg -d -p $HGPORT --pid-file=hg.pid
+ $ cat hg.pid >> $DAEMON_PIDS
+
+Ensure we're serving from the bundle
+
+ $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT 'file/tip/?style=raw')
+ 200 Script output follows
+
+
+ -rw-r--r-- 2 bar
+ -rw-r--r-- 2 foo
+
+