~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to loggerhead/controllers/inventory_ui.py

  • Committer: Michael Hudson
  • Date: 2007-05-29 12:51:34 UTC
  • mfrom: (128.1.11 testing)
  • Revision ID: michael.hudson@canonical.com-20070529125134-fffimo5o8ynk64uu
merge from my testing branch:
 includes unit tests, but more interestingly the fix for #116869

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
20
21
import logging
 
22
import os
21
23
import posixpath
22
 
 
23
 
from paste.httpexceptions import HTTPServerError
24
 
 
25
 
from bzrlib.revision import is_null as is_null_rev
 
24
import textwrap
 
25
import time
 
26
 
 
27
import turbogears
 
28
from cherrypy import InternalError, session
26
29
 
27
30
from loggerhead import util
28
 
from loggerhead.controllers import TemplatedBranchView
29
31
 
30
32
 
31
33
log = logging.getLogger("loggerhead.controllers")
36
38
    path = posixpath.dirname(path)
37
39
    return path
38
40
 
39
 
 
40
 
class InventoryUI(TemplatedBranchView):
41
 
 
42
 
    template_path = 'loggerhead.templates.inventory'
43
 
 
44
 
    def get_values(self, h, args, kw, headers):
 
41
        
 
42
class InventoryUI (object):
 
43
 
 
44
    def __init__(self, branch):
 
45
        # BranchView object
 
46
        self._branch = branch
 
47
        self.log = branch.log
 
48
 
 
49
    @util.strip_whitespace
 
50
    @turbogears.expose(html='loggerhead.templates.inventory')
 
51
    def default(self, *args, **kw):
 
52
        z = time.time()
 
53
        h = self._branch.get_history()
 
54
        util.set_context(kw)
 
55
        
45
56
        if len(args) > 0:
46
57
            revid = h.fix_revid(args[0])
47
58
        else:
48
 
            revid = h.last_revid
 
59
            revid = None
 
60
        
 
61
        file_id = kw.get('file_id', None)
 
62
        sort_type = kw.get('sort', None)
 
63
 
 
64
        try:
 
65
            revid_list, revid = h.get_file_view(revid, file_id)
 
66
            rev = h.get_revision(revid)
 
67
            inv = h.get_inventory(revid)
 
68
        except:
 
69
            self.log.exception('Exception fetching changes')
 
70
            raise InternalError('Could not fetch changes')
49
71
 
50
72
        # no navbar for revisions
51
73
        navigation = util.Container()
52
 
        # Directory Breadcrumbs
53
 
        directory_breadcrumbs = util.directory_breadcrumbs(
54
 
                self._branch.friendly_name,
55
 
                self._branch.is_root,
56
 
                'files')
57
 
 
58
 
        if not is_null_rev(revid):
59
 
            try:
60
 
                inv = h.get_inventory(revid)
61
 
            except:
62
 
                self.log.exception('Exception fetching changes')
63
 
                raise HTTPServerError('Could not fetch changes')
64
 
 
65
 
            file_id = kw.get('file_id', inv.root.file_id)
66
 
            start_revid = kw.get('start_revid', None)
67
 
            sort_type = kw.get('sort', None)
68
 
 
69
 
            change = h.get_changes([ revid ])[0]
70
 
            # add parent & merge-point branch-nick info, in case it's useful
71
 
            h.get_branch_nicks([ change ])
72
 
 
73
 
            path = inv.id2path(file_id)
74
 
            if not path.startswith('/'):
75
 
                path = '/' + path
76
 
            idpath = inv.get_idpath(file_id)
77
 
            if len(idpath) > 1:
78
 
                updir = dirname(path)
79
 
                updir_file_id = idpath[-2]
80
 
            else:
81
 
                updir = None
82
 
                updir_file_id = None
83
 
            if updir == '/':
84
 
                updir_file_id = None
85
 
 
86
 
            # Create breadcrumb trail for the path within the branch
87
 
            branch_breadcrumbs = util.branch_breadcrumbs(path, inv, 'files')
88
 
            filelist = h.get_filelist(inv, file_id, sort_type)
 
74
 
 
75
        change = h.get_changes([ revid ])[0]
 
76
        # add parent & merge-point branch-nick info, in case it's useful
 
77
        h.get_branch_nicks([ change ])
 
78
        
 
79
        path = inv.id2path(file_id)
 
80
        if not path.startswith('/'):
 
81
            path = '/' + path
 
82
        idpath = inv.get_idpath(file_id)
 
83
        if len(idpath) > 1:
 
84
            updir = dirname(path)
 
85
            updir_file_id = idpath[-2]
89
86
        else:
90
 
            inv = None
91
 
            file_id = None
92
 
            start_revid = None
93
 
            sort_type = None
94
 
            change = None
95
 
            path = "/"
96
 
            idpath = None
97
87
            updir = None
98
88
            updir_file_id = None
99
 
            branch_breadcrumbs = []
100
 
            filelist = []
 
89
        if updir == '/':
 
90
            updir_file_id = None
101
91
 
102
 
        return {
 
92
        vals = {
103
93
            'branch': self._branch,
104
94
            'util': util,
105
95
            'revid': revid,
108
98
            'path': path,
109
99
            'updir': updir,
110
100
            'updir_file_id': updir_file_id,
111
 
            'filelist': filelist,
 
101
            'filelist': h.get_filelist(inv, path, sort_type),
112
102
            'history': h,
113
103
            'posixpath': posixpath,
114
104
            'navigation': navigation,
115
 
            'url': self._branch.context_url,
116
 
            'start_revid': start_revid,
117
 
            'fileview_active': True,
118
 
            'directory_breadcrumbs': directory_breadcrumbs,
119
 
            'branch_breadcrumbs': branch_breadcrumbs,
120
105
        }
 
106
        h.flush_cache()
 
107
        self.log.info('/inventory %r: %r secs' % (revid, time.time() - z))
 
108
        return vals