Mercurial > public > mercurial-scm > hg
comparison mercurial/hgweb/hgweb_mod.py @ 18522:36549fa712da stable
hgweb: add a `web.view` to control filtering
This options add a new `web.view` to control filter level of hgweb.
This option have two purposes:
1) Allow fall back to unfiltered version in case a yet undetected by critical
bug is found in filtering after 2.5 release
2) People use hgweb as a local repoviewer. When they have secret changesets,
they wants to use "visible" filter not "served"
(modified by mpm, documentation deferred)
author | Pierre-Yves David <pierre-yves.david@logilab.fr> |
---|---|
date | Thu, 31 Jan 2013 19:56:55 +0100 |
parents | 0af2fe7b3274 |
children | 4e949b8e0930 50c922c1b514 |
comparison
equal
deleted
inserted
replaced
18521:0af2fe7b3274 | 18522:36549fa712da |
---|---|
5 # | 5 # |
6 # This software may be used and distributed according to the terms of the | 6 # This software may be used and distributed according to the terms of the |
7 # GNU General Public License version 2 or any later version. | 7 # GNU General Public License version 2 or any later version. |
8 | 8 |
9 import os | 9 import os |
10 from mercurial import ui, hg, hook, error, encoding, templater, util | 10 from mercurial import ui, hg, hook, error, encoding, templater, util, repoview |
11 from common import get_stat, ErrorResponse, permhooks, caching | 11 from common import get_stat, ErrorResponse, permhooks, caching |
12 from common import HTTP_OK, HTTP_NOT_MODIFIED, HTTP_BAD_REQUEST | 12 from common import HTTP_OK, HTTP_NOT_MODIFIED, HTTP_BAD_REQUEST |
13 from common import HTTP_NOT_FOUND, HTTP_SERVER_ERROR | 13 from common import HTTP_NOT_FOUND, HTTP_SERVER_ERROR |
14 from request import wsgirequest | 14 from request import wsgirequest |
15 import webcommands, protocol, webutil | 15 import webcommands, protocol, webutil |
59 u = ui.ui() | 59 u = ui.ui() |
60 self.repo = hg.repository(u, repo) | 60 self.repo = hg.repository(u, repo) |
61 else: | 61 else: |
62 self.repo = repo | 62 self.repo = repo |
63 | 63 |
64 self.repo = self.repo.filtered('served') | 64 self.repo = self._getview(self.repo) |
65 self.repo.ui.setconfig('ui', 'report_untrusted', 'off') | 65 self.repo.ui.setconfig('ui', 'report_untrusted', 'off') |
66 self.repo.ui.setconfig('ui', 'nontty', 'true') | 66 self.repo.ui.setconfig('ui', 'nontty', 'true') |
67 hook.redirect(True) | 67 hook.redirect(True) |
68 self.mtime = -1 | 68 self.mtime = -1 |
69 self.size = -1 | 69 self.size = -1 |
86 | 86 |
87 def configlist(self, section, name, default=None, untrusted=True): | 87 def configlist(self, section, name, default=None, untrusted=True): |
88 return self.repo.ui.configlist(section, name, default, | 88 return self.repo.ui.configlist(section, name, default, |
89 untrusted=untrusted) | 89 untrusted=untrusted) |
90 | 90 |
91 def _getview(self, repo): | |
92 viewconfig = self.config('web', 'view', 'served') | |
93 if viewconfig == 'all': | |
94 return repo.unfiltered() | |
95 elif viewconfig in repoview.filtertable: | |
96 return repo.filtered(viewconfig) | |
97 else: | |
98 return repo.filtered('served') | |
99 | |
91 def refresh(self, request=None): | 100 def refresh(self, request=None): |
92 if request: | 101 if request: |
93 self.repo.ui.environ = request.env | 102 self.repo.ui.environ = request.env |
94 st = get_stat(self.repo.spath) | 103 st = get_stat(self.repo.spath) |
95 # compare changelog size in addition to mtime to catch | 104 # compare changelog size in addition to mtime to catch |
96 # rollbacks made less than a second ago | 105 # rollbacks made less than a second ago |
97 if st.st_mtime != self.mtime or st.st_size != self.size: | 106 if st.st_mtime != self.mtime or st.st_size != self.size: |
98 self.mtime = st.st_mtime | 107 self.mtime = st.st_mtime |
99 self.size = st.st_size | 108 self.size = st.st_size |
100 self.repo = hg.repository(self.repo.ui, self.repo.root) | 109 self.repo = hg.repository(self.repo.ui, self.repo.root) |
101 self.repo = self.repo.filtered('served') | 110 self.repo = self._getview(self.repo) |
102 self.maxchanges = int(self.config("web", "maxchanges", 10)) | 111 self.maxchanges = int(self.config("web", "maxchanges", 10)) |
103 self.stripecount = int(self.config("web", "stripes", 1)) | 112 self.stripecount = int(self.config("web", "stripes", 1)) |
104 self.maxshortchanges = int(self.config("web", "maxshortchanges", | 113 self.maxshortchanges = int(self.config("web", "maxshortchanges", |
105 60)) | 114 60)) |
106 self.maxfiles = int(self.config("web", "maxfiles", 10)) | 115 self.maxfiles = int(self.config("web", "maxfiles", 10)) |