/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/revision_ui.py

  • Committer: Jelmer Vernooij
  • Date: 2018-09-08 15:16:32 UTC
  • mto: (491.6.1 breezy)
  • mto: This revision was merged to the branch mainline in revision 494.
  • Revision ID: jelmer@jelmer.uk-20180908151632-hsc80tbdusz1nz31
s/bazaar.conf/breezy.conf.

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
#
15
15
# You should have received a copy of the GNU General Public License
16
16
# along with this program; if not, write to the Free Software
17
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
17
# Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335  USA
18
18
#
19
19
 
20
 
try:
21
 
    import simplejson
22
 
except ImportError:
23
 
    import json as simplejson
 
20
import simplejson
24
21
import urllib
25
22
 
26
23
from paste.httpexceptions import HTTPServerError
39
36
class RevisionUI(TemplatedBranchView):
40
37
 
41
38
    template_path = 'loggerhead.templates.revision'
 
39
    supports_json = True
42
40
 
43
41
    def get_values(self, path, kwargs, headers):
44
42
        h = self._history
47
45
        filter_file_id = kwargs.get('filter_file_id', None)
48
46
        start_revid = h.fix_revid(kwargs.get('start_revid', None))
49
47
        query = kwargs.get('q', None)
50
 
        remember = h.fix_revid(kwargs.get('remember', None))
51
48
        compare_revid = h.fix_revid(kwargs.get('compare_revid', None))
52
49
 
 
50
        # TODO: This try/except looks to date before real exception handling
 
51
        # and should be removed
53
52
        try:
54
53
            revid, start_revid, revid_list = h.get_view(revid,
55
54
                                                        start_revid,
58
57
        except:
59
58
            self.log.exception('Exception fetching changes')
60
59
            raise HTTPServerError('Could not fetch changes')
61
 
 
 
60
        # XXX: Some concern about namespace collisions. These are only stored
 
61
        # here so they can be expanded into the template later. Should probably
 
62
        # be stored in a specific dict/etc.
 
63
        self.revid_list = revid_list
 
64
        self.compare_revid = compare_revid
 
65
        self.path = path
 
66
        kwargs['start_revid'] = start_revid
 
67
 
 
68
        change = h.get_changes([revid])[0]
 
69
 
 
70
        if compare_revid is None:
 
71
            file_changes = h.get_file_changes(change)
 
72
        else:
 
73
            file_changes = h.file_changes_for_revision_ids(
 
74
                compare_revid, change.revid)
 
75
 
 
76
        h.add_branch_nicks(change)
 
77
 
 
78
        if '.' in change.revno:
 
79
            # Walk "up" though the merge-sorted graph until we find a
 
80
            # revision with merge depth 0: this is the revision that merged
 
81
            # this one to mainline.
 
82
            ri = self._history._rev_info
 
83
            i = self._history._rev_indices[change.revid]
 
84
            while ri[i][0][2] > 0:
 
85
                i -= 1
 
86
            merged_in = ri[i][0][3]
 
87
        else:
 
88
            merged_in = None
 
89
 
 
90
        return {
 
91
            'revid': revid,
 
92
            'change': change,
 
93
            'file_changes': file_changes,
 
94
            'merged_in': merged_in,
 
95
        }
 
96
 
 
97
    def add_template_values(self, values):
 
98
        super(RevisionUI, self).add_template_values(values)
 
99
        remember = self._history.fix_revid(self.kwargs.get('remember', None))
 
100
        query = self.kwargs.get('q', None)
 
101
        filter_file_id = self.kwargs.get('filter_file_id', None)
 
102
        start_revid = self.kwargs['start_revid']
62
103
        navigation = util.Container(
63
 
            revid_list=revid_list, revid=revid, start_revid=start_revid,
 
104
            revid_list=self.revid_list, revid=values['revid'],
 
105
            start_revid=start_revid,
64
106
            filter_file_id=filter_file_id, pagesize=1,
65
 
            scan_url='/revision', branch=self._branch, feed=True, history=h)
 
107
            scan_url='/revision', branch=self._branch, feed=True,
 
108
            history=self._history)
