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))