~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-03-04 21:54:30 UTC
  • mto: This revision was merged to the branch mainline in revision 152.
  • Revision ID: michael.hudson@canonical.com-20080304215430-9gx6eqund5rzu4wv
do what mark said

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
#
2
 
# Copyright (C) 2008, 2009 Canonical Ltd.
3
2
# Copyright (C) 2006  Robey Pointer <robey@lag.net>
4
3
# Copyright (C) 2006  Goffredo Baroncelli <kreijack@inwind.it>
5
4
#
18
17
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19
18
#
20
19
 
21
 
import urllib
22
 
 
23
 
import simplejson
24
 
 
25
 
from paste.httpexceptions import HTTPServerError
 
20
import time
 
21
 
 
22
import turbogears
 
23
from cherrypy import InternalError
26
24
 
27
25
from loggerhead import util
28
 
from loggerhead.controllers import TemplatedBranchView
29
 
 
30
 
 
31
 
class ChangeLogUI(TemplatedBranchView):
32
 
 
33
 
    template_path = 'loggerhead.templates.changelog'
34
 
 
35
 
    def get_values(self, path, kwargs, headers):
36
 
        history = self._history
37
 
        revid = self.get_revid()
38
 
        filter_file_id = kwargs.get('filter_file_id', None)
39
 
        query = kwargs.get('q', None)
40
 
        start_revid = history.fix_revid(kwargs.get('start_revid', None))
41
 
        orig_start_revid = start_revid
42
 
        pagesize = 20#int(config.get('pagesize', '20'))
43
 
        search_failed = False
44
 
 
45
 
        if filter_file_id is None and path is not None:
46
 
            filter_file_id = history.get_file_id(revid, path)
47
 
 
 
26
 
 
27
 
 
28
class ChangeLogUI (object):
 
29
    
 
30
    def __init__(self, branch):
 
31
        # BranchView object
 
32
        self._branch = branch
 
33
        self.log = branch.log
 
34
        
 
35
    @util.strip_whitespace
 
36
    @turbogears.expose(html='loggerhead.templates.changelog')
 
37
    def default(self, *args, **kw):
 
38
        z = time.time()
 
39
        h = self._branch.get_history()
 
40
        config = self._branch.config
 
41
 
 
42
        h._branch.lock_read()
48
43
        try:
49
 
            revid, start_revid, revid_list = history.get_view(
50
 
                revid, start_revid, filter_file_id, query)
51
 
            util.set_context(kwargs)
52
 
 
53
 
            if (query is not None) and (len(revid_list) == 0):
54
 
                search_failed = True
55
 
 
56
 
            if len(revid_list) == 0:
57
 
                scan_list = revid_list
 
44
            if len(args) > 0:
 
45
                revid = h.fix_revid(args[0])
58
46
            else:
59
 
                if revid in revid_list: # XXX is this always true?
60
 
                    i = revid_list.index(revid)
 
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
61
66
                else:
62
 
                    i = None
63
 
                scan_list = revid_list[i:]
64
 
            change_list = scan_list[:pagesize]
65
 
            changes = list(history.get_changes(change_list))
66
 
            data = {}
67
 
            for i, c in enumerate(changes):
68
 
                c.index = i
69
 
                data[str(i)] = urllib.quote(urllib.quote(c.revid, safe=''))
70
 
        except:
71
 
            self.log.exception('Exception fetching changes')
72
 
            raise HTTPServerError('Could not fetch changes')
73
 
 
74
 
        navigation = util.Container(
75
 
            pagesize=pagesize, revid=revid, start_revid=start_revid,
76
 
            revid_list=revid_list, filter_file_id=filter_file_id,
77
 
            scan_url='/changes', branch=self._branch, feed=True, history=history)
78
 
        if query is not None:
79
 
            navigation.query = query
80
 
        util.fill_in_navigation(navigation)
81
 
 
82
 
        # Directory Breadcrumbs
83
 
        directory_breadcrumbs = (
84
 
            util.directory_breadcrumbs(
85
 
                self._branch.friendly_name,
86
 
                self._branch.is_root,
87
 
                'changes'))
88
 
 
89
 
        show_tag_col = False
90
 
        for change in changes:
91
 
            if change.tags is not None:
92
 
                show_tag_col = True
93
 
                break
94
 
 
95
 
        return {
96
 
            'branch': self._branch,
97
 
            'changes': changes,
98
 
            'show_tag_col': show_tag_col,
99
 
            'data': simplejson.dumps(data),
100
 
            'util': util,
101
 
            'history': history,
102
 
            'revid': revid,
103
 
            'navigation': navigation,
104
 
            'filter_file_id': filter_file_id,
105
 
            'start_revid': start_revid,
106
 
            'viewing_from': (orig_start_revid is not None) and
107
 
                            (orig_start_revid != history.last_revid),
108
 
            'query': query,
109
 
            'search_failed': search_failed,
110
 
            'url': self._branch.context_url,
111
 
            'directory_breadcrumbs': directory_breadcrumbs,
112
 
        }
 
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()