Merge lp:~gz/brz/known_graph_pyx into lp:brz
- known_graph_pyx
- Merge into trunk
Proposed by
Martin Packman
Status: | Merged |
---|---|
Approved by: | Jelmer Vernooij |
Approved revision: | no longer in the source branch. |
Merge reported by: | The Breezy Bot |
Merged at revision: | not available |
Proposed branch: | lp:~gz/brz/known_graph_pyx |
Merge into: | lp:brz |
Diff against target: |
306 lines (+114/-43) 2 files modified
breezy/_known_graph_pyx.pyx (+49/-43) python3.passing (+65/-0) |
To merge this branch: | bzr merge lp:~gz/brz/known_graph_pyx |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Jelmer Vernooij | Approve | ||
Review via email: mp+348806@code.launchpad.net |
Commit message
Update _known_graph_pyx and expect to pass on Python 3
Description of the change
Modernise the cython imports and update set of passing tests to include extension module.
To post a comment you must log in.
Revision history for this message
Jelmer Vernooij (jelmer) : | # |
review:
Approve
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'breezy/_known_graph_pyx.pyx' |
2 | --- breezy/_known_graph_pyx.pyx 2017-10-28 12:46:54 +0000 |
3 | +++ breezy/_known_graph_pyx.pyx 2018-07-01 22:25:35 +0000 |
4 | @@ -22,36 +22,39 @@ |
5 | cdef extern from "python-compat.h": |
6 | pass |
7 | |
8 | -cdef extern from "Python.h": |
9 | - ctypedef int Py_ssize_t |
10 | - ctypedef struct PyObject: |
11 | - pass |
12 | - |
13 | - int PyString_CheckExact(object) |
14 | - |
15 | - int PyObject_RichCompareBool(object, object, int) |
16 | - int Py_LT |
17 | - |
18 | - int PyTuple_CheckExact(object) |
19 | - object PyTuple_New(Py_ssize_t n) |
20 | - Py_ssize_t PyTuple_GET_SIZE(object t) |
21 | - PyObject * PyTuple_GET_ITEM(object t, Py_ssize_t o) |
22 | - void PyTuple_SET_ITEM(object t, Py_ssize_t o, object v) |
23 | - |
24 | - int PyList_CheckExact(object) |
25 | - Py_ssize_t PyList_GET_SIZE(object l) |
26 | - PyObject * PyList_GET_ITEM(object l, Py_ssize_t o) |
27 | - int PyList_SetItem(object l, Py_ssize_t o, object l) except -1 |
28 | - int PyList_Append(object l, object v) except -1 |
29 | - |
30 | - int PyDict_CheckExact(object d) |
31 | - Py_ssize_t PyDict_Size(object d) except -1 |
32 | - PyObject * PyDict_GetItem(object d, object k) |
33 | - int PyDict_SetItem(object d, object k, object v) except -1 |
34 | - int PyDict_DelItem(object d, object k) except -1 |
35 | - int PyDict_Next(object d, Py_ssize_t *pos, PyObject **k, PyObject **v) |
36 | - |
37 | - void Py_INCREF(object) |
38 | +from cpython.bytes cimport ( |
39 | + PyBytes_CheckExact, |
40 | + ) |
41 | +from cpython.dict cimport ( |
42 | + PyDict_CheckExact, |
43 | + PyDict_DelItem, |
44 | + PyDict_GetItem, |
45 | + PyDict_Next, |
46 | + PyDict_SetItem, |
47 | + PyDict_Size, |
48 | + ) |
49 | +from cpython.list cimport ( |
50 | + PyList_Append, |
51 | + PyList_CheckExact, |
52 | + PyList_GET_SIZE, |
53 | + PyList_GET_ITEM, |
54 | + PyList_SetItem, |
55 | + ) |
56 | +from cpython.object cimport ( |
57 | + Py_LT, |
58 | + PyObject, |
59 | + PyObject_RichCompareBool, |
60 | + ) |
61 | +from cpython.ref cimport ( |
62 | + Py_INCREF, |
63 | + ) |
64 | +from cpython.tuple cimport ( |
65 | + PyTuple_CheckExact, |
66 | + PyTuple_GET_SIZE, |
67 | + PyTuple_GET_ITEM, |
68 | + PyTuple_New, |
69 | + PyTuple_SET_ITEM, |
70 | + ) |
71 | |
72 | import collections |
73 | import gc |
74 | @@ -95,14 +98,14 @@ |
75 | def __get__(self): |
76 | if self.parents is None: |
77 | return None |
78 | - |
79 | + |
80 | cdef _KnownGraphNode parent |
81 | |
82 | keys = [] |
83 | for parent in self.parents: |
84 | PyList_Append(keys, parent.key) |
85 | return keys |
86 | - |
87 | + |
88 | cdef clear_references(self): |
89 | self.parents = None |
90 | self.children = None |
91 | @@ -266,7 +269,9 @@ |
92 | - all nodes found will also have child_keys populated with all known |
93 | child keys, |
94 | """ |
95 | - cdef PyObject *temp_key, *temp_parent_keys, *temp_node |
96 | + cdef PyObject *temp_key |
97 | + cdef PyObject *temp_parent_keys |
98 | + cdef PyObject *temp_node |
99 | cdef Py_ssize_t pos |
100 | cdef _KnownGraphNode node |
101 | cdef _KnownGraphNode parent_node |
102 | @@ -348,7 +353,7 @@ |
103 | |
104 | If this fills in a ghost, then the gdfos of all children will be |
105 | updated accordingly. |
106 | - |
107 | + |
108 | :param key: The node being added. If this is a duplicate, this is a |
109 | no-op. |
110 | :param parent_keys: The parents of the given node. |
111 | @@ -579,7 +584,7 @@ |
112 | prefix_tips = {} |
113 | for pos from 0 <= pos < PyList_GET_SIZE(tips): |
114 | node = _get_list_node(tips, pos) |
115 | - if PyString_CheckExact(node.key) or len(node.key) == 1: |
116 | + if PyBytes_CheckExact(node.key) or len(node.key) == 1: |
117 | prefix = '' |
118 | else: |
119 | prefix = node.key[0] |
120 | @@ -640,29 +645,29 @@ |
121 | # shown a specific impact, yet. |
122 | sorter = _MergeSorter(self, tip_key) |
123 | return sorter.topo_order() |
124 | - |
125 | + |
126 | def get_parent_keys(self, key): |
127 | """Get the parents for a key |
128 | - |
129 | + |
130 | Returns a list containg the parents keys. If the key is a ghost, |
131 | None is returned. A KeyError will be raised if the key is not in |
132 | the graph. |
133 | - |
134 | + |
135 | :param keys: Key to check (eg revision_id) |
136 | :return: A list of parents |
137 | """ |
138 | - return self._nodes[key].parent_keys |
139 | + return self._nodes[key].parent_keys |
140 | |
141 | def get_child_keys(self, key): |
142 | """Get the children for a key |
143 | - |
144 | + |
145 | Returns a list containg the children keys. A KeyError will be raised |
146 | if the key is not in the graph. |
147 | - |
148 | + |
149 | :param keys: Key to check (eg revision_id) |
150 | :return: A list of children |
151 | """ |
152 | - return self._nodes[key].child_keys |
153 | + return self._nodes[key].child_keys |
154 | |
155 | |
156 | cdef class _MergeSortNode: |
157 | @@ -929,7 +934,8 @@ |
158 | cdef _MergeSortNode ms_node |
159 | cdef _KnownGraphNode node |
160 | cdef Py_ssize_t pos |
161 | - cdef PyObject *temp_key, *temp_node |
162 | + cdef PyObject *temp_key |
163 | + cdef PyObject *temp_node |
164 | |
165 | # Note: allocating a _MergeSortNode and deallocating it for all nodes |
166 | # costs approx 8.52ms (21%) of the total runtime |
167 | |
168 | === modified file 'python3.passing' |
169 | --- python3.passing 2018-07-01 21:50:14 +0000 |
170 | +++ python3.passing 2018-07-01 22:25:35 +0000 |
171 | @@ -17510,70 +17510,135 @@ |
172 | breezy.tests.test_knit.TestStacking.test_iter_lines_added_or_present_in_keys |
173 | breezy.tests.test_knit.TestStacking.test_keys |
174 | breezy.tests.test_knit.TestStacking.test_make_mpdiffs |
175 | +breezy.tests.test__known_graph.TestKnownGraphHeads.test_filling_in_ghosts_resets_head_cache(C) |
176 | +breezy.tests.test__known_graph.TestKnownGraphHeads.test_filling_in_ghosts_resets_head_cache(C-nocache) |
177 | breezy.tests.test__known_graph.TestKnownGraphHeads.test_filling_in_ghosts_resets_head_cache(python) |
178 | breezy.tests.test__known_graph.TestKnownGraphHeads.test_filling_in_ghosts_resets_head_cache(python-nocache) |
179 | +breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_alt_merge(C) |
180 | +breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_alt_merge(C-nocache) |
181 | breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_alt_merge(python) |
182 | breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_alt_merge(python-nocache) |
183 | +breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_criss_cross(C) |
184 | +breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_criss_cross(C-nocache) |
185 | breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_criss_cross(python) |
186 | breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_criss_cross(python-nocache) |
187 | +breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_linear(C) |
188 | +breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_linear(C-nocache) |
189 | breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_linear(python) |
190 | breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_linear(python-nocache) |
191 | +breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_null(C) |
192 | +breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_null(C-nocache) |
193 | breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_null(python) |
194 | breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_null(python-nocache) |
195 | +breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_one(C) |
196 | +breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_one(C-nocache) |
197 | breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_one(python) |
198 | breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_one(python-nocache) |
199 | +breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_shortcut(C) |
200 | +breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_shortcut(C-nocache) |
201 | breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_shortcut(python) |
202 | breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_shortcut(python-nocache) |
203 | +breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_single(C) |
204 | +breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_single(C-nocache) |
205 | breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_single(python) |
206 | breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_single(python-nocache) |
207 | +breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_two_heads(C) |
208 | +breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_two_heads(C-nocache) |
209 | breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_two_heads(python) |
210 | breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_two_heads(python-nocache) |
211 | +breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_with_ghost(C) |
212 | +breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_with_ghost(C-nocache) |
213 | breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_with_ghost(python) |
214 | breezy.tests.test__known_graph.TestKnownGraphHeads.test_heads_with_ghost(python-nocache) |
215 | +breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_dotted_revnos_with_simple_merges(C) |
216 | breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_dotted_revnos_with_simple_merges(python) |
217 | +breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_end_of_merge_multiple_revisions_merged_at_once(C) |
218 | breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_end_of_merge_multiple_revisions_merged_at_once(python) |
219 | +breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_end_of_merge_not_last_revision_in_branch(C) |
220 | breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_end_of_merge_not_last_revision_in_branch(python) |
221 | +breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_ghost(C) |
222 | breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_ghost(python) |
223 | +breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_graph_cycle(C) |
224 | breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_graph_cycle(python) |
225 | +breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_lefthand_ghost(C) |
226 | breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_lefthand_ghost(python) |
227 | +breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_merge_depth_with_nested_merges(C) |
228 | breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_merge_depth_with_nested_merges(python) |
229 | +breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_merge_sort_empty(C) |
230 | breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_merge_sort_empty(python) |
231 | +breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_merge_sort_not_empty_no_tip(C) |
232 | breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_merge_sort_not_empty_no_tip(python) |
233 | +breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_merge_sort_one_revision(C) |
234 | breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_merge_sort_one_revision(python) |
235 | +breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_merge_sort_race(C) |
236 | breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_merge_sort_race(python) |
237 | +breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_parallel_root_sequence_numbers_increase_with_merges(C) |
238 | breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_parallel_root_sequence_numbers_increase_with_merges(python) |
239 | +breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_revnos_are_globally_assigned(C) |
240 | breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_revnos_are_globally_assigned(python) |
241 | +breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_roots_and_sub_branches_versus_ghosts(C) |
242 | breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_roots_and_sub_branches_versus_ghosts(python) |
243 | +breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_sequence_numbers_increase_no_merges(C) |
244 | breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_sequence_numbers_increase_no_merges(python) |
245 | +breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_sequence_numbers_increase_with_merges(C) |
246 | breezy.tests.test__known_graph.TestKnownGraphMergeSort.test_sequence_numbers_increase_with_merges(python) |
247 | +breezy.tests.test__known_graph.TestKnownGraphStableReverseTopoSort.test_empty(C) |
248 | breezy.tests.test__known_graph.TestKnownGraphStableReverseTopoSort.test_empty(python) |
249 | +breezy.tests.test__known_graph.TestKnownGraphStableReverseTopoSort.test_linear(C) |
250 | breezy.tests.test__known_graph.TestKnownGraphStableReverseTopoSort.test_linear(python) |
251 | +breezy.tests.test__known_graph.TestKnownGraphStableReverseTopoSort.test_mixed_ancestries(C) |
252 | breezy.tests.test__known_graph.TestKnownGraphStableReverseTopoSort.test_mixed_ancestries(python) |
253 | +breezy.tests.test__known_graph.TestKnownGraphStableReverseTopoSort.test_single(C) |
254 | breezy.tests.test__known_graph.TestKnownGraphStableReverseTopoSort.test_single(python) |
255 | +breezy.tests.test__known_graph.TestKnownGraphStableReverseTopoSort.test_skip_ghost(C) |
256 | breezy.tests.test__known_graph.TestKnownGraphStableReverseTopoSort.test_skip_ghost(python) |
257 | +breezy.tests.test__known_graph.TestKnownGraphStableReverseTopoSort.test_skip_mainline_ghost(C) |
258 | breezy.tests.test__known_graph.TestKnownGraphStableReverseTopoSort.test_skip_mainline_ghost(python) |
259 | +breezy.tests.test__known_graph.TestKnownGraphStableReverseTopoSort.test_stable_sorting(C) |
260 | breezy.tests.test__known_graph.TestKnownGraphStableReverseTopoSort.test_stable_sorting(python) |
261 | +breezy.tests.test__known_graph.TestKnownGraph.test_add_existing_node(C) |
262 | +breezy.tests.test__known_graph.TestKnownGraph.test_add_existing_node_mismatched_parents(C) |
263 | breezy.tests.test__known_graph.TestKnownGraph.test_add_existing_node_mismatched_parents(python) |
264 | breezy.tests.test__known_graph.TestKnownGraph.test_add_existing_node(python) |
265 | +breezy.tests.test__known_graph.TestKnownGraph.test_add_new_root(C) |
266 | breezy.tests.test__known_graph.TestKnownGraph.test_add_new_root(python) |
267 | +breezy.tests.test__known_graph.TestKnownGraph.test_add_node_with_ghost_parent(C) |
268 | breezy.tests.test__known_graph.TestKnownGraph.test_add_node_with_ghost_parent(python) |
269 | +breezy.tests.test__known_graph.TestKnownGraph.test_add_with_all_ghost_parents(C) |
270 | breezy.tests.test__known_graph.TestKnownGraph.test_add_with_all_ghost_parents(python) |
271 | +breezy.tests.test__known_graph.TestKnownGraph.test_children_ancestry1(C) |
272 | breezy.tests.test__known_graph.TestKnownGraph.test_children_ancestry1(python) |
273 | +breezy.tests.test__known_graph.TestKnownGraph.test_fill_in_ghost(C) |
274 | breezy.tests.test__known_graph.TestKnownGraph.test_fill_in_ghost(python) |
275 | +breezy.tests.test__known_graph.TestKnownGraph.test_gdfo_after_add_node(C) |
276 | breezy.tests.test__known_graph.TestKnownGraph.test_gdfo_after_add_node(python) |
277 | +breezy.tests.test__known_graph.TestKnownGraph.test_gdfo_ancestry_1(C) |
278 | breezy.tests.test__known_graph.TestKnownGraph.test_gdfo_ancestry_1(python) |
279 | +breezy.tests.test__known_graph.TestKnownGraph.test_gdfo_extended_history_shortcut(C) |
280 | breezy.tests.test__known_graph.TestKnownGraph.test_gdfo_extended_history_shortcut(python) |
281 | +breezy.tests.test__known_graph.TestKnownGraph.test_gdfo_feature_branch(C) |
282 | breezy.tests.test__known_graph.TestKnownGraph.test_gdfo_feature_branch(python) |
283 | +breezy.tests.test__known_graph.TestKnownGraph.test_gdfo_with_ghost(C) |
284 | breezy.tests.test__known_graph.TestKnownGraph.test_gdfo_with_ghost(python) |
285 | +breezy.tests.test__known_graph.TestKnownGraph.test_parent_ancestry1(C) |
286 | breezy.tests.test__known_graph.TestKnownGraph.test_parent_ancestry1(python) |
287 | +breezy.tests.test__known_graph.TestKnownGraph.test_parent_with_ghost(C) |
288 | breezy.tests.test__known_graph.TestKnownGraph.test_parent_with_ghost(python) |
289 | +breezy.tests.test__known_graph.TestKnownGraphTopoSort.test_topo_sort_1(C) |
290 | breezy.tests.test__known_graph.TestKnownGraphTopoSort.test_topo_sort_1(python) |
291 | +breezy.tests.test__known_graph.TestKnownGraphTopoSort.test_topo_sort_cycle_2(C) |
292 | breezy.tests.test__known_graph.TestKnownGraphTopoSort.test_topo_sort_cycle_2(python) |
293 | +breezy.tests.test__known_graph.TestKnownGraphTopoSort.test_topo_sort_cycle(C) |
294 | breezy.tests.test__known_graph.TestKnownGraphTopoSort.test_topo_sort_cycle(python) |
295 | +breezy.tests.test__known_graph.TestKnownGraphTopoSort.test_topo_sort_cycle_with_tail(C) |
296 | breezy.tests.test__known_graph.TestKnownGraphTopoSort.test_topo_sort_cycle_with_tail(python) |
297 | +breezy.tests.test__known_graph.TestKnownGraphTopoSort.test_topo_sort_easy(C) |
298 | breezy.tests.test__known_graph.TestKnownGraphTopoSort.test_topo_sort_easy(python) |
299 | +breezy.tests.test__known_graph.TestKnownGraphTopoSort.test_topo_sort_empty(C) |
300 | breezy.tests.test__known_graph.TestKnownGraphTopoSort.test_topo_sort_empty(python) |
301 | +breezy.tests.test__known_graph.TestKnownGraphTopoSort.test_topo_sort_ghost_parent(C) |
302 | breezy.tests.test__known_graph.TestKnownGraphTopoSort.test_topo_sort_ghost_parent(python) |
303 | +breezy.tests.test__known_graph.TestKnownGraphTopoSort.test_topo_sort_partial(C) |
304 | breezy.tests.test__known_graph.TestKnownGraphTopoSort.test_topo_sort_partial(python) |
305 | breezy.tests.test_lazy_import.TestCanonicalize.test_from_one_import_two |
306 | breezy.tests.test_lazy_import.TestCanonicalize.test_import_one |