[PATCH] hgweb: refresh repository using URL not path (issue4323)

Gregory Szorc gregory.szorc at gmail.com
Mon Aug 18 14:18:49 CDT 2014


# HG changeset patch
# User Gregory Szorc <gregory.szorc at gmail.com>
# Date 1408389177 25200
#      Mon Aug 18 12:12:57 2014 -0700
# Node ID 36a6050a8083d5e7a2c1c78b1d9ec4dbef7ddeba
# Parent  8dda6f6ff564d8fe6ac7b8ce4c74eb9bfb5de14a
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.

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
@@ -109,9 +109,9 @@ class hgweb(object):
         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:
-            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))
             self.maxshortchanges = int(self.config("web", "maxshortchanges",
diff --git a/tests/test-hgweb-bundle.t b/tests/test-hgweb-bundle.t
new file mode 100644
--- /dev/null
+++ b/tests/test-hgweb-bundle.t
@@ -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
+  
+  


More information about the Mercurial-devel mailing list