/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to breezy/_known_graph_pyx.pyx

  • Committer: Jelmer Vernooij
  • Date: 2018-07-02 01:11:40 UTC
  • mfrom: (7023 work)
  • mto: This revision was merged to the branch mainline in revision 7025.
  • Revision ID: jelmer@jelmer.uk-20180702011140-toroicnrq9a5jstj
Merge trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
cdef extern from "python-compat.h":
23
23
    pass
24
24
 
25
 
cdef extern from "Python.h":
26
 
    ctypedef int Py_ssize_t
27
 
    ctypedef struct PyObject:
28
 
        pass
29
 
 
30
 
    int PyString_CheckExact(object)
31
 
 
32
 
    int PyObject_RichCompareBool(object, object, int)
33
 
    int Py_LT
34
 
 
35
 
    int PyTuple_CheckExact(object)
36
 
    object PyTuple_New(Py_ssize_t n)
37
 
    Py_ssize_t PyTuple_GET_SIZE(object t)
38
 
    PyObject * PyTuple_GET_ITEM(object t, Py_ssize_t o)
39
 
    void PyTuple_SET_ITEM(object t, Py_ssize_t o, object v)
40
 
 
41
 
    int PyList_CheckExact(object)
42
 
    Py_ssize_t PyList_GET_SIZE(object l)
43
 
    PyObject * PyList_GET_ITEM(object l, Py_ssize_t o)
44
 
    int PyList_SetItem(object l, Py_ssize_t o, object l) except -1
45
 
    int PyList_Append(object l, object v) except -1
46
 
 
47
 
    int PyDict_CheckExact(object d)
48
 
    Py_ssize_t PyDict_Size(object d) except -1
49
 
    PyObject * PyDict_GetItem(object d, object k)
50
 
    int PyDict_SetItem(object d, object k, object v) except -1
51
 
    int PyDict_DelItem(object d, object k) except -1
52
 
    int PyDict_Next(object d, Py_ssize_t *pos, PyObject **k, PyObject **v)
53
 
 
54
 
    void Py_INCREF(object)
 
25
from cpython.bytes cimport (
 
26
    PyBytes_CheckExact,
 
27
    )
 
28
from cpython.dict cimport (
 
29
    PyDict_CheckExact,
 
30
    PyDict_DelItem,
 
31
    PyDict_GetItem,
 
32
    PyDict_Next,
 
33
    PyDict_SetItem,
 
34
    PyDict_Size,
 
35
    )
 
36
from cpython.list cimport (
 
37
    PyList_Append,
 
38
    PyList_CheckExact,
 
39
    PyList_GET_SIZE,
 
40
    PyList_GET_ITEM,
 
41
    PyList_SetItem,
 
42
    )
 
43
from cpython.object cimport (
 
44
    Py_LT,
 
45
    PyObject,
 
46
    PyObject_RichCompareBool,
 
47
    )
 
48
from cpython.ref cimport (
 
49
    Py_INCREF,
 
50
    )
 
51
from cpython.tuple cimport (
 
52
    PyTuple_CheckExact,
 
53
    PyTuple_GET_SIZE,
 
54
    PyTuple_GET_ITEM,
 
55
    PyTuple_New,
 
56
    PyTuple_SET_ITEM,
 
57
    )
55
58
 
56
59
import collections
57
60
import gc
95
98
        def __get__(self):
96
99
            if self.parents is None:
97
100
                return None
98
 
            
 
101
 
99
102
            cdef _KnownGraphNode parent
100
103
 
101
104
            keys = []
102
105
            for parent in self.parents:
103
106
                PyList_Append(keys, parent.key)
104
107
            return keys
105
 
    
 
108
 
106
109
    cdef clear_references(self):
107
110
        self.parents = None
108
111
        self.children = None
266
269
        - all nodes found will also have child_keys populated with all known
267
270
          child keys,
268
271
        """
269
 
        cdef PyObject *temp_key, *temp_parent_keys, *temp_node
 
272
        cdef PyObject *temp_key
 
273
        cdef PyObject *temp_parent_keys
 
274
        cdef PyObject *temp_node
270
275
        cdef Py_ssize_t pos
271
276
        cdef _KnownGraphNode node
272
277
        cdef _KnownGraphNode parent_node
348
353
 
349
354
        If this fills in a ghost, then the gdfos of all children will be
350
355
        updated accordingly.
351
 
        
 
356
 
352
357
        :param key: The node being added. If this is a duplicate, this is a
353
358
            no-op.
354
359
        :param parent_keys: The parents of the given node.
579
584
        prefix_tips = {}
580
585
        for pos from 0 <= pos < PyList_GET_SIZE(tips):
581
586
            node = _get_list_node(tips, pos)
582
 
            if PyString_CheckExact(node.key) or len(node.key) == 1:
 
587
            if PyBytes_CheckExact(node.key) or len(node.key) == 1:
583
588
                prefix = ''
584
589
            else:
585
590
                prefix = node.key[0]
640
645
        #       shown a specific impact, yet.
641
646
        sorter = _MergeSorter(self, tip_key)
642
647
        return sorter.topo_order()
643
 
    
 
648
 
644
649
    def get_parent_keys(self, key):
645
650
        """Get the parents for a key
646
 
        
 
651
 
647
652
        Returns a list containg the parents keys. If the key is a ghost,
648
653
        None is returned. A KeyError will be raised if the key is not in
649
654
        the graph.
650
 
        
 
655
 
651
656
        :param keys: Key to check (eg revision_id)
652
657
        :return: A list of parents
653
658
        """
654
 
        return self._nodes[key].parent_keys 
 
659
        return self._nodes[key].parent_keys
655
660
 
656
661
    def get_child_keys(self, key):
657
662
        """Get the children for a key
658
 
        
 
663
 
659
664
        Returns a list containg the children keys. A KeyError will be raised
660
665
        if the key is not in the graph.
661
 
        
 
666
 
662
667
        :param keys: Key to check (eg revision_id)
663
668
        :return: A list of children
664
669
        """
665
 
        return self._nodes[key].child_keys    
 
670
        return self._nodes[key].child_keys
666
671
 
667
672
 
668
673
cdef class _MergeSortNode:
929
934
        cdef _MergeSortNode ms_node
930
935
        cdef _KnownGraphNode node
931
936
        cdef Py_ssize_t pos
932
 
        cdef PyObject *temp_key, *temp_node
 
937
        cdef PyObject *temp_key
 
938
        cdef PyObject *temp_node
933
939
 
934
940
        # Note: allocating a _MergeSortNode and deallocating it for all nodes
935
941
        #       costs approx 8.52ms (21%) of the total runtime