17
17
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23
from cherrypy import InternalError
24
from cherrypy import HTTPRedirect, session
25
26
from loggerhead import util
29
# just thinking out loud here...
31
# so, when browsing around, there are 3 pieces of context:
33
# the current beginning of navigation (navigation continues back to
34
# the original revision) -- this may not be along the primary revision
35
# path since the user may have navigated into a branch
37
# if navigating the revisions that touched a file
39
# current location along the navigation path (while browsing)
41
# current revid is given on the url path. 'file_id' and 'starting revid' are
42
# handed along as params.
28
45
class ChangeLogUI (object):
30
47
def __init__(self, branch):
32
49
self._branch = branch
33
50
self.log = branch.log
35
@util.strip_whitespace
36
52
@turbogears.expose(html='loggerhead.templates.changelog')
37
53
def default(self, *args, **kw):
39
55
h = self._branch.get_history()
40
56
config = self._branch.config
59
revid = h.fix_revid(args[0])
63
file_id = kw.get('file_id', None)
64
query = kw.get('q', None)
65
start_revid = h.fix_revid(kw.get('start_revid', None))
66
orig_start_revid = start_revid
67
pagesize = int(config.get('pagesize', '20'))
45
revid = h.fix_revid(args[0])
71
revid, start_revid, revid_list = h.get_view(revid, start_revid, file_id, query)
72
if (query is not None) and (len(revid_list) == 0):
75
if len(revid_list) == 0:
76
scan_list = revid_list
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'))
57
revid, start_revid, revid_list = h.get_view(revid, start_revid, file_id, query)
58
kw['start_revid'] = start_revid
61
if (query is not None) and (len(revid_list) == 0):
64
if len(revid_list) == 0:
65
scan_list = revid_list
67
if revid in revid_list: # XXX is this always true?
68
i = revid_list.index(revid)
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)
76
self.log.exception('Exception fetching changes')
77
raise InternalError('Could not fetch changes')
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)
82
navigation.query = query
83
util.fill_in_navigation(navigation)
85
# add parent & merge-point branch-nick info, in case it's useful
86
h.get_branch_nicks(changes)
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
94
author = changes[0].author
96
if e.author != author:
97
all_same_author = False
101
'branch': self._branch,
106
'navigation': navigation,
108
'start_revid': start_revid,
109
'viewing_from': (orig_start_revid is not None) and (orig_start_revid != h.last_revid),
111
'search_failed': search_failed,
112
'all_same_author': all_same_author,
115
self.log.info('/changes %r: %r secs' % (revid, time.time() - z))
78
scan_list = revid_list[h.get_revid_sequence(revid_list, revid):]
79
entry_list = scan_list[:pagesize]
80
entries = h.get_changes(entry_list)
82
self.log.error('Exception fetching changes: %s' % (x,))
83
util.log_exception(self.log)
84
raise HTTPRedirect(self._branch.url('/changes'))
86
navigation = util.Container(pagesize=pagesize, revid=revid, start_revid=start_revid, revid_list=revid_list,
87
file_id=file_id, scan_url='/changes', feed=True)
89
navigation.query = query
90
util.fill_in_navigation(h, navigation)
92
entries = list(entries)
93
# add parent & merge-point branch-nick info, in case it's useful
94
h.get_branch_nicks(entries)
97
'branch': self._branch,
98
'changes': list(entries),
102
'navigation': navigation,
104
'start_revid': start_revid,
105
'viewing_from': (orig_start_revid is not None) and (orig_start_revid != h.last_revid),
107
'search_failed': search_failed,
110
self.log.info('/changes %r: %r secs' % (revid, time.time() - z))