Show More
@@ -335,7 +335,7 b' def overridewalk(orig, self, match, subr' | |||
|
335 | 335 | nonnormalset = { |
|
336 | 336 | f |
|
337 | 337 | for f, e in self._map.items() |
|
338 | if e.v1_state() != b"n" or e.v1_mtime() == -1 | |
|
338 | if e._v1_state() != b"n" or e._v1_mtime() == -1 | |
|
339 | 339 | } |
|
340 | 340 | |
|
341 | 341 | copymap = self._map.copymap |
@@ -289,27 +289,6 b' static PyObject *dirstate_item_v2_data(d' | |||
|
289 | 289 | self->mtime_ns); |
|
290 | 290 | }; |
|
291 | 291 | |
|
292 | static PyObject *dirstate_item_v1_state(dirstateItemObject *self) | |
|
293 | { | |
|
294 | char state = dirstate_item_c_v1_state(self); | |
|
295 | return PyBytes_FromStringAndSize(&state, 1); | |
|
296 | }; | |
|
297 | ||
|
298 | static PyObject *dirstate_item_v1_mode(dirstateItemObject *self) | |
|
299 | { | |
|
300 | return PyLong_FromLong(dirstate_item_c_v1_mode(self)); | |
|
301 | }; | |
|
302 | ||
|
303 | static PyObject *dirstate_item_v1_size(dirstateItemObject *self) | |
|
304 | { | |
|
305 | return PyLong_FromLong(dirstate_item_c_v1_size(self)); | |
|
306 | }; | |
|
307 | ||
|
308 | static PyObject *dirstate_item_v1_mtime(dirstateItemObject *self) | |
|
309 | { | |
|
310 | return PyLong_FromLong(dirstate_item_c_v1_mtime(self)); | |
|
311 | }; | |
|
312 | ||
|
313 | 292 | static PyObject *dirstate_item_mtime_likely_equal_to(dirstateItemObject *self, |
|
314 | 293 | PyObject *other) |
|
315 | 294 | { |
@@ -403,20 +382,6 b' dirstate_item_from_v1_data(char state, i' | |||
|
403 | 382 | return t; |
|
404 | 383 | } |
|
405 | 384 | |
|
406 | /* This will never change since it's bound to V1, unlike `dirstate_item_new` */ | |
|
407 | static PyObject *dirstate_item_from_v1_meth(PyTypeObject *subtype, | |
|
408 | PyObject *args) | |
|
409 | { | |
|
410 | /* We do all the initialization here and not a tp_init function because | |
|
411 | * dirstate_item is immutable. */ | |
|
412 | char state; | |
|
413 | int size, mode, mtime; | |
|
414 | if (!PyArg_ParseTuple(args, "ciii", &state, &mode, &size, &mtime)) { | |
|
415 | return NULL; | |
|
416 | } | |
|
417 | return (PyObject *)dirstate_item_from_v1_data(state, mode, size, mtime); | |
|
418 | }; | |
|
419 | ||
|
420 | 385 | static PyObject *dirstate_item_from_v2_meth(PyTypeObject *subtype, |
|
421 | 386 | PyObject *args) |
|
422 | 387 | { |
@@ -526,18 +491,8 b' static PyObject *dirstate_item_drop_merg' | |||
|
526 | 491 | static PyMethodDef dirstate_item_methods[] = { |
|
527 | 492 | {"v2_data", (PyCFunction)dirstate_item_v2_data, METH_NOARGS, |
|
528 | 493 | "return data suitable for v2 serialization"}, |
|
529 | {"v1_state", (PyCFunction)dirstate_item_v1_state, METH_NOARGS, | |
|
530 | "return a \"state\" suitable for v1 serialization"}, | |
|
531 | {"v1_mode", (PyCFunction)dirstate_item_v1_mode, METH_NOARGS, | |
|
532 | "return a \"mode\" suitable for v1 serialization"}, | |
|
533 | {"v1_size", (PyCFunction)dirstate_item_v1_size, METH_NOARGS, | |
|
534 | "return a \"size\" suitable for v1 serialization"}, | |
|
535 | {"v1_mtime", (PyCFunction)dirstate_item_v1_mtime, METH_NOARGS, | |
|
536 | "return a \"mtime\" suitable for v1 serialization"}, | |
|
537 | 494 | {"mtime_likely_equal_to", (PyCFunction)dirstate_item_mtime_likely_equal_to, |
|
538 | 495 | METH_O, "True if the stored mtime is likely equal to the given mtime"}, |
|
539 | {"from_v1_data", (PyCFunction)dirstate_item_from_v1_meth, | |
|
540 | METH_VARARGS | METH_CLASS, "build a new DirstateItem object from V1 data"}, | |
|
541 | 496 | {"from_v2_data", (PyCFunction)dirstate_item_from_v2_meth, |
|
542 | 497 | METH_VARARGS | METH_CLASS, "build a new DirstateItem object from V2 data"}, |
|
543 | 498 | {"set_possibly_dirty", (PyCFunction)dirstate_item_set_possibly_dirty, |
@@ -291,15 +291,15 b' class DirstateItem:' | |||
|
291 | 291 | |
|
292 | 292 | @property |
|
293 | 293 | def mode(self): |
|
294 | return self.v1_mode() | |
|
294 | return self._v1_mode() | |
|
295 | 295 | |
|
296 | 296 | @property |
|
297 | 297 | def size(self): |
|
298 | return self.v1_size() | |
|
298 | return self._v1_size() | |
|
299 | 299 | |
|
300 | 300 | @property |
|
301 | 301 | def mtime(self): |
|
302 | return self.v1_mtime() | |
|
302 | return self._v1_mtime() | |
|
303 | 303 | |
|
304 | 304 | def mtime_likely_equal_to(self, other_mtime): |
|
305 | 305 | self_sec = self._mtime_s |
@@ -338,7 +338,7 b' class DirstateItem:' | |||
|
338 | 338 | """ |
|
339 | 339 | if not self.any_tracked: |
|
340 | 340 | return b'?' |
|
341 | return self.v1_state() | |
|
341 | return self._v1_state() | |
|
342 | 342 | |
|
343 | 343 | @property |
|
344 | 344 | def has_fallback_exec(self): |
@@ -498,7 +498,7 b' class DirstateItem:' | |||
|
498 | 498 | # since we never set _DIRSTATE_V2_HAS_DIRCTORY_MTIME |
|
499 | 499 | return (flags, self._size or 0, self._mtime_s or 0, self._mtime_ns or 0) |
|
500 | 500 | |
|
501 | def v1_state(self): | |
|
501 | def _v1_state(self): | |
|
502 | 502 | """return a "state" suitable for v1 serialization""" |
|
503 | 503 | if not self.any_tracked: |
|
504 | 504 | # the object has no state to record, this is -currently- |
@@ -513,11 +513,11 b' class DirstateItem:' | |||
|
513 | 513 | else: |
|
514 | 514 | return b'n' |
|
515 | 515 | |
|
516 | def v1_mode(self): | |
|
516 | def _v1_mode(self): | |
|
517 | 517 | """return a "mode" suitable for v1 serialization""" |
|
518 | 518 | return self._mode if self._mode is not None else 0 |
|
519 | 519 | |
|
520 | def v1_size(self): | |
|
520 | def _v1_size(self): | |
|
521 | 521 | """return a "size" suitable for v1 serialization""" |
|
522 | 522 | if not self.any_tracked: |
|
523 | 523 | # the object has no state to record, this is -currently- |
@@ -536,7 +536,7 b' class DirstateItem:' | |||
|
536 | 536 | else: |
|
537 | 537 | return self._size |
|
538 | 538 | |
|
539 | def v1_mtime(self): | |
|
539 | def _v1_mtime(self): | |
|
540 | 540 | """return a "mtime" suitable for v1 serialization""" |
|
541 | 541 | if not self.any_tracked: |
|
542 | 542 | # the object has no state to record, this is -currently- |
@@ -963,10 +963,10 b' def pack_dirstate(dmap, copymap, pl):' | |||
|
963 | 963 | f = b"%s\0%s" % (f, copymap[f]) |
|
964 | 964 | e = _pack( |
|
965 | 965 | b">cllll", |
|
966 | e.v1_state(), | |
|
967 | e.v1_mode(), | |
|
968 | e.v1_size(), | |
|
969 | e.v1_mtime(), | |
|
966 | e._v1_state(), | |
|
967 | e._v1_mode(), | |
|
968 | e._v1_size(), | |
|
969 | e._v1_mtime(), | |
|
970 | 970 | len(f), |
|
971 | 971 | ) |
|
972 | 972 | write(e) |
@@ -8,10 +8,8 b' use cpython::PyResult;' | |||
|
8 | 8 | use cpython::Python; |
|
9 | 9 | use cpython::PythonObject; |
|
10 | 10 | use hg::dirstate::DirstateEntry; |
|
11 | use hg::dirstate::EntryState; | |
|
12 | 11 | use hg::dirstate::TruncatedTimestamp; |
|
13 | 12 | use std::cell::Cell; |
|
14 | use std::convert::TryFrom; | |
|
15 | 13 | |
|
16 | 14 | py_class!(pub class DirstateItem |py| { |
|
17 | 15 | data entry: Cell<DirstateEntry>; |
@@ -173,27 +171,6 b' py_class!(pub class DirstateItem |py| {' | |||
|
173 | 171 | Ok(self.entry(py).get().any_tracked()) |
|
174 | 172 | } |
|
175 | 173 | |
|
176 | def v1_state(&self) -> PyResult<PyBytes> { | |
|
177 | let (state, _mode, _size, _mtime) = self.entry(py).get().v1_data(); | |
|
178 | let state_byte: u8 = state.into(); | |
|
179 | Ok(PyBytes::new(py, &[state_byte])) | |
|
180 | } | |
|
181 | ||
|
182 | def v1_mode(&self) -> PyResult<i32> { | |
|
183 | let (_state, mode, _size, _mtime) = self.entry(py).get().v1_data(); | |
|
184 | Ok(mode) | |
|
185 | } | |
|
186 | ||
|
187 | def v1_size(&self) -> PyResult<i32> { | |
|
188 | let (_state, _mode, size, _mtime) = self.entry(py).get().v1_data(); | |
|
189 | Ok(size) | |
|
190 | } | |
|
191 | ||
|
192 | def v1_mtime(&self) -> PyResult<i32> { | |
|
193 | let (_state, _mode, _size, mtime) = self.entry(py).get().v1_data(); | |
|
194 | Ok(mtime) | |
|
195 | } | |
|
196 | ||
|
197 | 174 | def mtime_likely_equal_to(&self, other: (u32, u32, bool)) |
|
198 | 175 | -> PyResult<bool> { |
|
199 | 176 | if let Some(mtime) = self.entry(py).get().truncated_mtime() { |
@@ -203,22 +180,6 b' py_class!(pub class DirstateItem |py| {' | |||
|
203 | 180 | } |
|
204 | 181 | } |
|
205 | 182 | |
|
206 | @classmethod | |
|
207 | def from_v1_data( | |
|
208 | _cls, | |
|
209 | state: PyBytes, | |
|
210 | mode: i32, | |
|
211 | size: i32, | |
|
212 | mtime: i32, | |
|
213 | ) -> PyResult<Self> { | |
|
214 | let state = <[u8; 1]>::try_from(state.data(py)) | |
|
215 | .ok() | |
|
216 | .and_then(|state| EntryState::try_from(state[0]).ok()) | |
|
217 | .ok_or_else(|| PyErr::new::<exc::ValueError, _>(py, "invalid state"))?; | |
|
218 | let entry = DirstateEntry::from_v1_data(state, mode, size, mtime); | |
|
219 | DirstateItem::create_instance(py, Cell::new(entry)) | |
|
220 | } | |
|
221 | ||
|
222 | 183 | def drop_merge_data(&self) -> PyResult<PyNone> { |
|
223 | 184 | self.update(py, |entry| entry.drop_merge_data()); |
|
224 | 185 | Ok(PyNone) |
General Comments 0
You need to be logged in to leave comments.
Login now