~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to loggerhead/controllers/changelog_ui.py

  • Committer: Michael Hudson
  • Date: 2008-06-18 04:30:50 UTC
  • Revision ID: michael.hudson@canonical.com-20080618043050-u8e5qcj64tf16can
don't insist on python 2.4

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
 
from paste.httpexceptions import HTTPServerError
 
20
import time
 
21
 
 
22
import turbogears
 
23
from cherrypy import InternalError
21
24
 
22
25
from loggerhead import util
23
 
from loggerhead.controllers import TemplatedBranchView
24
 
 
25
 
 
26
 
class ChangeLogUI(TemplatedBranchView):
27
 
 
28
 
    template_path = 'loggerhead.templates.changelog'
29
 
 
30
 
    def get_values(self, h, args, kw, headers):
31
 
        if args:
32
 
            revid = h.fix_revid(args[0])
33
 
        else:
34
 
            revid = None
35
 
 
36
 
        filter_file_id = kw.get('filter_file_id', None)
37
 
        query = kw.get('q', None)
38
 
        start_revid = h.fix_revid(kw.get('start_revid', None))
39
 
        orig_start_revid = start_revid
40
 
        pagesize = 20#int(config.get('pagesize', '20'))
41
 
        search_failed = False
42
 
 
 
26
from loggerhead.templatefunctions import templatefunctions
 
27
 
 
28
 
 
29
class ChangeLogUI (object):
 
30
    
 
31
    def __init__(self, branch):
 
32
        # BranchView object
 
33
        self._branch = branch
 
34
        self.log = branch.log
 
35
        
 
36
    @util.strip_whitespace
 
37
    @turbogears.expose(html='zpt:loggerhead.templates.changelog')
 
38
    def default(self, *args, **kw):
 
39
        z = time.time()
 
40
        h = self._branch.get_history()
 
41
        config = self._branch.config
 
42
 
 
43
        h._branch.lock_read()
43
44
        try:
44
 
            revid, start_revid, revid_list = h.get_view(
45
 
                revid, start_revid, filter_file_id, query)
46
 
            util.set_context(kw)
47
 
 
48
 
            if (query is not None) and (len(revid_list) == 0):
49
 
                search_failed = True
50
 
 
51
 
            if len(revid_list) == 0:
52
 
                scan_list = revid_list
 
45
            if len(args) > 0:
 
46
                revid = h.fix_revid(args[0])
53
47
            else:
54
 
                if revid in revid_list: # XXX is this always true?
55
 
                    i = revid_list.index(revid)
 
48
                revid = None
 
49
 
 
50
            filter_file_id = kw.get('filter_file_id', None)
 
51
            query = kw.get('q', None)
 
52
            start_revid = h.fix_revid(kw.get('start_revid', None))
 
53
            orig_start_revid = start_revid
 
54
            pagesize = int(config.get('pagesize', '20'))
 
55
            search_failed = False
 
56
 
 
57
            try:
 
58
                revid, start_revid, revid_list = h.get_view(
 
59
                    revid, start_revid, filter_file_id, query)
 
60
                kw['start_revid'] = start_revid
 
61
                util.set_context(kw)
 
62
 
 
63
                if (query is not None) and (len(revid_list) == 0):
 
64
                    search_failed = True
 
65
 
 
66
                if len(revid_list) == 0:
 
67
                    scan_list = revid_list
56
68
                else:
57
 
                    i = None
58
 
                scan_list = revid_list[i:]
59
 
            change_list = scan_list[:pagesize]
60
 
            changes = list(h.get_changes(change_list))
61
 
            h.add_changes(changes)
62
 
        except:
63
 
            self.log.exception('Exception fetching changes')
64
 
            raise HTTPServerError('Could not fetch changes')
65
 
 
66
 
        navigation = util.Container(
67
 
            pagesize=pagesize, revid=revid, start_revid=start_revid,
68
 
            revid_list=revid_list, filter_file_id=filter_file_id,
69
 
            scan_url='/changes', branch=self._branch, feed=True, history=h)
