~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to loggerhead/controllers/changelog_ui.py

  • Committer: Launchpad Patch Queue Manager
  • Date: 2008-03-06 04:54:39 UTC
  • mfrom: (148.1.3 changelog-order-aaaargh)
  • Revision ID: launchpad@pqm.canonical.com-20080306045439-qe3j5ryuhb7bmqr8
[r=jamesh] fix the order of the changelog view when the revision cache is not used

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