Mercurial > hg
changeset 46757:3c9ddb1986a9
rust-status: fix issue6456 for the Rust implementation also
This implementation is being used by a few people now, so we need it fixed, even
though a big rewrite will be coming quite soon.
Differential Revision: https://phab.mercurial-scm.org/D10217
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Mon, 15 Mar 2021 13:05:00 +0100 |
parents | c5912e35d06d |
children | 7f6c002d7c0a |
files | rust/hg-core/src/dirstate/status.rs rust/hg-core/src/utils/files.rs |
diffstat | 2 files changed, 13 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/rust/hg-core/src/dirstate/status.rs Tue Mar 16 00:07:12 2021 +0100 +++ b/rust/hg-core/src/dirstate/status.rs Mon Mar 15 13:05:00 2021 +0100 @@ -184,7 +184,13 @@ || other_parent || copy_map.contains_key(filename.as_ref()) { - Dispatch::Modified + if metadata.is_symlink() && size_changed { + // issue6456: Size returned may be longer due to encryption + // on EXT-4 fscrypt. TODO maybe only do it on EXT4? + Dispatch::Unsure + } else { + Dispatch::Modified + } } else if mod_compare(mtime, st_mtime as i32) || st_mtime == options.last_normal_time {
--- a/rust/hg-core/src/utils/files.rs Tue Mar 16 00:07:12 2021 +0100 +++ b/rust/hg-core/src/utils/files.rs Mon Mar 15 13:05:00 2021 +0100 @@ -199,6 +199,12 @@ st_ctime: metadata.ctime(), } } + + pub fn is_symlink(&self) -> bool { + // This is way too manual, but `HgMetadata` will go away in the + // near-future dirstate rewrite anyway. + self.st_mode & 0170000 == 0120000 + } } /// Returns the canonical path of `name`, given `cwd` and `root`