hgweb: avoid config object race with hgwebdir (issue4326) stable
authorMatt Mackall <mpm@selenic.com>
Sun, 10 Aug 2014 13:53:36 -0500
branchstable
changeset 22087 af62f0280a76
parent 22086 68f2f8bfe9ae
child 22088 a82c5975095d
child 22089 1e392c63fb76
hgweb: avoid config object race with hgwebdir (issue4326) Turns out hgwebdir passes full repo objects to each hgweb request instance, but with a shared baseui. We explicitly break the sharing.
mercurial/hgweb/hgweb_mod.py
mercurial/hgweb/hgwebdir_mod.py
--- a/mercurial/hgweb/hgweb_mod.py	Sat Aug 09 16:15:52 2014 -0500
+++ b/mercurial/hgweb/hgweb_mod.py	Sun Aug 10 13:53:36 2014 -0500
@@ -61,6 +61,7 @@
                 u = ui.ui()
             r = hg.repository(u, repo)
         else:
+            # we trust caller to give us a private copy
             r = repo
 
         r = self._getview(r)
--- a/mercurial/hgweb/hgwebdir_mod.py	Sat Aug 09 16:15:52 2014 -0500
+++ b/mercurial/hgweb/hgwebdir_mod.py	Sun Aug 10 13:53:36 2014 -0500
@@ -214,7 +214,8 @@
                     if real:
                         req.env['REPO_NAME'] = virtualrepo
                         try:
-                            repo = hg.repository(self.ui, real)
+                            # ensure caller gets private copy of ui
+                            repo = hg.repository(self.ui.copy(), real)
                             return hgweb(repo).run_wsgi(req)
                         except IOError, inst:
                             msg = inst.strerror