From b062a30d76a61eba0e3a022f5ea79b79a95b3fcb Mon Sep 17 00:00:00 2001 From: rey4 Date: Sat, 25 Sep 2004 03:45:20 +0000 Subject: [PATCH] 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 --- lib/viewcvs.py | 55 +++++++++++++++++--------------------------------- 1 file changed, 19 insertions(+), 36 deletions(-) diff --git a/lib/viewcvs.py b/lib/viewcvs.py index 3e15ddb1..ddbb7707 100644 --- a/lib/viewcvs.py +++ b/lib/viewcvs.py @@ -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.'