bzr branch
http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
|
1551.12.36
by Aaron Bentley
Fix failing tests |
1 |
# Copyright (C) 2007 Canonical Ltd
|
2 |
#
|
|
3 |
# This program is free software; you can redistribute it and/or modify
|
|
4 |
# it under the terms of the GNU General Public License as published by
|
|
5 |
# the Free Software Foundation; either version 2 of the License, or
|
|
6 |
# (at your option) any later version.
|
|
7 |
#
|
|
8 |
# This program is distributed in the hope that it will be useful,
|
|
9 |
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
11 |
# GNU General Public License for more details.
|
|
12 |
#
|
|
13 |
# You should have received a copy of the GNU General Public License
|
|
14 |
# along with this program; if not, write to the Free Software
|
|
15 |
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
16 |
||
17 |
||
|
1551.12.2
by Aaron Bentley
Got directives round-tripping, with bundles and everything |
18 |
from bzrlib import ( |
19 |
errors, |
|
|
1551.12.16
by Aaron Bentley
Enable signing merge directives |
20 |
gpg, |
|
1551.12.2
by Aaron Bentley
Got directives round-tripping, with bundles and everything |
21 |
merge_directive, |
22 |
tests, |
|
23 |
)
|
|
24 |
||
|
1551.12.4
by Aaron Bentley
Add failing test |
25 |
|
|
1551.12.45
by Aaron Bentley
Change format marker to not experimental |
26 |
OUTPUT1 = """# Bazaar merge directive format 1 |
|
1551.12.41
by Aaron Bentley
Clean up tests, add serialization text test |
27 |
# revision_id: example:
|
28 |
# target_branch: http://example.com
|
|
29 |
# testament_sha1: sha
|
|
30 |
# timestamp: 1970-01-01 00:09:33 +0002
|
|
31 |
#\x20 |
|
32 |
booga"""
|
|
33 |
||
|
2520.4.136
by Aaron Bentley
Fix format strings |
34 |
OUTPUT1_2 = """# Bazaar merge directive format 2 (Bazaar 0.19) |
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
35 |
# revision_id: example:
|
36 |
# target_branch: http://example.com
|
|
37 |
# testament_sha1: sha
|
|
38 |
# timestamp: 1970-01-01 00:09:33 +0002
|
|
|
2520.4.105
by Aaron Bentley
Implement patch verification |
39 |
# base_revision_id: null:
|
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
40 |
#\x20 |
41 |
# Begin bundle
|
|
42 |
booga"""
|
|
|
1551.12.41
by Aaron Bentley
Clean up tests, add serialization text test |
43 |
|
|
1551.12.45
by Aaron Bentley
Change format marker to not experimental |
44 |
OUTPUT2 = """# Bazaar merge directive format 1 |
|
1551.12.41
by Aaron Bentley
Clean up tests, add serialization text test |
45 |
# revision_id: example:
|
46 |
# target_branch: http://example.com
|
|
47 |
# testament_sha1: sha
|
|
48 |
# timestamp: 1970-01-01 00:09:33 +0002
|
|
49 |
# source_branch: http://example.org
|
|
50 |
# message: Hi mom!
|
|
51 |
#\x20 |
|
52 |
booga"""
|
|
53 |
||
|
2520.4.136
by Aaron Bentley
Fix format strings |
54 |
OUTPUT2_2 = """# Bazaar merge directive format 2 (Bazaar 0.19) |
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
55 |
# revision_id: example:
|
56 |
# target_branch: http://example.com
|
|
57 |
# testament_sha1: sha
|
|
58 |
# timestamp: 1970-01-01 00:09:33 +0002
|
|
59 |
# source_branch: http://example.org
|
|
60 |
# message: Hi mom!
|
|
|
2520.4.105
by Aaron Bentley
Implement patch verification |
61 |
# base_revision_id: null:
|
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
62 |
#\x20 |
63 |
# Begin patch
|
|
64 |
booga"""
|
|
|
1551.12.41
by Aaron Bentley
Clean up tests, add serialization text test |
65 |
|
|
1551.12.51
by Aaron Bentley
Allow leading junk before merge directive header |
66 |
INPUT1 = """ |
67 |
I was thinking today about creating a merge directive.
|
|
68 |
||
69 |
So I did.
|
|
70 |
||
71 |
Here it is.
|
|
72 |
||
73 |
(I've pasted it in the body of this message)
|
|
74 |
||
75 |
Aaron
|
|
76 |
||
77 |
# Bazaar merge directive format 1\r |
|
78 |
# revision_id: example:
|
|
79 |
# target_branch: http://example.com
|
|
80 |
# testament_sha1: sha
|
|
81 |
# timestamp: 1970-01-01 00:09:33 +0002
|
|
82 |
# source_branch: http://example.org
|
|
83 |
# message: Hi mom!
|
|
84 |
#\x20 |
|
85 |
booga""".splitlines(True) |
|
86 |
||
87 |
||
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
88 |
INPUT1_2 = """ |
89 |
I was thinking today about creating a merge directive.
|
|
90 |
||
91 |
So I did.
|
|
92 |
||
93 |
Here it is.
|
|
94 |
||
95 |
(I've pasted it in the body of this message)
|
|
96 |
||
97 |
Aaron
|
|
98 |
||
|
2520.4.136
by Aaron Bentley
Fix format strings |
99 |
# Bazaar merge directive format 2 (Bazaar 0.19)\r |
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
100 |
# revision_id: example:
|
101 |
# target_branch: http://example.com
|
|
102 |
# testament_sha1: sha
|
|
103 |
# timestamp: 1970-01-01 00:09:33 +0002
|
|
104 |
# source_branch: http://example.org
|
|
|
2520.4.105
by Aaron Bentley
Implement patch verification |
105 |
# base_revision_id: null:
|
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
106 |
# message: Hi mom!
|
107 |
#\x20 |
|
108 |
# Begin patch
|
|
109 |
booga""".splitlines(True) |
|
110 |
||
111 |
||
112 |
class TestMergeDirective(object): |
|
|
1551.12.2
by Aaron Bentley
Got directives round-tripping, with bundles and everything |
113 |
|
|
1551.12.41
by Aaron Bentley
Clean up tests, add serialization text test |
114 |
def test_merge_source(self): |
|
2425.6.1
by Martin Pool
Fix formatting of timezones in bundles and merge directives. |
115 |
time = 500000.0 |
116 |
timezone = 5 * 3600 |
|
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
117 |
self.assertRaises(errors.NoMergeSource, self.make_merge_directive, |
|
1551.12.3
by Aaron Bentley
Add timestamps to merge directives |
118 |
'example:', 'sha', time, timezone, 'http://example.com') |
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
119 |
self.assertRaises(errors.NoMergeSource, self.make_merge_directive, |
|
1551.12.3
by Aaron Bentley
Add timestamps to merge directives |
120 |
'example:', 'sha', time, timezone, 'http://example.com', |
121 |
patch_type='diff') |
|
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
122 |
self.make_merge_directive('example:', 'sha', time, timezone, |
|
1551.12.13
by Aaron Bentley
Rename fields |
123 |
'http://example.com', source_branch='http://example.org') |
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
124 |
md = self.make_merge_directive('null:', 'sha', time, timezone, |
|
1551.12.2
by Aaron Bentley
Got directives round-tripping, with bundles and everything |
125 |
'http://example.com', patch='blah', patch_type='bundle') |
|
1551.12.41
by Aaron Bentley
Clean up tests, add serialization text test |
126 |
self.assertIs(None, md.source_branch) |
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
127 |
md2 = self.make_merge_directive('null:', 'sha', time, timezone, |
|
1551.12.41
by Aaron Bentley
Clean up tests, add serialization text test |
128 |
'http://example.com', patch='blah', patch_type='bundle', |
129 |
source_branch='bar') |
|
130 |
self.assertEqual('bar', md2.source_branch) |
|
131 |
||
|
1551.12.2
by Aaron Bentley
Got directives round-tripping, with bundles and everything |
132 |
def test_serialization(self): |
|
2425.6.1
by Martin Pool
Fix formatting of timezones in bundles and merge directives. |
133 |
time = 453 |
134 |
timezone = 120 |
|
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
135 |
md = self.make_merge_directive('example:', 'sha', time, timezone, |
|
1551.12.41
by Aaron Bentley
Clean up tests, add serialization text test |
136 |
'http://example.com', patch='booga', patch_type='bundle') |
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
137 |
self.assertEqualDiff(self.OUTPUT1, ''.join(md.to_lines())) |
138 |
md = self.make_merge_directive('example:', 'sha', time, timezone, |
|
|
1551.12.41
by Aaron Bentley
Clean up tests, add serialization text test |
139 |
'http://example.com', source_branch="http://example.org", |
140 |
patch='booga', patch_type='diff', message="Hi mom!") |
|
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
141 |
self.assertEqualDiff(self.OUTPUT2, ''.join(md.to_lines())) |
|
1551.12.41
by Aaron Bentley
Clean up tests, add serialization text test |
142 |
|
|
1551.12.49
by Aaron Bentley
Proper error when deserializing junk |
143 |
def test_deserialize_junk(self): |
|
2425.6.1
by Martin Pool
Fix formatting of timezones in bundles and merge directives. |
144 |
time = 501 |
|
1551.12.49
by Aaron Bentley
Proper error when deserializing junk |
145 |
self.assertRaises(errors.NotAMergeDirective, |
146 |
merge_directive.MergeDirective.from_lines, 'lala') |
|
147 |
||
|
1551.12.59
by Aaron Bentley
Correctly handle empty merge directive texts |
148 |
def test_deserialize_empty(self): |
149 |
self.assertRaises(errors.NotAMergeDirective, |
|
150 |
merge_directive.MergeDirective.from_lines, []) |
|
151 |
||
|
1551.12.51
by Aaron Bentley
Allow leading junk before merge directive header |
152 |
def test_deserialize_leading_junk(self): |
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
153 |
md = merge_directive.MergeDirective.from_lines(self.INPUT1) |
|
1551.12.51
by Aaron Bentley
Allow leading junk before merge directive header |
154 |
self.assertEqual('example:', md.revision_id) |
155 |
self.assertEqual('sha', md.testament_sha1) |
|
156 |
self.assertEqual('http://example.com', md.target_branch) |
|
157 |
self.assertEqual('http://example.org', md.source_branch) |
|
|
2425.6.1
by Martin Pool
Fix formatting of timezones in bundles and merge directives. |
158 |
self.assertEqual(453, md.time) |
159 |
self.assertEqual(120, md.timezone) |
|
|
1551.12.51
by Aaron Bentley
Allow leading junk before merge directive header |
160 |
self.assertEqual('booga', md.patch) |
161 |
self.assertEqual('diff', md.patch_type) |
|
162 |
self.assertEqual('Hi mom!', md.message) |
|
|
1551.12.49
by Aaron Bentley
Proper error when deserializing junk |
163 |
|
|
1551.12.41
by Aaron Bentley
Clean up tests, add serialization text test |
164 |
def test_roundtrip(self): |
|
2425.6.1
by Martin Pool
Fix formatting of timezones in bundles and merge directives. |
165 |
time = 500000 |
166 |
timezone = 7.5 * 3600 |
|
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
167 |
md = self.make_merge_directive('example:', 'sha', time, timezone, |
|
1551.12.13
by Aaron Bentley
Rename fields |
168 |
'http://example.com', source_branch="http://example.org", |
|
1551.12.2
by Aaron Bentley
Got directives round-tripping, with bundles and everything |
169 |
patch='booga', patch_type='diff') |
170 |
md2 = merge_directive.MergeDirective.from_lines(md.to_lines()) |
|
|
1551.12.5
by Aaron Bentley
Get MergeDirective.from_objects working |
171 |
self.assertEqual('example:', md2.revision_id) |
|
1551.12.54
by Aaron Bentley
Decoded revision ids are utf-8 |
172 |
self.assertIsInstance(md2.revision_id, str) |
|
1551.12.2
by Aaron Bentley
Got directives round-tripping, with bundles and everything |
173 |
self.assertEqual('sha', md2.testament_sha1) |
|
1551.12.13
by Aaron Bentley
Rename fields |
174 |
self.assertEqual('http://example.com', md2.target_branch) |
175 |
self.assertEqual('http://example.org', md2.source_branch) |
|
|
1551.12.3
by Aaron Bentley
Add timestamps to merge directives |
176 |
self.assertEqual(time, md2.time) |
177 |
self.assertEqual(timezone, md2.timezone) |
|
|
1551.12.2
by Aaron Bentley
Got directives round-tripping, with bundles and everything |
178 |
self.assertEqual('diff', md2.patch_type) |
179 |
self.assertEqual('booga', md2.patch) |
|
|
1551.12.26
by Aaron Bentley
Get email working, with optional message |
180 |
self.assertEqual(None, md2.message) |
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
181 |
self.set_bundle(md, "# Bazaar revision bundle v0.9\n#\n") |
|
1551.12.26
by Aaron Bentley
Get email working, with optional message |
182 |
md.message = "Hi mom!" |
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
183 |
lines = md.to_lines() |
184 |
md3 = merge_directive.MergeDirective.from_lines(lines) |
|
185 |
self.assertEqual("# Bazaar revision bundle v0.9\n#\n", md3.bundle) |
|
|
1551.12.2
by Aaron Bentley
Got directives round-tripping, with bundles and everything |
186 |
self.assertEqual("bundle", md3.patch_type) |
|
1551.12.12
by Aaron Bentley
Add format header |
187 |
self.assertContainsRe(md3.to_lines()[0], |
188 |
'^# Bazaar merge directive format ') |
|
|
1551.12.26
by Aaron Bentley
Get email working, with optional message |
189 |
self.assertEqual("Hi mom!", md3.message) |
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
190 |
md3.clear_payload() |
|
2520.4.80
by Aaron Bentley
Improve merge directive tests |
191 |
self.assertIs(None, md3.get_raw_bundle()) |
|
1551.12.53
by Aaron Bentley
Fix deserialization of merge directives with no patch |
192 |
md4 = merge_directive.MergeDirective.from_lines(md3.to_lines()) |
193 |
self.assertIs(None, md4.patch_type) |
|
|
1551.12.26
by Aaron Bentley
Get email working, with optional message |
194 |
|
195 |
||
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
196 |
class TestMergeDirective1(tests.TestCase, TestMergeDirective): |
197 |
"""Test merge directive format 1""" |
|
198 |
||
199 |
INPUT1 = INPUT1 |
|
200 |
||
201 |
OUTPUT1 = OUTPUT1 |
|
202 |
||
203 |
OUTPUT2 = OUTPUT2 |
|
204 |
||
205 |
def make_merge_directive(self, revision_id, testament_sha1, time, timezone, |
|
206 |
target_branch, patch=None, patch_type=None, |
|
207 |
source_branch=None, message=None): |
|
208 |
return merge_directive.MergeDirective(revision_id, testament_sha1, |
|
209 |
time, timezone, target_branch, patch, patch_type, |
|
210 |
source_branch, message) |
|
211 |
||
212 |
@staticmethod
|
|
213 |
def set_bundle(md, value): |
|
214 |
md.patch = value |
|
215 |
||
216 |
def test_require_patch(self): |
|
217 |
time = 500.0 |
|
218 |
timezone = 120 |
|
219 |
self.assertRaises(errors.PatchMissing, merge_directive.MergeDirective, |
|
220 |
'example:', 'sha', time, timezone, 'http://example.com', |
|
221 |
patch_type='bundle') |
|
222 |
md = merge_directive.MergeDirective('example:', 'sha1', time, timezone, |
|
223 |
'http://example.com', source_branch="http://example.org", |
|
224 |
patch='', patch_type='diff') |
|
225 |
self.assertEqual(md.patch, '') |
|
226 |
||
227 |
||
228 |
class TestMergeDirective2(tests.TestCase, TestMergeDirective): |
|
229 |
"""Test merge directive format 2""" |
|
230 |
||
231 |
INPUT1 = INPUT1_2 |
|
232 |
||
233 |
OUTPUT1 = OUTPUT1_2 |
|
234 |
||
235 |
OUTPUT2 = OUTPUT2_2 |
|
236 |
||
237 |
def make_merge_directive(self, revision_id, testament_sha1, time, timezone, |
|
238 |
target_branch, patch=None, patch_type=None, |
|
|
2520.4.105
by Aaron Bentley
Implement patch verification |
239 |
source_branch=None, message=None, base_revision_id='null:'): |
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
240 |
if patch_type == 'bundle': |
241 |
bundle = patch |
|
242 |
patch = None |
|
243 |
else: |
|
244 |
bundle = None |
|
245 |
return merge_directive.MergeDirective2(revision_id, testament_sha1, |
|
246 |
time, timezone, target_branch, patch, source_branch, message, |
|
|
2520.4.105
by Aaron Bentley
Implement patch verification |
247 |
bundle, base_revision_id) |
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
248 |
|
249 |
@staticmethod
|
|
250 |
def set_bundle(md, value): |
|
251 |
md.bundle = value |
|
252 |
||
253 |
||
|
2625.6.1
by Adeodato Simó
New EmailMessage class, façade around email.Message and MIMEMultipart. |
254 |
EMAIL1 = """From: "J. Random Hacker" <jrandom@example.com> |
|
1551.12.26
by Aaron Bentley
Get email working, with optional message |
255 |
Subject: Commit of rev2a
|
|
2625.6.1
by Adeodato Simó
New EmailMessage class, façade around email.Message and MIMEMultipart. |
256 |
To: pqm@example.com
|
257 |
User-Agent: Bazaar \(.*\)
|
|
|
1551.12.26
by Aaron Bentley
Get email working, with optional message |
258 |
|
|
1551.12.45
by Aaron Bentley
Change format marker to not experimental |
259 |
# Bazaar merge directive format 1
|
|
1551.12.26
by Aaron Bentley
Get email working, with optional message |
260 |
# revision_id: rev2a
|
261 |
# target_branch: (.|\n)* |
|
262 |
# testament_sha1: .*
|
|
|
1551.12.30
by Aaron Bentley
Use patch-style dates for timestamps in merge directives |
263 |
# timestamp: 1970-01-01 00:08:56 \\+0001 |
|
1551.12.26
by Aaron Bentley
Get email working, with optional message |
264 |
# source_branch: (.|\n)* |
265 |
"""
|
|
266 |
||
267 |
||
|
2625.6.2
by Adeodato Simó
Merge bzr.dev, resolving conflicts and updating test_merge_directive.py. |
268 |
EMAIL1_2 = """From: "J. Random Hacker" <jrandom@example.com> |
|
2520.4.80
by Aaron Bentley
Improve merge directive tests |
269 |
Subject: Commit of rev2a
|
|
2625.6.2
by Adeodato Simó
Merge bzr.dev, resolving conflicts and updating test_merge_directive.py. |
270 |
To: pqm@example.com
|
271 |
User-Agent: Bazaar \(.*\)
|
|
|
2520.4.80
by Aaron Bentley
Improve merge directive tests |
272 |
|
|
2520.4.136
by Aaron Bentley
Fix format strings |
273 |
# Bazaar merge directive format 2 \\(Bazaar 0.19\\) |
|
2520.4.80
by Aaron Bentley
Improve merge directive tests |
274 |
# revision_id: rev2a
|
275 |
# target_branch: (.|\n)* |
|
276 |
# testament_sha1: .*
|
|
277 |
# timestamp: 1970-01-01 00:08:56 \\+0001 |
|
278 |
# source_branch: (.|\n)* |
|
279 |
"""
|
|
280 |
||
281 |
||
|
2625.6.1
by Adeodato Simó
New EmailMessage class, façade around email.Message and MIMEMultipart. |
282 |
EMAIL2 = """From: "J. Random Hacker" <jrandom@example.com> |
|
1551.12.26
by Aaron Bentley
Get email working, with optional message |
283 |
Subject: Commit of rev2a with special message
|
|
2625.6.1
by Adeodato Simó
New EmailMessage class, façade around email.Message and MIMEMultipart. |
284 |
To: pqm@example.com
|
285 |
User-Agent: Bazaar \(.*\)
|
|
|
1551.12.26
by Aaron Bentley
Get email working, with optional message |
286 |
|
|
1551.12.45
by Aaron Bentley
Change format marker to not experimental |
287 |
# Bazaar merge directive format 1
|
|
1551.12.26
by Aaron Bentley
Get email working, with optional message |
288 |
# revision_id: rev2a
|
289 |
# target_branch: (.|\n)* |
|
290 |
# testament_sha1: .*
|
|
|
1551.12.30
by Aaron Bentley
Use patch-style dates for timestamps in merge directives |
291 |
# timestamp: 1970-01-01 00:08:56 \\+0001 |
|
1551.12.26
by Aaron Bentley
Get email working, with optional message |
292 |
# source_branch: (.|\n)* |
293 |
# message: Commit of rev2a with special message
|
|
294 |
"""
|
|
|
1551.12.4
by Aaron Bentley
Add failing test |
295 |
|
|
2625.6.2
by Adeodato Simó
Merge bzr.dev, resolving conflicts and updating test_merge_directive.py. |
296 |
EMAIL2_2 = """From: "J. Random Hacker" <jrandom@example.com> |
|
2520.4.80
by Aaron Bentley
Improve merge directive tests |
297 |
Subject: Commit of rev2a with special message
|
|
2625.6.2
by Adeodato Simó
Merge bzr.dev, resolving conflicts and updating test_merge_directive.py. |
298 |
To: pqm@example.com
|
299 |
User-Agent: Bazaar \(.*\)
|
|
|
2520.4.80
by Aaron Bentley
Improve merge directive tests |
300 |
|
|
2520.4.136
by Aaron Bentley
Fix format strings |
301 |
# Bazaar merge directive format 2 \\(Bazaar 0.19\\) |
|
2520.4.80
by Aaron Bentley
Improve merge directive tests |
302 |
# revision_id: rev2a
|
303 |
# target_branch: (.|\n)* |
|
304 |
# testament_sha1: .*
|
|
305 |
# timestamp: 1970-01-01 00:08:56 \\+0001 |
|
306 |
# source_branch: (.|\n)* |
|
307 |
# message: Commit of rev2a with special message
|
|
308 |
"""
|
|
|
1551.12.4
by Aaron Bentley
Add failing test |
309 |
|
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
310 |
class TestMergeDirectiveBranch(object): |
|
1551.12.4
by Aaron Bentley
Add failing test |
311 |
|
|
1551.12.26
by Aaron Bentley
Get email working, with optional message |
312 |
def make_trees(self): |
|
1551.12.4
by Aaron Bentley
Add failing test |
313 |
tree_a = self.make_branch_and_tree('tree_a') |
|
1551.12.26
by Aaron Bentley
Get email working, with optional message |
314 |
tree_a.branch.get_config().set_user_option('email', |
315 |
'J. Random Hacker <jrandom@example.com>') |
|
|
1551.12.4
by Aaron Bentley
Add failing test |
316 |
self.build_tree_contents([('tree_a/file', 'content_a\ncontent_b\n')]) |
317 |
tree_a.add('file') |
|
318 |
tree_a.commit('message', rev_id='rev1') |
|
319 |
tree_b = tree_a.bzrdir.sprout('tree_b').open_workingtree() |
|
|
1551.12.5
by Aaron Bentley
Get MergeDirective.from_objects working |
320 |
branch_c = tree_a.bzrdir.sprout('branch_c').open_branch() |
|
1551.12.4
by Aaron Bentley
Add failing test |
321 |
tree_b.commit('message', rev_id='rev2b') |
|
2520.4.105
by Aaron Bentley
Implement patch verification |
322 |
self.build_tree_contents([('tree_a/file', 'content_a\ncontent_c \n')]) |
|
1551.12.26
by Aaron Bentley
Get email working, with optional message |
323 |
tree_a.commit('Commit of rev2a', rev_id='rev2a') |
324 |
return tree_a, tree_b, branch_c |
|
325 |
||
|
2490.2.28
by Aaron Bentley
Fix handling of null revision |
326 |
def test_empty_target(self): |
327 |
tree_a, tree_b, branch_c = self.make_trees() |
|
328 |
tree_d = self.make_branch_and_tree('tree_d') |
|
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
329 |
md2 = self.from_objects(tree_a.branch.repository, 'rev2a', 500, 120, |
330 |
tree_d.branch.base, patch_type='diff', |
|
331 |
public_branch=tree_a.branch.base) |
|
|
2490.2.28
by Aaron Bentley
Fix handling of null revision |
332 |
|
|
1551.12.41
by Aaron Bentley
Clean up tests, add serialization text test |
333 |
def test_generate_patch(self): |
334 |
tree_a, tree_b, branch_c = self.make_trees() |
|
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
335 |
md2 = self.from_objects(tree_a.branch.repository, 'rev2a', 500, 120, |
336 |
tree_b.branch.base, patch_type='diff', |
|
337 |
public_branch=tree_a.branch.base) |
|
|
1551.12.41
by Aaron Bentley
Clean up tests, add serialization text test |
338 |
self.assertNotContainsRe(md2.patch, 'Bazaar revision bundle') |
339 |
self.assertContainsRe(md2.patch, '\\+content_c') |
|
340 |
self.assertNotContainsRe(md2.patch, '\\+\\+\\+ b/') |
|
341 |
self.assertContainsRe(md2.patch, '\\+\\+\\+ file') |
|
342 |
||
343 |
def test_public_branch(self): |
|
|
1551.12.26
by Aaron Bentley
Get email working, with optional message |
344 |
tree_a, tree_b, branch_c = self.make_trees() |
|
1551.12.5
by Aaron Bentley
Get MergeDirective.from_objects working |
345 |
self.assertRaises(errors.PublicBranchOutOfDate, |
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
346 |
self.from_objects, tree_a.branch.repository, 'rev2a', 500, 144, |
347 |
tree_b.branch.base, public_branch=branch_c.base, patch_type='diff') |
|
|
2520.5.4
by Aaron Bentley
Replace 'bundle-revisions' with 'submit' command |
348 |
self.assertRaises(errors.PublicBranchOutOfDate, |
349 |
self.from_objects, tree_a.branch.repository, 'rev2a', 500, 144, |
|
350 |
tree_b.branch.base, public_branch=branch_c.base, patch_type=None) |
|
|
1551.12.34
by Aaron Bentley
Check public branch only if not using a bundle |
351 |
# public branch is not checked if patch format is bundle.
|
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
352 |
md1 = self.from_objects(tree_a.branch.repository, 'rev2a', 500, 144, |
353 |
tree_b.branch.base, public_branch=branch_c.base) |
|
|
1551.12.34
by Aaron Bentley
Check public branch only if not using a bundle |
354 |
# public branch is provided with a bundle, despite possibly being out
|
355 |
# of date, because it's not required if a bundle is present.
|
|
356 |
self.assertEqual(md1.source_branch, branch_c.base) |
|
|
1551.12.41
by Aaron Bentley
Clean up tests, add serialization text test |
357 |
# Once we update the public branch, we can generate a diff.
|
|
1551.12.5
by Aaron Bentley
Get MergeDirective.from_objects working |
358 |
branch_c.pull(tree_a.branch) |
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
359 |
md3 = self.from_objects(tree_a.branch.repository, 'rev2a', 500, 144, |
360 |
tree_b.branch.base, patch_type=None, public_branch=branch_c.base) |
|
|
1551.12.41
by Aaron Bentley
Clean up tests, add serialization text test |
361 |
|
|
1551.12.50
by Aaron Bentley
Use public location of submit branch if possible |
362 |
def test_use_public_submit_branch(self): |
363 |
tree_a, tree_b, branch_c = self.make_trees() |
|
364 |
branch_c.pull(tree_a.branch) |
|
|
2520.4.80
by Aaron Bentley
Improve merge directive tests |
365 |
md = self.from_objects(tree_a.branch.repository, 'rev2a', 500, 144, |
366 |
tree_b.branch.base, patch_type=None, public_branch=branch_c.base) |
|
|
1551.12.50
by Aaron Bentley
Use public location of submit branch if possible |
367 |
self.assertEqual(md.target_branch, tree_b.branch.base) |
368 |
tree_b.branch.set_public_branch('http://example.com') |
|
|
2520.4.80
by Aaron Bentley
Improve merge directive tests |
369 |
md2 = self.from_objects( |
|
1551.12.50
by Aaron Bentley
Use public location of submit branch if possible |
370 |
tree_a.branch.repository, 'rev2a', 500, 144, tree_b.branch.base, |
371 |
patch_type=None, public_branch=branch_c.base) |
|
372 |
self.assertEqual(md2.target_branch, 'http://example.com') |
|
373 |
||
|
1551.12.41
by Aaron Bentley
Clean up tests, add serialization text test |
374 |
def test_message(self): |
375 |
tree_a, tree_b, branch_c = self.make_trees() |
|
|
2520.5.4
by Aaron Bentley
Replace 'bundle-revisions' with 'submit' command |
376 |
md3 = self.from_objects(tree_a.branch.repository, 'rev1', 500, 120, |
|
2520.4.80
by Aaron Bentley
Improve merge directive tests |
377 |
tree_b.branch.base, patch_type=None, public_branch=branch_c.base, |
|
1551.12.33
by Aaron Bentley
Take public_branch as a string, not object |
378 |
message='Merge message') |
|
1551.12.7
by Aaron Bentley
Fix use of public location/branch |
379 |
md3.to_lines() |
|
1551.12.5
by Aaron Bentley
Get MergeDirective.from_objects working |
380 |
self.assertIs(None, md3.patch) |
|
1551.12.27
by Aaron Bentley
support custom message everywhere |
381 |
self.assertEqual('Merge message', md3.message) |
|
1551.12.16
by Aaron Bentley
Enable signing merge directives |
382 |
|
|
1551.12.41
by Aaron Bentley
Clean up tests, add serialization text test |
383 |
def test_generate_bundle(self): |
|
1551.12.40
by Aaron Bentley
Do not show prefixes in diffs |
384 |
tree_a, tree_b, branch_c = self.make_trees() |
|
2520.4.80
by Aaron Bentley
Improve merge directive tests |
385 |
md1 = self.from_objects(tree_a.branch.repository, 'rev2a', 500, 120, |
386 |
tree_b.branch.base, public_branch=branch_c.base) |
|
387 |
||
388 |
self.assertContainsRe(md1.get_raw_bundle(), 'Bazaar revision bundle') |
|
|
1551.12.41
by Aaron Bentley
Clean up tests, add serialization text test |
389 |
self.assertContainsRe(md1.patch, '\\+content_c') |
390 |
self.assertNotContainsRe(md1.patch, '\\+content_a') |
|
391 |
self.assertContainsRe(md1.patch, '\\+content_c') |
|
392 |
self.assertNotContainsRe(md1.patch, '\\+content_a') |
|
|
1551.12.40
by Aaron Bentley
Do not show prefixes in diffs |
393 |
|
|
1551.15.29
by Aaron Bentley
Make merge directives robust against broken bundles |
394 |
def test_broken_bundle(self): |
395 |
tree_a, tree_b, branch_c = self.make_trees() |
|
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
396 |
md1 = self.from_objects(tree_a.branch.repository, 'rev2a', 500, 120, |
397 |
tree_b.branch.base, public_branch=branch_c.base) |
|
|
1551.15.29
by Aaron Bentley
Make merge directives robust against broken bundles |
398 |
lines = md1.to_lines() |
399 |
lines = [l.replace('\n', '\r\n') for l in lines] |
|
400 |
md2 = merge_directive.MergeDirective.from_lines(lines) |
|
401 |
self.assertEqual('rev2a', md2.revision_id) |
|
402 |
||
|
1551.12.16
by Aaron Bentley
Enable signing merge directives |
403 |
def test_signing(self): |
|
2425.6.1
by Martin Pool
Fix formatting of timezones in bundles and merge directives. |
404 |
time = 453 |
405 |
timezone = 7200 |
|
|
1551.12.16
by Aaron Bentley
Enable signing merge directives |
406 |
class FakeBranch(object): |
407 |
def get_config(self): |
|
408 |
return self |
|
409 |
def gpg_signing_command(self): |
|
410 |
return 'loopback' |
|
|
2520.4.80
by Aaron Bentley
Improve merge directive tests |
411 |
md = self.make_merge_directive('example:', 'sha', time, timezone, |
|
1551.12.16
by Aaron Bentley
Enable signing merge directives |
412 |
'http://example.com', source_branch="http://example.org", |
413 |
patch='booga', patch_type='diff') |
|
414 |
old_strategy = gpg.GPGStrategy |
|
415 |
gpg.GPGStrategy = gpg.LoopbackGPGStrategy |
|
416 |
try: |
|
417 |
signed = md.to_signed(FakeBranch()) |
|
418 |
finally: |
|
419 |
gpg.GPGStrategy = old_strategy |
|
420 |
self.assertContainsRe(signed, '^-----BEGIN PSEUDO-SIGNED CONTENT') |
|
421 |
self.assertContainsRe(signed, 'example.org') |
|
422 |
self.assertContainsRe(signed, 'booga') |
|
|
1551.12.26
by Aaron Bentley
Get email working, with optional message |
423 |
|
424 |
def test_email(self): |
|
425 |
tree_a, tree_b, branch_c = self.make_trees() |
|
|
2520.4.80
by Aaron Bentley
Improve merge directive tests |
426 |
md = self.from_objects(tree_a.branch.repository, 'rev2a', 476, 60, |
427 |
tree_b.branch.base, patch_type=None, |
|
428 |
public_branch=tree_a.branch.base) |
|
|
1551.12.26
by Aaron Bentley
Get email working, with optional message |
429 |
message = md.to_email('pqm@example.com', tree_a.branch) |
|
2520.4.80
by Aaron Bentley
Improve merge directive tests |
430 |
self.assertContainsRe(message.as_string(), self.EMAIL1) |
|
1551.12.26
by Aaron Bentley
Get email working, with optional message |
431 |
md.message = 'Commit of rev2a with special message' |
432 |
message = md.to_email('pqm@example.com', tree_a.branch) |
|
|
2520.4.80
by Aaron Bentley
Improve merge directive tests |
433 |
self.assertContainsRe(message.as_string(), self.EMAIL2) |
|
1551.14.4
by Aaron Bentley
Change bundle reader and merge directive to both be 'mergeables' |
434 |
|
|
1551.14.9
by Aaron Bentley
rename get_target_revision to install_revisions |
435 |
def test_install_revisions_branch(self): |
|
1551.14.4
by Aaron Bentley
Change bundle reader and merge directive to both be 'mergeables' |
436 |
tree_a, tree_b, branch_c = self.make_trees() |
|
2520.4.80
by Aaron Bentley
Improve merge directive tests |
437 |
md = self.from_objects(tree_a.branch.repository, 'rev2a', 500, 36, |
438 |
tree_b.branch.base, patch_type=None, |
|
439 |
public_branch=tree_a.branch.base) |
|
|
1551.14.4
by Aaron Bentley
Change bundle reader and merge directive to both be 'mergeables' |
440 |
self.assertFalse(tree_b.branch.repository.has_revision('rev2a')) |
|
1551.14.9
by Aaron Bentley
rename get_target_revision to install_revisions |
441 |
revision = md.install_revisions(tree_b.branch.repository) |
|
1551.14.4
by Aaron Bentley
Change bundle reader and merge directive to both be 'mergeables' |
442 |
self.assertEqual('rev2a', revision) |
443 |
self.assertTrue(tree_b.branch.repository.has_revision('rev2a')) |
|
444 |
||
|
2520.4.109
by Aaron Bentley
start work on directive cherry-picking |
445 |
def test_get_merge_request(self): |
|
2520.4.108
by Aaron Bentley
Start work on using merge base from directives |
446 |
tree_a, tree_b, branch_c = self.make_trees() |
447 |
md = self.from_objects(tree_a.branch.repository, 'rev2a', 500, 36, |
|
|
2520.4.109
by Aaron Bentley
start work on directive cherry-picking |
448 |
tree_b.branch.base, patch_type='bundle', |
449 |
public_branch=tree_a.branch.base) |
|
450 |
self.assertFalse(tree_b.branch.repository.has_revision('rev2a')) |
|
451 |
md.install_revisions(tree_b.branch.repository) |
|
452 |
base, revision, verified = md.get_merge_request( |
|
453 |
tree_b.branch.repository) |
|
454 |
if isinstance(md, merge_directive.MergeDirective): |
|
455 |
self.assertIs(None, base) |
|
456 |
self.assertEqual('inapplicable', verified) |
|
457 |
else: |
|
458 |
self.assertEqual('rev1', base) |
|
459 |
self.assertEqual('verified', verified) |
|
460 |
self.assertEqual('rev2a', revision) |
|
461 |
self.assertTrue(tree_b.branch.repository.has_revision('rev2a')) |
|
462 |
md = self.from_objects(tree_a.branch.repository, 'rev2a', 500, 36, |
|
|
2520.4.108
by Aaron Bentley
Start work on using merge base from directives |
463 |
tree_b.branch.base, patch_type=None, |
464 |
public_branch=tree_a.branch.base) |
|
|
2520.4.109
by Aaron Bentley
start work on directive cherry-picking |
465 |
base, revision, verified = md.get_merge_request( |
466 |
tree_b.branch.repository) |
|
467 |
if isinstance(md, merge_directive.MergeDirective): |
|
468 |
self.assertIs(None, base) |
|
469 |
self.assertEqual('inapplicable', verified) |
|
470 |
else: |
|
471 |
self.assertEqual('rev1', base) |
|
472 |
self.assertEqual('inapplicable', verified) |
|
473 |
md = self.from_objects(tree_a.branch.repository, 'rev2a', 500, 36, |
|
474 |
tree_b.branch.base, patch_type='diff', |
|
475 |
public_branch=tree_a.branch.base) |
|
476 |
base, revision, verified = md.get_merge_request( |
|
|
2520.4.108
by Aaron Bentley
Start work on using merge base from directives |
477 |
tree_b.branch.repository) |
478 |
if isinstance(md, merge_directive.MergeDirective): |
|
479 |
self.assertIs(None, base) |
|
480 |
self.assertEqual('inapplicable', verified) |
|
481 |
else: |
|
482 |
self.assertEqual('rev1', base) |
|
483 |
self.assertEqual('verified', verified) |
|
|
2520.4.109
by Aaron Bentley
start work on directive cherry-picking |
484 |
md.patch='asdf' |
485 |
base, revision, verified = md.get_merge_request( |
|
486 |
tree_b.branch.repository) |
|
487 |
if isinstance(md, merge_directive.MergeDirective): |
|
488 |
self.assertIs(None, base) |
|
489 |
self.assertEqual('inapplicable', verified) |
|
490 |
else: |
|
491 |
self.assertEqual('rev1', base) |
|
492 |
self.assertEqual('failed', verified) |
|
|
2520.4.108
by Aaron Bentley
Start work on using merge base from directives |
493 |
|
|
1551.14.9
by Aaron Bentley
rename get_target_revision to install_revisions |
494 |
def test_install_revisions_bundle(self): |
|
1551.14.4
by Aaron Bentley
Change bundle reader and merge directive to both be 'mergeables' |
495 |
tree_a, tree_b, branch_c = self.make_trees() |
|
2520.4.80
by Aaron Bentley
Improve merge directive tests |
496 |
md = self.from_objects(tree_a.branch.repository, 'rev2a', 500, 36, |
497 |
tree_b.branch.base, patch_type='bundle', |
|
498 |
public_branch=tree_a.branch.base) |
|
|
1551.14.4
by Aaron Bentley
Change bundle reader and merge directive to both be 'mergeables' |
499 |
self.assertFalse(tree_b.branch.repository.has_revision('rev2a')) |
|
1551.14.9
by Aaron Bentley
rename get_target_revision to install_revisions |
500 |
revision = md.install_revisions(tree_b.branch.repository) |
|
1551.14.4
by Aaron Bentley
Change bundle reader and merge directive to both be 'mergeables' |
501 |
self.assertEqual('rev2a', revision) |
502 |
self.assertTrue(tree_b.branch.repository.has_revision('rev2a')) |
|
503 |
||
504 |
def test_get_target_revision_nofetch(self): |
|
505 |
tree_a, tree_b, branch_c = self.make_trees() |
|
506 |
tree_b.branch.fetch(tree_a.branch) |
|
|
2520.4.80
by Aaron Bentley
Improve merge directive tests |
507 |
md = self.from_objects( tree_a.branch.repository, 'rev2a', 500, 36, |
508 |
tree_b.branch.base, patch_type=None, |
|
509 |
public_branch=tree_a.branch.base) |
|
|
1551.14.4
by Aaron Bentley
Change bundle reader and merge directive to both be 'mergeables' |
510 |
md.source_branch = '/dev/null' |
|
1551.14.9
by Aaron Bentley
rename get_target_revision to install_revisions |
511 |
revision = md.install_revisions(tree_b.branch.repository) |
|
1551.14.4
by Aaron Bentley
Change bundle reader and merge directive to both be 'mergeables' |
512 |
self.assertEqual('rev2a', revision) |
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
513 |
|
514 |
||
515 |
class TestMergeDirective1Branch(tests.TestCaseWithTransport, |
|
516 |
TestMergeDirectiveBranch): |
|
517 |
"""Test merge directive format 1 with a branch""" |
|
|
2520.4.80
by Aaron Bentley
Improve merge directive tests |
518 |
|
519 |
EMAIL1 = EMAIL1 |
|
520 |
||
521 |
EMAIL2 = EMAIL2 |
|
522 |
||
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
523 |
def from_objects(self, repository, revision_id, time, timezone, |
524 |
target_branch, patch_type='bundle', local_target_branch=None, |
|
525 |
public_branch=None, message=None): |
|
526 |
return merge_directive.MergeDirective.from_objects( |
|
527 |
repository, revision_id, time, timezone, target_branch, |
|
528 |
patch_type, local_target_branch, public_branch, message) |
|
529 |
||
|
2520.4.80
by Aaron Bentley
Improve merge directive tests |
530 |
def make_merge_directive(self, revision_id, testament_sha1, time, timezone, |
531 |
target_branch, patch=None, patch_type=None, |
|
532 |
source_branch=None, message=None): |
|
533 |
return merge_directive.MergeDirective(revision_id, testament_sha1, |
|
534 |
time, timezone, target_branch, patch, patch_type, |
|
535 |
source_branch, message) |
|
536 |
||
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
537 |
|
538 |
class TestMergeDirective2Branch(tests.TestCaseWithTransport, |
|
539 |
TestMergeDirectiveBranch): |
|
540 |
"""Test merge directive format 2 with a branch""" |
|
541 |
||
|
2520.4.80
by Aaron Bentley
Improve merge directive tests |
542 |
EMAIL1 = EMAIL1_2 |
543 |
||
544 |
EMAIL2 = EMAIL2_2 |
|
545 |
||
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
546 |
def from_objects(self, repository, revision_id, time, timezone, |
547 |
target_branch, patch_type='bundle', local_target_branch=None, |
|
|
2520.4.112
by Aaron Bentley
Make cherry-pick merge directives possible |
548 |
public_branch=None, message=None, base_revision_id=None): |
|
2520.5.4
by Aaron Bentley
Replace 'bundle-revisions' with 'submit' command |
549 |
include_patch = (patch_type in ('bundle', 'diff')) |
550 |
include_bundle = (patch_type == 'bundle') |
|
551 |
assert patch_type in ('bundle', 'diff', None) |
|
|
2520.4.73
by Aaron Bentley
Implement new merge directive format |
552 |
return merge_directive.MergeDirective2.from_objects( |
553 |
repository, revision_id, time, timezone, target_branch, |
|
|
2520.5.4
by Aaron Bentley
Replace 'bundle-revisions' with 'submit' command |
554 |
include_patch, include_bundle, local_target_branch, public_branch, |
555 |
message, base_revision_id) |
|
|
2520.4.80
by Aaron Bentley
Improve merge directive tests |
556 |
|
557 |
def make_merge_directive(self, revision_id, testament_sha1, time, timezone, |
|
558 |
target_branch, patch=None, patch_type=None, |
|
|
2520.4.105
by Aaron Bentley
Implement patch verification |
559 |
source_branch=None, message=None, base_revision_id='null:'): |
|
2520.4.80
by Aaron Bentley
Improve merge directive tests |
560 |
if patch_type == 'bundle': |
561 |
bundle = patch |
|
562 |
patch = None |
|
563 |
else: |
|
564 |
bundle = None |
|
565 |
return merge_directive.MergeDirective2(revision_id, testament_sha1, |
|
566 |
time, timezone, target_branch, patch, source_branch, message, |
|
|
2520.4.105
by Aaron Bentley
Implement patch verification |
567 |
bundle, base_revision_id) |
568 |
||
569 |
def test_base_revision(self): |
|
570 |
tree_a, tree_b, branch_c = self.make_trees() |
|
571 |
md = self.from_objects(tree_a.branch.repository, 'rev2a', 500, 60, |
|
572 |
tree_b.branch.base, patch_type='bundle', |
|
|
2520.4.112
by Aaron Bentley
Make cherry-pick merge directives possible |
573 |
public_branch=tree_a.branch.base, base_revision_id=None) |
|
2520.4.105
by Aaron Bentley
Implement patch verification |
574 |
self.assertEqual('rev1', md.base_revision_id) |
|
2520.4.112
by Aaron Bentley
Make cherry-pick merge directives possible |
575 |
md = self.from_objects(tree_a.branch.repository, 'rev2a', 500, 60, |
576 |
tree_b.branch.base, patch_type='bundle', |
|
577 |
public_branch=tree_a.branch.base, base_revision_id='null:') |
|
578 |
self.assertEqual('null:', md.base_revision_id) |
|
|
2520.4.105
by Aaron Bentley
Implement patch verification |
579 |
lines = md.to_lines() |
580 |
md2 = merge_directive.MergeDirective.from_lines(lines) |
|
581 |
self.assertEqual(md2.base_revision_id, md.base_revision_id) |
|
582 |
||
583 |
def test_patch_verification(self): |
|
584 |
tree_a, tree_b, branch_c = self.make_trees() |
|
585 |
md = self.from_objects(tree_a.branch.repository, 'rev2a', 500, 60, |
|
586 |
tree_b.branch.base, patch_type='bundle', |
|
587 |
public_branch=tree_a.branch.base) |
|
588 |
lines = md.to_lines() |
|
589 |
md2 = merge_directive.MergeDirective.from_lines(lines) |
|
590 |
md2._verify_patch(tree_a.branch.repository) |
|
591 |
# Stript trailing whitespace
|
|
592 |
md2.patch = md2.patch.replace(' \n', '\n') |
|
593 |
md2._verify_patch(tree_a.branch.repository) |
|
594 |
# Convert to Mac line-endings
|
|
595 |
md2.patch = md2.patch.replace('\n', '\r') |
|
|
2520.4.108
by Aaron Bentley
Start work on using merge base from directives |
596 |
self.assertTrue(md2._verify_patch(tree_a.branch.repository)) |
|
2520.4.105
by Aaron Bentley
Implement patch verification |
597 |
# Convert to DOS line-endings
|
598 |
md2.patch = md2.patch.replace('\r', '\r\n') |
|
|
2520.4.108
by Aaron Bentley
Start work on using merge base from directives |
599 |
self.assertTrue(md2._verify_patch(tree_a.branch.repository)) |
|
2520.4.105
by Aaron Bentley
Implement patch verification |
600 |
md2.patch = md2.patch.replace('content_c', 'content_d') |
|
2520.4.108
by Aaron Bentley
Start work on using merge base from directives |
601 |
self.assertFalse(md2._verify_patch(tree_a.branch.repository)) |