[Updated] D11910: rhg: Skip reading the contents of ambiguous files in some cases
SimonSapin
phabricator at mercurial-scm.org
Wed Dec 15 10:44:10 UTC 2021
Closed by commit rHGb005d07ded7d: rhg: Skip reading the contents of ambiguous files in some cases (authored by SimonSapin).
This revision was automatically updated to reflect the committed changes.
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D11910?vs=31467&id=31490
CHANGES SINCE LAST ACTION
https://phab.mercurial-scm.org/D11910/new/
REVISION DETAIL
https://phab.mercurial-scm.org/D11910
AFFECTED FILES
rust/rhg/src/commands/status.rs
CHANGE DETAILS
diff --git a/rust/rhg/src/commands/status.rs b/rust/rhg/src/commands/status.rs
--- a/rust/rhg/src/commands/status.rs
+++ b/rust/rhg/src/commands/status.rs
@@ -479,11 +479,23 @@
return Ok(true);
}
let filelog = repo.filelog(hg_path)?;
+ let fs_len = fs_metadata.len();
+ // TODO: check `fs_len` here like below, but based on
+ // `RevlogEntry::uncompressed_len` without decompressing the full filelog
+ // contents where possible. This is only valid if the revlog data does not
+ // contain metadata. See how Python’s `revlog.rawsize` calls
+ // `storageutil.filerevisioncopied`.
+ // (Maybe also check for content-modifying flags? See `revlog.size`.)
let filelog_entry =
filelog.data_for_node(entry.node_id()?).map_err(|_| {
HgError::corrupted("filelog missing node from manifest")
})?;
let contents_in_p1 = filelog_entry.data()?;
+ if contents_in_p1.len() as u64 != fs_len {
+ // No need to read the file contents:
+ // it cannot be equal if it has a different length.
+ return Ok(true);
+ }
let fs_contents = if is_symlink {
get_bytes_from_os_string(vfs.read_link(fs_path)?.into_os_string())
To: SimonSapin, #hg-reviewers, Alphare
Cc: mercurial-patches
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurial-scm.org/pipermail/mercurial-patches/attachments/20211215/540193b1/attachment-0002.html>
More information about the Mercurial-patches
mailing list