Merge lp:~gz/brz/known_graph_pyx into lp:brz

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
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

Subscribers

People subscribed via source and target branches