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

Augie Fackler raf at durin42.com
Mon Aug 18 17:30:13 CDT 2014


On Mon, Aug 18, 2014 at 12:18:49PM -0700, Gregory Szorc wrote:
> # 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)

Queued, thanks.

>
> 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
> +
> +
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list