Show More
@@ -66,12 +66,22 b' def mtime_of(stat_result):' | |||
|
66 | 66 | Takes an `os.stat_result`-like object and returns a `timestamp` object |
|
67 | 67 | for its modification time. |
|
68 | 68 | """ |
|
69 | # https://docs.python.org/2/library/os.html#os.stat_float_times | |
|
70 | # "For compatibility with older Python versions, | |
|
71 | # accessing stat_result as a tuple always returns integers." | |
|
72 | secs = stat_result[stat.ST_MTIME] | |
|
69 | try: | |
|
70 | # TODO: add this attribute to `osutil.stat` objects, | |
|
71 | # see `mercurial/cext/osutil.c`. | |
|
72 | # | |
|
73 | # This attribute is also not available on Python 2. | |
|
74 | nanos = stat_result.st_mtime_ns | |
|
75 | except AttributeError: | |
|
76 | # https://docs.python.org/2/library/os.html#os.stat_float_times | |
|
77 | # "For compatibility with older Python versions, | |
|
78 | # accessing stat_result as a tuple always returns integers." | |
|
79 | secs = stat_result[stat.ST_MTIME] | |
|
73 | 80 | |
|
74 | # For now | |
|
75 | subsec_nanos = 0 | |
|
81 | subsec_nanos = 0 | |
|
82 | else: | |
|
83 | billion = int(1e9) | |
|
84 | secs = nanos // billion | |
|
85 | subsec_nanos = nanos % billion | |
|
76 | 86 | |
|
77 | 87 | return timestamp((secs, subsec_nanos)) |
@@ -101,15 +101,12 b' def parse_nodes(map, copy_map, data, sta' | |||
|
101 | 101 | flags, |
|
102 | 102 | size, |
|
103 | 103 | mtime_s, |
|
104 |
|
|
|
104 | mtime_ns, | |
|
105 | 105 | ) = NODE.unpack(node_bytes) |
|
106 | 106 | |
|
107 | 107 | # Parse child nodes of this node recursively |
|
108 | 108 | parse_nodes(map, copy_map, data, children_start, children_count) |
|
109 | 109 | |
|
110 | # Don’t yet use sub-second precision if it exists in the file, | |
|
111 | # since other parts of the code still set it to zero. | |
|
112 | mtime_ns = 0 | |
|
113 | 110 | item = parsers.DirstateItem.from_v2_data(flags, size, mtime_s, mtime_ns) |
|
114 | 111 | if not item.any_tracked: |
|
115 | 112 | continue |
@@ -91,11 +91,6 b' impl TruncatedTimestamp {' | |||
|
91 | 91 | } |
|
92 | 92 | } |
|
93 | 93 | |
|
94 | pub fn to_integer_second(mut self) -> Self { | |
|
95 | self.nanoseconds = 0; | |
|
96 | self | |
|
97 | } | |
|
98 | ||
|
99 | 94 | /// The lower 31 bits of the number of seconds since the epoch. |
|
100 | 95 | pub fn truncated_seconds(&self) -> u32 { |
|
101 | 96 | self.truncated_seconds |
@@ -376,15 +376,7 b' impl Node {' | |||
|
376 | 376 | // MTIME_SECOND_AMBIGUOUS requires. So we ignore the mtime |
|
377 | 377 | && !self.flags().contains(Flags::MTIME_SECOND_AMBIGUOUS) |
|
378 | 378 | { |
|
379 |
|
|
|
380 | // sub-second precision from the file. | |
|
381 | // We don’t do this yet because other parts of the code | |
|
382 | // always set it to zero. | |
|
383 | let mtime = TruncatedTimestamp::from_already_truncated( | |
|
384 | self.mtime.truncated_seconds.get(), | |
|
385 | 0, | |
|
386 | )?; | |
|
387 | Some(mtime) | |
|
379 | Some(self.mtime.try_into()?) | |
|
388 | 380 | } else { |
|
389 | 381 | None |
|
390 | 382 | }; |
@@ -531,9 +531,7 b" impl<'a, 'tree, 'on_disk> StatusCommon<'" | |||
|
531 | 531 | let mtime_looks_clean; |
|
532 | 532 | if let Some(dirstate_mtime) = entry.truncated_mtime() { |
|
533 | 533 | let fs_mtime = TruncatedTimestamp::for_mtime_of(fs_metadata) |
|
534 | .expect("OS/libc does not support mtime?") | |
|
535 | // For now don’t use sub-second precision for file mtimes | |
|
536 | .to_integer_second(); | |
|
534 | .expect("OS/libc does not support mtime?"); | |
|
537 | 535 | mtime_looks_clean = fs_mtime.likely_equal(dirstate_mtime) |
|
538 | 536 | && !fs_mtime.likely_equal(self.options.last_normal_time) |
|
539 | 537 | } else { |
General Comments 0
You need to be logged in to leave comments.
Login now