6 # This software may be used and distributed according to the terms |
6 # This software may be used and distributed according to the terms |
7 # of the GNU General Public License, incorporated herein by reference. |
7 # of the GNU General Public License, incorporated herein by reference. |
8 |
8 |
9 import os, mimetypes, re |
9 import os, mimetypes, re |
10 from mercurial.node import hex, nullid, short |
10 from mercurial.node import hex, nullid, short |
|
11 from mercurial.repo import RepoError |
11 from mercurial import mdiff, ui, hg, util, archival, patch, hook |
12 from mercurial import mdiff, ui, hg, util, archival, patch, hook |
12 from mercurial import revlog, templater, templatefilters, changegroup |
13 from mercurial import revlog, templater, templatefilters, changegroup |
13 from common import get_mtime, style_map, paritygen, countgen, get_contact |
14 from common import get_mtime, style_map, paritygen, countgen, get_contact |
14 from common import ErrorResponse |
15 from common import ErrorResponse |
15 from common import HTTP_OK, HTTP_BAD_REQUEST, HTTP_NOT_FOUND, HTTP_SERVER_ERROR |
16 from common import HTTP_OK, HTTP_BAD_REQUEST, HTTP_NOT_FOUND, HTTP_SERVER_ERROR |
246 del tmpl |
247 del tmpl |
247 |
248 |
248 except revlog.LookupError, err: |
249 except revlog.LookupError, err: |
249 req.respond(HTTP_NOT_FOUND, ctype) |
250 req.respond(HTTP_NOT_FOUND, ctype) |
250 req.write(tmpl('error', error='revision not found: %s' % err.name)) |
251 req.write(tmpl('error', error='revision not found: %s' % err.name)) |
251 except (hg.RepoError, revlog.RevlogError), inst: |
252 except (RepoError, revlog.RevlogError), inst: |
252 req.respond(HTTP_SERVER_ERROR, ctype) |
253 req.respond(HTTP_SERVER_ERROR, ctype) |
253 req.write(tmpl('error', error=str(inst))) |
254 req.write(tmpl('error', error=str(inst))) |
254 except ErrorResponse, inst: |
255 except ErrorResponse, inst: |
255 req.respond(inst.code, ctype) |
256 req.respond(inst.code, ctype) |
256 req.write(tmpl('error', error=inst.message)) |
257 req.write(tmpl('error', error=inst.message)) |
913 else: |
914 else: |
914 changeid = self.repo.changelog.count() - 1 |
915 changeid = self.repo.changelog.count() - 1 |
915 |
916 |
916 try: |
917 try: |
917 ctx = self.repo.changectx(changeid) |
918 ctx = self.repo.changectx(changeid) |
918 except hg.RepoError: |
919 except RepoError: |
919 man = self.repo.manifest |
920 man = self.repo.manifest |
920 mn = man.lookup(changeid) |
921 mn = man.lookup(changeid) |
921 ctx = self.repo.changectx(man.linkrev(mn)) |
922 ctx = self.repo.changectx(man.linkrev(mn)) |
922 |
923 |
923 return ctx |
924 return ctx |
929 else: |
930 else: |
930 changeid = req.form['filenode'][0] |
931 changeid = req.form['filenode'][0] |
931 try: |
932 try: |
932 ctx = self.repo.changectx(changeid) |
933 ctx = self.repo.changectx(changeid) |
933 fctx = ctx.filectx(path) |
934 fctx = ctx.filectx(path) |
934 except hg.RepoError: |
935 except RepoError: |
935 fctx = self.repo.filectx(path, fileid=changeid) |
936 fctx = self.repo.filectx(path, fileid=changeid) |
936 |
937 |
937 return fctx |
938 return fctx |
938 |
939 |
939 def check_perm(self, req, op, default): |
940 def check_perm(self, req, op, default): |