Show More
@@ -59,14 +59,12 b' static PyObject *dirstate_item_new(PyTyp' | |||
|
59 | 59 | int size; |
|
60 | 60 | int mtime; |
|
61 | 61 | PyObject *parentfiledata; |
|
62 | PyObject *fallback_exec; | |
|
63 | PyObject *fallback_symlink; | |
|
62 | 64 | static char *keywords_name[] = { |
|
63 | "wc_tracked", | |
|
64 | "p1_tracked", | |
|
65 | "p2_info", | |
|
66 | "has_meaningful_data", | |
|
67 | "has_meaningful_mtime", | |
|
68 | "parentfiledata", | |
|
69 | NULL, | |
|
65 | "wc_tracked", "p1_tracked", "p2_info", | |
|
66 | "has_meaningful_data", "has_meaningful_mtime", "parentfiledata", | |
|
67 | "fallback_exec", "fallback_symlink", NULL, | |
|
70 | 68 | }; |
|
71 | 69 | wc_tracked = 0; |
|
72 | 70 | p1_tracked = 0; |
@@ -74,10 +72,13 b' static PyObject *dirstate_item_new(PyTyp' | |||
|
74 | 72 | has_meaningful_mtime = 1; |
|
75 | 73 | has_meaningful_data = 1; |
|
76 | 74 | parentfiledata = Py_None; |
|
77 | if (!PyArg_ParseTupleAndKeywords( | |
|
78 | args, kwds, "|iiiiiO", keywords_name, &wc_tracked, &p1_tracked, | |
|
79 | &p2_info, &has_meaningful_data, &has_meaningful_mtime, | |
|
80 | &parentfiledata)) { | |
|
75 | fallback_exec = Py_None; | |
|
76 | fallback_symlink = Py_None; | |
|
77 | if (!PyArg_ParseTupleAndKeywords(args, kwds, "|iiiiiOOO", keywords_name, | |
|
78 | &wc_tracked, &p1_tracked, &p2_info, | |
|
79 | &has_meaningful_data, | |
|
80 | &has_meaningful_mtime, &parentfiledata, | |
|
81 | &fallback_exec, &fallback_symlink)) { | |
|
81 | 82 | return NULL; |
|
82 | 83 | } |
|
83 | 84 | t = (dirstateItemObject *)subtype->tp_alloc(subtype, 1); |
@@ -96,6 +97,19 b' static PyObject *dirstate_item_new(PyTyp' | |||
|
96 | 97 | t->flags |= dirstate_flag_p2_info; |
|
97 | 98 | } |
|
98 | 99 | |
|
100 | if (fallback_exec != Py_None) { | |
|
101 | t->flags |= dirstate_flag_has_fallback_exec; | |
|
102 | if (PyObject_IsTrue(fallback_exec)) { | |
|
103 | t->flags |= dirstate_flag_fallback_exec; | |
|
104 | } | |
|
105 | } | |
|
106 | if (fallback_symlink != Py_None) { | |
|
107 | t->flags |= dirstate_flag_has_fallback_symlink; | |
|
108 | if (PyObject_IsTrue(fallback_symlink)) { | |
|
109 | t->flags |= dirstate_flag_fallback_symlink; | |
|
110 | } | |
|
111 | } | |
|
112 | ||
|
99 | 113 | if (parentfiledata != Py_None) { |
|
100 | 114 | if (!PyTuple_CheckExact(parentfiledata)) { |
|
101 | 115 | PyErr_SetString( |
@@ -107,13 +107,15 b' class DirstateItem(object):' | |||
|
107 | 107 | has_meaningful_data=True, |
|
108 | 108 | has_meaningful_mtime=True, |
|
109 | 109 | parentfiledata=None, |
|
110 | fallback_exec=None, | |
|
111 | fallback_symlink=None, | |
|
110 | 112 | ): |
|
111 | 113 | self._wc_tracked = wc_tracked |
|
112 | 114 | self._p1_tracked = p1_tracked |
|
113 | 115 | self._p2_info = p2_info |
|
114 | 116 | |
|
115 |
self._fallback_exec = |
|
|
116 |
self._fallback_symlink = |
|
|
117 | self._fallback_exec = fallback_exec | |
|
118 | self._fallback_symlink = fallback_symlink | |
|
117 | 119 | |
|
118 | 120 | self._mode = None |
|
119 | 121 | self._size = None |
@@ -183,6 +183,8 b' impl DirstateEntry {' | |||
|
183 | 183 | p2_info: bool, |
|
184 | 184 | mode_size: Option<(u32, u32)>, |
|
185 | 185 | mtime: Option<u32>, |
|
186 | fallback_exec: Option<bool>, | |
|
187 | fallback_symlink: Option<bool>, | |
|
186 | 188 | ) -> Self { |
|
187 | 189 | if let Some((mode, size)) = mode_size { |
|
188 | 190 | // TODO: return an error for out of range values? |
@@ -196,6 +198,18 b' impl DirstateEntry {' | |||
|
196 | 198 | flags.set(Flags::WDIR_TRACKED, wdir_tracked); |
|
197 | 199 | flags.set(Flags::P1_TRACKED, p1_tracked); |
|
198 | 200 | flags.set(Flags::P2_INFO, p2_info); |
|
201 | if let Some(exec) = fallback_exec { | |
|
202 | flags.insert(Flags::HAS_FALLBACK_EXEC); | |
|
203 | if exec { | |
|
204 | flags.insert(Flags::FALLBACK_EXEC); | |
|
205 | } | |
|
206 | } | |
|
207 | if let Some(exec) = fallback_symlink { | |
|
208 | flags.insert(Flags::HAS_FALLBACK_SYMLINK); | |
|
209 | if exec { | |
|
210 | flags.insert(Flags::FALLBACK_SYMLINK); | |
|
211 | } | |
|
212 | } | |
|
199 | 213 | Self { |
|
200 | 214 | flags, |
|
201 | 215 | mode_size, |
@@ -378,6 +378,8 b' impl Node {' | |||
|
378 | 378 | p2_info, |
|
379 | 379 | mode_size, |
|
380 | 380 | mtime, |
|
381 | None, | |
|
382 | None, | |
|
381 | 383 | ) |
|
382 | 384 | } |
|
383 | 385 |
@@ -23,6 +23,8 b' py_class!(pub class DirstateItem |py| {' | |||
|
23 | 23 | has_meaningful_data: bool = true, |
|
24 | 24 | has_meaningful_mtime: bool = true, |
|
25 | 25 | parentfiledata: Option<(u32, u32, u32)> = None, |
|
26 | fallback_exec: Option<bool> = None, | |
|
27 | fallback_symlink: Option<bool> = None, | |
|
26 | 28 | |
|
27 | 29 | ) -> PyResult<DirstateItem> { |
|
28 | 30 | let mut mode_size_opt = None; |
@@ -36,7 +38,13 b' py_class!(pub class DirstateItem |py| {' | |||
|
36 | 38 | } |
|
37 | 39 | } |
|
38 | 40 | let entry = DirstateEntry::from_v2_data( |
|
39 | wc_tracked, p1_tracked, p2_info, mode_size_opt, mtime_opt, | |
|
41 | wc_tracked, | |
|
42 | p1_tracked, | |
|
43 | p2_info, | |
|
44 | mode_size_opt, | |
|
45 | mtime_opt, | |
|
46 | fallback_exec, | |
|
47 | fallback_symlink, | |
|
40 | 48 | ); |
|
41 | 49 | DirstateItem::create_instance(py, Cell::new(entry)) |
|
42 | 50 | } |
General Comments 0
You need to be logged in to leave comments.
Login now