66
109
        if query is not None:
67
110
            navigation.query = query
68
111
        util.fill_in_navigation(navigation)
69
 
 
70
 
        change = h.get_changes([revid])[0]
71
 
 
72
 
        if compare_revid is None:
73
 
            file_changes = h.get_file_changes(change)
74
 
        else:
75
 
            file_changes = h.file_changes_for_revision_ids(
76
 
                compare_revid, change.revid)
77
 
 
 
112
        path = self.path
78
113
        if path in ('', '/'):
79
114
            path = None
80
115
 
 
116
 
 
117
        file_changes = values['file_changes']
81
118
        link_data = {}
82
119
        path_to_id = {}
83
120
        if path:
84
 
            item = [x for x in file_changes.text_changes if x.filename == path][0]
85
 
            diff_chunks = diff_chunks_for_file(
86
 
                self._history._branch.repository, item.file_id,
87
 
                item.old_revision, item.new_revision)
 
121
            items = [x for x in file_changes.text_changes if x.filename == path]
 
122
            if len(items) > 0:
 
123
                item = items[0]
 
124
                try:
 
125
                    context_lines = int(self.kwargs['context'])
 
126
                except (KeyError, ValueError):
 
127
                    context_lines = None
 
128
                diff_chunks = diff_chunks_for_file(
 
129
                    self._history._branch.repository, item.file_id,
 
130
                    item.old_revision, item.new_revision,
 
131
                    context_lines=context_lines)
 
132
            else:
 
133
                diff_chunks = None
88
134
        else:
89
135
            diff_chunks = None
90
136
            for i, item in enumerate(file_changes.text_changes):
93
139
                    dq(item.new_revision), dq(item.old_revision), dq(item.file_id))
94
140
                path_to_id[item.filename] = 'diff-' + str(i)
95
141
 
96
 
        h.add_branch_nicks(change)
97
 
 
98
 
        if '.' in change.revno:
99
 
            # Walk "up" though the merge-sorted graph until we find a
100
 
            # revision with merge depth 0: this is the revision that merged
101
 
            # this one to mainline.
102
 
            ri = self._history._rev_info
103
 
            i = self._history._rev_indices[change.revid]
104
 
            while ri[i][0][2] > 0:
105
 
                i -= 1
106
 
            merged_in = ri[i][0][3]
107
 
        else:
108
 
            merged_in = None
109
 
 
110
142
        # Directory Breadcrumbs
111
143
        directory_breadcrumbs = (
112
144
            util.directory_breadcrumbs(
113
145
                self._branch.friendly_name,
114
146
                self._branch.is_root,
115
147
                'changes'))
 
148
        can_export = self._branch.export_tarballs
116
149
 
117
 
        return {
118
 
            'branch': self._branch,
119
 
            'revid': revid,
120
 
            'change': change,
121
 
            'file_changes': file_changes,
122
 
            'diff_chunks': diff_chunks,
 
150
        values.update({
 
151
            'history': self._history,
123
152
            'link_data': simplejson.dumps(link_data),
124
 
            'specific_path': path,
125
153
            'json_specific_path': simplejson.dumps(path),
126
154
            'path_to_id': simplejson.dumps(path_to_id),
127
 
            'start_revid': start_revid,
 
155
            'directory_breadcrumbs': directory_breadcrumbs,
 
156
            'navigation': navigation,
 
157
            'remember': remember,
 
158
            'compare_revid': self.compare_revid,
128
159
            'filter_file_id': filter_file_id,
129
 
            'util': util,
130
 
            'history': h,
131
 
            'merged_in': merged_in,
132
 
            'navigation': navigation,
 
160
            'diff_chunks': diff_chunks,
133
161
            'query': query,
134
 
            'remember': remember,
135
 
            'compare_revid': compare_revid,
136
 
            'url': self._branch.context_url,
137
 
            'directory_breadcrumbs': directory_breadcrumbs,
138
 
        }
 
162
            'can_export': can_export,
 
163
            'specific_path': path,
 
164
            'start_revid': start_revid,
 
165
        })