/loggerhead/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/loggerhead/trunk

« back to all changes in this revision

Viewing changes to loggerhead/controllers/changelog_ui.py

  • Committer: Jelmer Vernooij
  • Date: 2020-06-04 19:43:36 UTC
  • mto: This revision was merged to the branch mainline in revision 500.
  • Revision ID: jelmer@jelmer.uk-20200604194336-ahskrf4rmy1qaxzs
Port loggerhead from YUI to jQuery.

YUI has been deprecated since 2014 and is due to be removed from Debian.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
#
 
2
# Copyright (C) 2008, 2009 Canonical Ltd.
2
3
# Copyright (C) 2006  Robey Pointer <robey@lag.net>
 
4
# Copyright (C) 2006  Goffredo Baroncelli <kreijack@inwind.it>
3
5
#
4
6
# This program is free software; you can redistribute it and/or modify
5
7
# it under the terms of the GNU General Public License as published by
13
15
#
14
16
# You should have received a copy of the GNU General Public License
15
17
# along with this program; if not, write to the Free Software
16
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
18
# Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335  USA
17
19
#
18
20
 
19
 
import base64
20
 
import os
21
 
import posixpath
22
 
import time
23
 
 
24
 
import turbogears
25
 
from cherrypy import HTTPRedirect, session
26
 
 
27
 
from loggerhead.history import History
28
 
from loggerhead import util
29
 
 
30
 
 
31
 
FOLDER = '/Users/robey/code/paramiko/paramiko'
32
 
BRANCH_NAME = 'paramiko-dev'
33
 
 
34
 
class ChangeLogUI (object):
35
 
 
36
 
    @turbogears.expose(html='loggerhead.templates.changelog', content_type='html')
37
 
    def default(self, *args, **kw):
38
 
        h = History.from_folder(FOLDER)
39
 
        if len(args) > 0:
40
 
            revid = args[0]
41
 
        else:
42
 
            revid = h.last_revid
43
 
        revlist = h.get_short_revision_history_from(revid)
44
 
        entries = h.get_changelist(list(revlist)[:20])
45
 
        
46
 
        buttons = [
47
 
            ('main', turbogears.url('/changes')),
48
 
            ('inventory', turbogears.url([ '/inventory', revid ])),
49
 
            ('feed', turbogears.url('/atom')),
50
 
        ]
51
 
 
52
 
        merge_revids = h.simplify_merge_point_list(h.get_merge_point_list(revid))
53
 
        merge_points = [{
54
 
            'revid': m_revid,
55
 
            'revno': h.get_revno(m_revid),
56
 
        } for m_revid in merge_revids]
57
 
 
58
 
        vals = {
59
 
            'branch_name': BRANCH_NAME,
60
 
            'changes': entries,
 
21
import simplejson
 
22
 
 
23
from paste.httpexceptions import HTTPServerError
 
24
 
 
25
from breezy import osutils, urlutils
 
26
 
 
27
from .. import util
 
28
from ..controllers import TemplatedBranchView
 
29
 
 
30
 
 
31
class ChangeLogUI(TemplatedBranchView):
 
32
 
 
33
    template_name = '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
        if filter_file_id is not None:
 
40
            filter_file_id = urlutils.unquote_to_bytes(osutils.safe_utf8(filter_file_id))
 
41
        query = kwargs.get('q', None)
 
42
        start_revid = history.fix_revid(kwargs.get('start_revid', None))
 
43
        orig_start_revid = start_revid
 
44
        pagesize = 20#int(config.get('pagesize', '20'))
 
45
        search_failed = False
 
46
 
 
47
        if filter_file_id is None and path is not None:
 
48
            filter_file_id = history.get_file_id(revid, path)
 
49
 
 
50
        try:
 
51
            revid, start_revid, revid_list = history.get_view(
 
52
                revid, start_revid, filter_file_id, query,
 
53
                extra_rev_count=pagesize+1)
 
54
            util.set_context(kwargs)
 
55
 
 
56
            if (query is not None) and (len(revid_list) == 0):
 
57
                search_failed = True
 
58
 
 
59
            if len(revid_list) == 0:
 
60
                scan_list = revid_list
 
61
            else:
 
62
                if revid in revid_list: # XXX is this always true?
 
63
                    i = revid_list.index(revid)
 
64
                else:
 
65
                    i = None
 
66
                scan_list = revid_list[i:]
 
67
            change_list = scan_list[:pagesize]
 
68
            changes = list(history.get_changes(change_list))
 
69
            data = {}
 
70
            for i, c in enumerate(changes):
 
71
                c.index = i
 
72
                data[str(i)] = urlutils.quote(urlutils.quote_from_bytes(c.revid, safe=''))
 
73
        except:
 
74
            self.log.exception('Exception fetching changes')
 
75
            raise HTTPServerError('Could not fetch changes')
 
76
 
 
77
        navigation = util.Container(
 
78
            pagesize=pagesize, revid=revid, start_revid=start_revid,
 
79
            revid_list=revid_list, filter_file_id=filter_file_id,
 
80
            scan_url='/changes', branch=self._branch, feed=True, history=history)
 
81
        if query is not None:
 
82
            navigation.query = query
 
83
        util.fill_in_navigation(navigation)
 
84
 
 
85
        # Directory Breadcrumbs
 
86
        directory_breadcrumbs = (
 
87
            util.directory_breadcrumbs(
 
88
                self._branch.friendly_name,
 
89
                self._branch.is_root,
 
90
                'changes'))
 
91
 
 
92
        show_tag_col = False
 
93
        for change in changes:
 
94
            if change.tags is not None:
 
95
                show_tag_col = True
 
96
                break
 
97
 
 
98
        return {
 
99
            'branch': self._branch,
 
100
            'changes': changes,
 
101
            'show_tag_col': show_tag_col,
 
102
            'data': simplejson.dumps(data),
61
103
            'util': util,
62
 
            'history': h,
63
 
            'scan_url': '/changes',
 
104
            'history': history,
64
105
            'revid': revid,
65
 
            'buttons': buttons,
66
 
            'merge_points': [util.Container(m) for m in merge_points],
 
106
            'navigation': navigation,
 
107
            'filter_file_id': filter_file_id,
 
108
            'start_revid': start_revid,
 
109
            'viewing_from': (orig_start_revid is not None) and
 
110
                            (orig_start_revid != history.last_revid),
 
111
            'query': query,
 
112
            'search_failed': search_failed,
 
113
            'url': self._branch.context_url,
 
114
            'directory_breadcrumbs': directory_breadcrumbs,
67
115
        }
68
 
        if kw.get('style', None) == 'rss':
69
 
            vals['tg_template'] = 'loggerhead.templates.changelog-rss'
70
 
            vals['tg_format'] = 'xml'
71
 
            vals['tg_content_type'] = 'application/rss+xml'
72
 
        return vals