Simplify handling of roots in root_as_url mode.

* lib/viewcvs.py
  (Request.run_viewcvs):
    don't do blind redirects when we have a "root" parameter in
    root_as_url mode because it can lead to multiple redirects
    and redirects to invalid urls

    don't even try to interpret non-root_as_url url's in
    root_as_url mode when they don't specify an explicit
    root. It can't be done reliably and there's little
    value in it anyway


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@929 8cb11bc2-c004-0410-86c3-e597b4017df7
remotes/tags/1.0.0-rc1
rey4 2004-09-25 03:45:20 +00:00
parent 38321990ae
commit b062a30d76
1 changed files with 19 additions and 36 deletions

View File

@ -159,9 +159,21 @@ class Request:
self.rootpath = None # physical path to current root
self.pathtype = None # type of path, either vclib.FILE or vclib.DIR
self.where = None # path to file or directory in current root
self.query_dict = None # validated and cleaned up query options
self.query_dict = {} # validated and cleaned up query options
self.path_parts = None # for convenience, equals where.split('/')
# Process the query params
for name, values in self.server.params().items():
# patch up old queries that use 'cvsroot' to look like they used 'root'
if name == 'cvsroot':
name = 'root'
# validate the parameter
_validate_param(name, values[0])
# if we're here, then the parameter is okay
self.query_dict[name] = values[0]
# Process PATH_INFO component of query string
path_info = self.server.getenv('PATH_INFO', '')
@ -179,46 +191,17 @@ class Request:
path_parts.pop(0)
self.view_func = view_checkout
# see if we are treating the first path component (after any
# magic) as the repository root. if there are parts, and the
# first component is a named root, use it as such. else, we'll be
# falling back to the default root a little later.
if cfg.options.root_as_url_component and path_parts \
and list_roots(cfg).has_key(path_parts[0]):
# Figure out root name
self.rootname = self.query_dict.get('root')
if self.rootname is None:
if cfg.options.root_as_url_component and path_parts:
self.rootname = path_parts.pop(0)
else:
self.rootname = cfg.general.default_root
self.where = string.join(path_parts, '/')
self.path_parts = path_parts
# Done with PATH_INFO, now parse the query params
self.query_dict = {}
for name, values in self.server.params().items():
# patch up old queries that use 'cvsroot' to look like they used 'root'
if name == 'cvsroot':
name = 'root'
# validate the parameter
_validate_param(name, values[0])
# if we're here, then the parameter is okay
self.query_dict[name] = values[0]
# Special handling for root parameter
root_param = self.query_dict.get('root', None)
if root_param:
self.rootname = root_param
# in root_as_url_component mode, if we see a root in the query
# data, we'll redirect to the new url schema. it may fail, but
# at least we tried.
if cfg.options.root_as_url_component:
del self.query_dict['root']
self.server.redirect(self.get_url())
elif self.rootname is None:
self.rootname = cfg.general.default_root
# If this is a forbidden path, stop now
if path_parts and cfg.is_forbidden(path_parts[0]):
raise debug.ViewCVSException('Access to "%s" is forbidden.'