~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to loggerhead/controllers/annotate_ui.py

  • Committer: Robey Pointer
  • Date: 2006-12-15 11:10:23 UTC
  • Revision ID: robey@lag.net-20061215111023-brrb46658dljz9x4
fix a couple of bugs:
- merged in/from lines should be broken up on multiple lines (some of mpool's
  bzr.dev revisions have dozens of merged-ins)
- navigation footer shouldn't be displayed if there's only 1 page
- changes list by file wasn't calculated correctly

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
 
 
36
 
class AnnotateUI (TemplatedBranchView):
37
 
 
38
 
    template_path = 'loggerhead.templates.annotate'
39
 
 
40
 
    def get_values(self, h, args, kw, response):
 
41
        
 
42
class AnnotateUI (object):
 
43
 
 
44
    @turbogears.expose(html='loggerhead.templates.annotate')
 
45
    def default(self, *args, **kw):
 
46
        z = time.time()
 
47
        h = util.get_history()
 
48
        
41
49
        if len(args) > 0:
42
50
            revid = h.fix_revid(args[0])
43
51
        else:
44
 
            revid = h.last_revid
45
 
 
46
 
        path = None
47
 
        if len(args) > 1:
48
 
            path = '/'.join(args[1:])
49
 
            if not path.startswith('/'):
50
 
                path = '/' + path
51
 
 
52
 
        file_id = kw.get('file_id', None)
53
 
        if (file_id is None) and (path is None):
54
 
            raise HTTPBadRequest('No file_id or filename provided to annotate')
55
 
 
56
 
        if file_id is None:
57
 
            file_id = h.get_file_id(revid, path)
58
 
 
 
52
            revid = None
 
53
        
 
54
        path = kw.get('path', None)
 
55
        if (path == '/') or (path == '') or (path is None):
 
56
            raise HTTPRedirect(turbogears.url('/changes'))
 
57
 
 
58
        try:
 
59
            revlist, revid = h.get_navigation(revid, path)
 
60
            file_id = h.get_inventory(revid).path2id(path)
 
61
        except Exception, x:
 
62
            log.error('Exception fetching changes: %r, %s' % (x, x))
 
63
            raise HTTPRedirect(turbogears.url('/changes'))
 
64
            
59
65
        # no navbar for revisions
60
66
        navigation = util.Container()
61
67
 
62
 
        if path is None:
63
 
            path = h.get_path(revid, file_id)
64
 
        filename = os.path.basename(path)
65
 
 
66
 
        return {
 
68
        vals = {
 
69
            'branch_name': util.get_config().get('branch_name'),
 
70
            'util': util,
67
71
            'revid': revid,
68
 
            'file_id': file_id,
69
72
            'path': path,
70
 
            'filename': filename,
 
73
            'history': h,
71
74
            'navigation': navigation,
72
 
            'change': h.get_changes([ revid ])[0],
 
75
            'change': h.get_change(revid),
73
76
            'contents': list(h.annotate_file(file_id, revid)),
74
77
        }
 
78
        h.flush_cache()
 
79
        log.info('/annotate: %r secs' % (time.time() - z,))
 
80
        return vals