88 static = os.path.join(templater.templatepath(), 'static') |
87 static = os.path.join(templater.templatepath(), 'static') |
89 if virtual.startswith('static/'): |
88 if virtual.startswith('static/'): |
90 fname = virtual[7:] |
89 fname = virtual[7:] |
91 else: |
90 else: |
92 fname = req.form['static'][0] |
91 fname = req.form['static'][0] |
93 req.write(staticfile(static, fname, req)) |
92 return staticfile(static, fname, req), |
94 return |
|
95 |
93 |
96 # top-level index |
94 # top-level index |
97 elif not virtual: |
95 elif not virtual: |
98 req.respond(HTTP_OK, ctype) |
96 req.respond(HTTP_OK, ctype) |
99 req.write(self.makeindex(req, tmpl)) |
97 return ''.join(self.makeindex(req, tmpl)), |
100 return |
|
101 |
98 |
102 # nested indexes and hgwebs |
99 # nested indexes and hgwebs |
103 |
100 |
104 repos = dict(self.repos) |
101 repos = dict(self.repos) |
105 while virtual: |
102 while virtual: |
106 real = repos.get(virtual) |
103 real = repos.get(virtual) |
107 if real: |
104 if real: |
108 req.env['REPO_NAME'] = virtual |
105 req.env['REPO_NAME'] = virtual |
109 try: |
106 try: |
110 repo = hg.repository(self.parentui, real) |
107 repo = hg.repository(self.parentui, real) |
111 hgweb(repo).run_wsgi(req) |
108 return hgweb(repo).run_wsgi(req) |
112 return |
|
113 except IOError, inst: |
109 except IOError, inst: |
114 msg = inst.strerror |
110 msg = inst.strerror |
115 raise ErrorResponse(HTTP_SERVER_ERROR, msg) |
111 raise ErrorResponse(HTTP_SERVER_ERROR, msg) |
116 except RepoError, inst: |
112 except RepoError, inst: |
117 raise ErrorResponse(HTTP_SERVER_ERROR, str(inst)) |
113 raise ErrorResponse(HTTP_SERVER_ERROR, str(inst)) |
118 |
114 |
119 # browse subdirectories |
115 # browse subdirectories |
120 subdir = virtual + '/' |
116 subdir = virtual + '/' |
121 if [r for r in repos if r.startswith(subdir)]: |
117 if [r for r in repos if r.startswith(subdir)]: |
122 req.respond(HTTP_OK, ctype) |
118 req.respond(HTTP_OK, ctype) |
123 req.write(self.makeindex(req, tmpl, subdir)) |
119 return ''.join(self.makeindex(req, tmpl, subdir)), |
124 return |
|
125 |
120 |
126 up = virtual.rfind('/') |
121 up = virtual.rfind('/') |
127 if up < 0: |
122 if up < 0: |
128 break |
123 break |
129 virtual = virtual[:up] |
124 virtual = virtual[:up] |
130 |
125 |
131 # prefixes not found |
126 # prefixes not found |
132 req.respond(HTTP_NOT_FOUND, ctype) |
127 req.respond(HTTP_NOT_FOUND, ctype) |
133 req.write(tmpl("notfound", repo=virtual)) |
128 return ''.join(tmpl("notfound", repo=virtual)), |
134 |
129 |
135 except ErrorResponse, err: |
130 except ErrorResponse, err: |
136 req.respond(err.code, ctype) |
131 req.respond(err.code, ctype) |
137 req.write(tmpl('error', error=err.message or '')) |
132 return ''.join(tmpl('error', error=err.message or '')), |
138 finally: |
133 finally: |
139 tmpl = None |
134 tmpl = None |
140 |
135 |
141 def makeindex(self, req, tmpl, subdir=""): |
136 def makeindex(self, req, tmpl, subdir=""): |
142 |
137 |