179 finally: |
179 finally: |
180 lock.release() |
180 lock.release() |
181 except ValueError, inst: |
181 except ValueError, inst: |
182 raise ErrorResponse(HTTP_OK, inst) |
182 raise ErrorResponse(HTTP_OK, inst) |
183 except (OSError, IOError), inst: |
183 except (OSError, IOError), inst: |
184 filename = getattr(inst, 'filename', '') |
|
185 # Don't send our filesystem layout to the client |
|
186 if filename.startswith(repo.root): |
|
187 filename = filename[len(repo.root)+1:] |
|
188 else: |
|
189 filename = '' |
|
190 error = getattr(inst, 'strerror', 'Unknown error') |
184 error = getattr(inst, 'strerror', 'Unknown error') |
191 if inst.errno == errno.ENOENT: |
185 if inst.errno == errno.ENOENT: |
192 code = HTTP_NOT_FOUND |
186 code = HTTP_NOT_FOUND |
193 else: |
187 else: |
194 code = HTTP_SERVER_ERROR |
188 code = HTTP_SERVER_ERROR |
195 raise ErrorResponse(code, '%s: %s' % (error, filename)) |
189 filename = getattr(inst, 'filename', '') |
|
190 # Don't send our filesystem layout to the client |
|
191 if filename and filename.startswith(repo.root): |
|
192 filename = filename[len(repo.root)+1:] |
|
193 text = '%s: %s' % (error, filename) |
|
194 else: |
|
195 text = error.replace(repo.root + os.path.sep, '') |
|
196 raise ErrorResponse(code, text) |
196 finally: |
197 finally: |
197 fp.close() |
198 fp.close() |
198 os.unlink(tempname) |
199 os.unlink(tempname) |
199 |
200 |
200 def stream_out(repo, req): |
201 def stream_out(repo, req): |