Merge lp:~jelmer/loggerhead/breezy-compat into lp:loggerhead

Proposed by Jelmer Vernooij
Status: Work in progress
Proposed branch: lp:~jelmer/loggerhead/breezy-compat
Merge into: lp:loggerhead
Diff against target: 182 lines (+41/-27)
5 files modified
loggerhead/controllers/filediff_ui.py (+5/-7)
loggerhead/controllers/revision_ui.py (+2/-1)
loggerhead/history.py (+24/-12)
loggerhead/main.py (+4/-1)
loggerhead/tests/test_controllers.py (+6/-6)
To merge this branch: bzr merge lp:~jelmer/loggerhead/breezy-compat
Reviewer Review Type Date Requested Status
Loggerhead Reviewers Pending
Review via email: mp+373058@code.launchpad.net

Description of the change

Avoid relying on file ids in various places.

This is necessary for newer versions of Breezy, which make file ids optional
to better support VCSes that don't have them.

To post a comment you must log in.

Unmerged revisions

495. By Jelmer Vernooij

Avoid relying on file ids.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'loggerhead/controllers/filediff_ui.py'
2--- loggerhead/controllers/filediff_ui.py 2018-10-20 16:06:44 +0000
3+++ loggerhead/controllers/filediff_ui.py 2019-09-21 23:00:46 +0000
4@@ -58,19 +58,17 @@
5 return chunks
6
7
8-def diff_chunks_for_file(repository, file_id, compare_revid, revid,
9+def diff_chunks_for_file(repository, path, compare_revid, revid,
10 context_lines=None):
11 if context_lines is None:
12 context_lines = 3
13 lines = {}
14- args = []
15 for r in (compare_revid, revid):
16 if r == b'null:':
17 lines[r] = []
18 else:
19- args.append((file_id, r, r))
20- for r, bytes_iter in repository.iter_files_bytes(args):
21- lines[r] = osutils.split_lines(b''.join(bytes_iter))
22+ tree = repository.revision_tree(r)
23+ lines[r] = tree.get_file_lines(path)
24 buffer = BytesIO()
25 try:
26 diff.internal_diff('', lines[compare_revid], '', lines[revid], buffer, context_lines=context_lines)
27@@ -90,7 +88,7 @@
28 def get_values(self, path, kwargs, headers):
29 revid = urlutils.unquote_to_bytes(self.args[0])
30 compare_revid = urlutils.unquote_to_bytes(self.args[1])
31- file_id = urlutils.unquote_to_bytes(self.args[2])
32+ path = urlutils.unquote(self.args[2])
33
34 try:
35 context_lines = int(kwargs['context'])
36@@ -98,7 +96,7 @@
37 context_lines = None
38
39 chunks = diff_chunks_for_file(
40- self._history._branch.repository, file_id, compare_revid, revid,
41+ self._history._branch.repository, path, compare_revid, revid,
42 context_lines=context_lines)
43
44 return {
45
46=== modified file 'loggerhead/controllers/revision_ui.py'
47--- loggerhead/controllers/revision_ui.py 2018-10-20 15:02:08 +0000
48+++ loggerhead/controllers/revision_ui.py 2019-09-21 23:00:46 +0000
49@@ -137,7 +137,8 @@
50 for i, item in enumerate(file_changes.text_changes):
51 item.index = i
52 link_data['diff-' + str(i)] = '%s/%s/%s' % (
53- dq(item.new_revision), dq(item.old_revision), dq(item.file_id))
54+ dq(item.new_revision), dq(item.old_revision),
55+ dq(item.filename))
56 path_to_id[item.filename] = 'diff-' + str(i)
57
58 # Directory Breadcrumbs
59
60=== modified file 'loggerhead/history.py'
61--- loggerhead/history.py 2019-09-18 16:46:07 +0000
62+++ loggerhead/history.py 2019-09-21 23:00:46 +0000
63@@ -33,9 +33,9 @@
64 import re
65 import textwrap
66 import threading
67-import tarfile
68
69 from breezy import tag
70+from breezy import version_info as breezy_version
71 import breezy.branch
72 import breezy.delta
73 import breezy.errors
74@@ -122,25 +122,37 @@
75 self.old_tree = old_tree
76 self.new_tree = new_tree
77
78- def revid(self, tree, file_id):
79+ def revid(self, tree, path):
80 try:
81- path = tree.id2path(file_id)
82- except breezy.errors.NoSuchId:
83+ return tree.get_file_revision(path)
84+ except breezy.errors.NoSuchFile:
85 return b'null:'
86- else:
87- return tree.get_file_revision(path)
88-
89- def report(self, file_id, paths, versioned, renamed, modified,
90- exe_change, kind):
91+
92+ if breezy_version >= (3, 1):
93+ def report(self, paths, versioned, renamed, modified,
94+ exe_change, kind):
95+ return self._report(
96+ paths, versioned, renamed, modified,
97+ exe_change, kind)
98+ else:
99+ def report(self, file_id, paths, versioned, renamed, modified,
100+ exe_change, kind):
101+ return self._report(
102+ paths, versioned, renamed, modified,
103+ exe_change, kind)
104+
105+ def _report(self, paths, versioned, renamed, modified, exe_change, kind):
106 if modified not in ('unchanged', 'kind changed'):
107 if versioned == 'removed':
108 filename = rich_filename(paths[0], kind[0])
109 else:
110 filename = rich_filename(paths[1], kind[1])
111 self.text_changes.append(util.Container(
112- filename=filename, file_id=file_id,
113- old_revision=self.revid(self.old_tree, file_id),
114- new_revision=self.revid(self.new_tree, file_id)))
115+ filename=filename,
116+ old_revision=self.revid(self.old_tree, paths[0]),
117+ new_revision=self.revid(self.new_tree, paths[1]),
118+ old_path=paths[0],
119+ new_path=paths[1]))
120 if versioned == 'added':
121 self.added.append(util.Container(
122 filename=rich_filename(paths[1], kind), kind=kind[1]))
123
124=== modified file 'loggerhead/main.py'
125--- loggerhead/main.py 2018-10-20 17:34:46 +0000
126+++ loggerhead/main.py 2019-09-21 23:00:46 +0000
127@@ -22,7 +22,10 @@
128 import sys
129
130 from breezy.plugin import load_plugins
131-from breezy.transport import location_to_url
132+try:
133+ from breezy.location import location_to_url
134+except ImportError: # brz < 3.1
135+ from breezy.transport import location_to_url
136
137 from paste import httpserver
138 from paste.httpexceptions import HTTPExceptionHandler, HTTPInternalServerError
139
140=== modified file 'loggerhead/tests/test_controllers.py'
141--- loggerhead/tests/test_controllers.py 2018-10-20 16:06:44 +0000
142+++ loggerhead/tests/test_controllers.py 2019-09-21 23:00:46 +0000
143@@ -247,8 +247,8 @@
144 builder = self.make_branch_builder('branch')
145 builder.start_series()
146 rev1 = builder.build_snapshot(None, [
147- ('add', ('', b'root-id', 'directory', '')),
148- ('add', ('filename', b'f-id', 'file', b'content\n'))],
149+ ('add', ('', None, 'directory', '')),
150+ ('add', ('filename', None, 'file', b'content\n'))],
151 message="First commit.")
152 rev2 = builder.build_snapshot(None, [
153 ('modify', ('filename', b'new content\n'))])
154@@ -260,7 +260,7 @@
155 def test_get_values_smoke(self):
156 branch_app, (rev1, rev2) = self.make_branch_app_for_filediff_ui()
157 env = {'SCRIPT_NAME': '/',
158- 'PATH_INFO': '/+filediff/%s/%s/f-id' % (rev2.decode('utf-8'), rev1.decode('utf-8')),
159+ 'PATH_INFO': '/+filediff/%s/%s/filename' % (rev2.decode('utf-8'), rev1.decode('utf-8')),
160 'REQUEST_METHOD': 'GET',
161 'wsgi.url_scheme': 'http',
162 'SERVER_NAME': 'localhost',
163@@ -275,7 +275,7 @@
164 def test_json_render_smoke(self):
165 branch_app, (rev1, rev2) = self.make_branch_app_for_filediff_ui()
166 env = {'SCRIPT_NAME': '/',
167- 'PATH_INFO': '/+json/+filediff/%s/%s/f-id' % (rev2.decode('utf-8'), rev1.decode('utf-8')),
168+ 'PATH_INFO': '/+json/+filediff/%s/%s/filename' % (rev2.decode('utf-8'), rev1.decode('utf-8')),
169 'REQUEST_METHOD': 'GET',
170 'wsgi.url_scheme': 'http',
171 'SERVER_NAME': 'localhost',
172@@ -290,8 +290,8 @@
173 builder = self.make_branch_builder('branch')
174 builder.start_series()
175 revid = builder.build_snapshot(None, [
176- ('add', ('', b'root-id', 'directory', '')),
177- ('add', ('filename', b'f-id', 'file', b'content\n'))],
178+ ('add', ('', None, 'directory', '')),
179+ ('add', ('filename', None, 'file', b'content\n'))],
180 message="First commit.")
181 builder.finish_series()
182 branch = builder.get_branch()

Subscribers

People subscribed via source and target branches