Read about our upcoming Code of Conduct on this issue

This instance was upgraded to Heptapod 0.28.0 today

Commit ce0a1dda authored by Pierre-Yves David's avatar Pierre-Yves David 🐙
Browse files

dirstate-item: implement the comparison logic for mtime-second-ambiguous

If the flag is set we now process it properly.

We "just" need to actually set it and persist it.

Differential Revision: https://phab.mercurial-scm.org/D11843
parent 111098af6356
......@@ -335,10 +335,20 @@ static PyObject *dirstate_item_mtime_likely_equal_to(dirstateItemObject *self,
&other_second_ambiguous)) {
return NULL;
}
if ((self->flags & dirstate_flag_has_mtime) &&
self->mtime_s == other_s &&
(self->mtime_ns == other_ns || self->mtime_ns == 0 ||
other_ns == 0)) {
if (!(self->flags & dirstate_flag_has_mtime)) {
Py_RETURN_FALSE;
}
if (self->mtime_s != other_s) {
Py_RETURN_FALSE;
}
if (self->mtime_ns == 0 || other_ns == 0) {
if (self->flags & dirstate_flag_mtime_second_ambiguous) {
Py_RETURN_FALSE;
} else {
Py_RETURN_TRUE;
}
}
if (self->mtime_ns == other_ns) {
Py_RETURN_TRUE;
} else {
Py_RETURN_FALSE;
......
......@@ -310,9 +310,21 @@ class DirstateItem(object):
return False
self_ns = self._mtime_ns
other_sec, other_ns, second_ambiguous = other_mtime
return self_sec == other_sec and (
self_ns == other_ns or self_ns == 0 or other_ns == 0
)
if self_sec != other_sec:
# seconds are different theses mtime are definitly not equal
return False
elif other_ns == 0 or self_ns == 0:
# at least one side as no nano-seconds information
if self._mtime_second_ambiguous:
# We cannot trust the mtime in this case
return False
else:
# the "seconds" value was reliable on its own. We are good to go.
return True
else:
# We have nano second information, let us use them !
return self_ns == other_ns
@property
def state(self):
......
......@@ -130,10 +130,17 @@ impl TruncatedTimestamp {
/// in that way, doing a simple comparison would cause many false
/// negatives.
pub fn likely_equal(self, other: Self) -> bool {
self.truncated_seconds == other.truncated_seconds
&& (self.nanoseconds == other.nanoseconds
|| self.nanoseconds == 0
|| other.nanoseconds == 0)
if self.truncated_seconds != other.truncated_seconds {
false
} else if self.nanoseconds == 0 || other.nanoseconds == 0 {
if self.second_ambiguous {
false
} else {
true
}
} else {
self.nanoseconds == other.nanoseconds
}
}
pub fn likely_equal_to_mtime_of(
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment