~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to loggerhead/controllers/annotate_ui.py

  • Committer: Robey Pointer
  • Date: 2007-01-14 05:43:15 UTC
  • Revision ID: robey@lag.net-20070114054315-qorf24nc9txv1umi
new ignores

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18
18
#
19
19
 
 
20
import datetime
 
21
import logging
20
22
import os
21
23
import posixpath
22
 
 
23
 
from paste.httpexceptions import HTTPBadRequest
24
 
 
25
 
from loggerhead.controllers import TemplatedBranchView
 
24
import textwrap
 
25
import time
 
26
 
 
27
import turbogears
 
28
from cherrypy import HTTPRedirect, session
 
29
 
26
30
from loggerhead import util
27
31
 
28
32
 
 
33
log = logging.getLogger("loggerhead.controllers")
 
34
 
29
35
def dirname(path):
30
36
    while path.endswith('/'):
31
37
        path = path[:-1]
32
38
    path = posixpath.dirname(path)
33
39
    return path
34
40
 
35
 
class AnnotateUI (TemplatedBranchView):
36
 
 
37
 
    template_path = 'loggerhead.templates.annotate'
38
 
 
39
 
    def get_values(self, h, args, kw, headers):
 
41
        
 
42
class AnnotateUI (object):
 
43
 
 
44
    def __init__(self, branch):
 
45
        # BranchView object
 
46
        self._branch = branch
 
47
        self.log = branch.log
 
48
 
 
49
    @turbogears.expose(html='loggerhead.templates.annotate')
 
50
    def default(self, *args, **kw):
 
51
        z = time.time()
 
52
        h = self._branch.get_history()
 
53
        
40
54
        if len(args) > 0:
41
55
            revid = h.fix_revid(args[0])
42
56
        else:
43
 
            revid = h.last_revid
44
 
 
45
 
        path = None
46
 
        if len(args) > 1:
47
 
            path = '/'.join(args[1:])
48
 
            if not path.startswith('/'):
49
 
                path = '/' + path
50
 
 
 
57
            revid = None
 
58
        
51
59
        file_id = kw.get('file_id', None)
52
 
        if (file_id is None) and (path is None):
53
 
            raise HTTPBadRequest('No file_id or filename provided to annotate')
54
 
 
55
60
        if file_id is None:
56
 
            file_id = h.get_file_id(revid, path)
 
61
            raise HTTPRedirect(self._branch.url('/changes'))
57
62
 
 
63
        try:
 
64
            revid_list, revid = h.get_file_view(revid, file_id)
 
65
        except Exception, x:
 
66
            self.log.error('Exception fetching changes: %s' % (x,))
 
67
            util.log_exception(self.log)
 
68
            raise HTTPRedirect(self._branch.url('/changes'))
 
69
            
58
70
        # no navbar for revisions
59
71
        navigation = util.Container()
60
 
 
61
 
        if path is None:
62
 
            path = h.get_path(revid, file_id)
 
72
        
 
73
        path = h.get_path(revid, file_id)
63
74
        filename = os.path.basename(path)
64
75
 
65
 
        return {
 
76
        vals = {
 
77
            'branch': self._branch,
 
78
            'util': util,
66
79
            'revid': revid,
67
80
            'file_id': file_id,
68
81
            'path': path,
69
82
            'filename': filename,
 
83
            'history': h,
70
84
            'navigation': navigation,
71
85
            'change': h.get_changes([ revid ])[0],
72
86
            'contents': list(h.annotate_file(file_id, revid)),
73
87
        }
 
88
        h.flush_cache()
 
89
        self.log.info('/annotate: %r secs' % (time.time() - z,))
 
90
        return vals