70
 
        if query is not None:
71
 
            navigation.query = query
72
 
        util.fill_in_navigation(navigation)
73
 
 
74
 
        # add parent & merge-point branch-nick info, in case it's useful
75
 
        h.get_branch_nicks(changes)
76
 
 
77
 
        # does every change on this page have the same committer?  if so,
78
 
        # tell the template to show committer info in the "details block"
79
 
        # instead of on each line.
80
 
        all_same_author = True
81
 
 
82
 
        if changes:
83
 
            author = changes[0].author
84
 
            for e in changes[1:]:
85
 
                if e.author != author:
86
 
                    all_same_author = False
87
 
                    break
88
 
 
89
 
        # Directory Breadcrumbs
90
 
        directory_breadcrumbs = (
91
 
            util.directory_breadcrumbs(
92
 
                self._branch.friendly_name,
93
 
                self._branch.is_root,
94
 
                'changes'))
95
 
 
96
 
        return {
97
 
            'branch': self._branch,
98
 
            'changes': changes,
99
 
            'util': util,
100
 
            'history': h,
101
 
            'revid': revid,
102
 
            'navigation': navigation,
103
 
            'filter_file_id': filter_file_id,
104
 
            'start_revid': start_revid,
105
 
            'viewing_from': (orig_start_revid is not None) and (orig_start_revid != h.last_revid),
106
 
            'query': query,
107
 
            'search_failed': search_failed,
108
 
            'all_same_author': all_same_author,
109
 
            'url': self._branch.context_url,
110
 
            'directory_breadcrumbs': directory_breadcrumbs,
111
 
        }
 
69
                    if revid in revid_list: # XXX is this always true?
 
70
                        i = revid_list.index(revid)
 
71
                    else:
 
72
                        i = None
 
73
                    scan_list = revid_list[i:]
 
74
                change_list = scan_list[:pagesize]
 
75
                changes = list(h.get_changes(change_list))
 
76
                h.add_changes(changes)
 
77
            except:
 
78
                self.log.exception('Exception fetching changes')
 
79
                raise InternalError('Could not fetch changes')
 
80
 
 
81
            navigation = util.Container(
 
82
                pagesize=pagesize, revid=revid, start_revid=start_revid,
 
83
                revid_list=revid_list, filter_file_id=filter_file_id,
 
84
                scan_url='/changes', branch=self._branch, feed=True)
 
85
            if query is not None:
 
86
                navigation.query = query
 
87
            util.fill_in_navigation(navigation)
 
88
 
 
89
            # add parent & merge-point branch-nick info, in case it's useful
 
90
            h.get_branch_nicks(changes)
 
91
 
 
92
            # does every change on this page have the same committer?  if so,
 
93
            # tell the template to show committer info in the "details block"
 
94
            # instead of on each line.
 
95
            all_same_author = True
 
96
 
 
97
            if changes:
 
98
                author = changes[0].author
 
99
                for e in changes[1:]:
 
100
                    if e.author != author:
 
101
                        all_same_author = False
 
102
                        break
 
103
 
 
104
            def url(pathargs, **kw):
 
105
                return self._branch.url(pathargs, **util.get_context(**kw))
 
106
 
 
107
            vals = {
 
108
                'branch': self._branch,
 
109
                'changes': changes,
 
110
                'util': util,
 
111
                'history': h,
 
112
                'revid': revid,
 
113
                'navigation': navigation,
 
114
                'filter_file_id': filter_file_id,
 
115
                'start_revid': start_revid,
 
116
                'viewing_from': (orig_start_revid is not None) and (orig_start_revid != h.last_revid),
 
117
                'query': query,
 
118
                'search_failed': search_failed,
 
119
                'all_same_author': all_same_author,
 
120
                'url': self._branch.context_url,
 
121
            }
 
122
            vals.update(templatefunctions)
 
123
            self.log.info('/changes %r: %r secs' % (revid, time.time() - z))
 
124
            return vals
 
125
        finally:
 
126
            h._branch.unlock()