Mercurial > public > mercurial-scm > hg
view rust/hg-core/src/operations/debugdata.rs @ 51106:687e192dae16
rust-matchers: fix quadratic complexity in `FileMatcher`
Concretely, this command:
```
$ echo hg up -r <nodeid>; time hg revert dir1 dir2 -r <othernode> --debug
hg up -r <nodeid>
real 0m14.690s
user 0m14.766s
sys 0m5.430s
```
was much slower despite using 16 cores before this change.
The approach taken here is the same one used in match.py, in exactmatcher.
This changeset was originally written by Valentin Gatien-Baron in a private
repository.
I have redacted the commit message and did a minor clean up of the code.
author | Rapha?l Gom?s <rgomes@octobus.net> |
---|---|
date | Wed, 18 Oct 2023 14:50:14 +0200 |
parents | 1928b770e3e7 |
children | 13f58ce70299 |
line wrap: on
line source
// debugdata.rs // // Copyright 2020 Antoine Cezar <antoine.cezar@octobus.net> // // This software may be used and distributed according to the terms of the // GNU General Public License version 2 or any later version. use crate::repo::Repo; use crate::requirements; use crate::revlog::{Revlog, RevlogError}; /// Kind of data to debug #[derive(Debug, Copy, Clone)] pub enum DebugDataKind { Changelog, Manifest, } /// Dump the contents data of a revision. pub fn debug_data( repo: &Repo, revset: &str, kind: DebugDataKind, ) -> Result<Vec<u8>, RevlogError> { let index_file = match kind { DebugDataKind::Changelog => "00changelog.i", DebugDataKind::Manifest => "00manifest.i", }; let use_nodemap = repo .requirements() .contains(requirements::NODEMAP_REQUIREMENT); let revlog = Revlog::open(&repo.store_vfs(), index_file, None, use_nodemap)?; let rev = crate::revset::resolve_rev_number_or_hex_prefix(revset, &revlog)?; let data = revlog.get_rev_data_for_checked_rev(rev)?; Ok(data.into_owned()) }