##// END OF EJS Templates
rust-changelog: introducing an intermediate `ChangelogEntry`...
rust-changelog: introducing an intermediate `ChangelogEntry` Before this change, client code needing to extract, e.g, the Node ID and the description from a changeset had no other choice than calling both `entry_for_rev()` and `data_for_rev()`. This duplicates some (limited) computation, and more importantly imposes bad hygiene for client code: at some point of developement, the client code would have to pass over both entry and data in its internal layers, which at some point of development would raise the question whether they are consistent. We introduce the intermediate `ChangelogEntry` from which both conversion to the generic `RevlogEntry` and extraction of `ChangelogRevisionData` are possible. It might grow some convenience methods in the future. We keep the `data_for_rev()` method of `Changelog` for compatibility, pointing users at the more powerful alternative.

File last commit:

r50809:58074252 default
r51268:841b13e6 default
Show More
path_utils.rs
55 lines | 1.7 KiB | application/rls-services+xml | RustLexer
Pulkit Goyal
rhg: refactor function to relativize paths in utils...
r48988 // path utils module
//
// This software may be used and distributed according to the terms of the
// GNU General Public License version 2 or any later version.
Simon Sapin
rhg: Propogate manifest parse errors instead of panicking...
r49165 use hg::errors::HgError;
Pulkit Goyal
rhg: refactor function to relativize paths in utils...
r48988 use hg::repo::Repo;
use hg::utils::current_dir;
use hg::utils::files::{get_bytes_from_path, relativize_path};
use hg::utils::hg_path::HgPath;
use hg::utils::hg_path::HgPathBuf;
use std::borrow::Cow;
Simon Sapin
rhg: refactor relativize_path into a struct + method...
r49284 pub struct RelativizePaths {
repo_root: HgPathBuf,
cwd: HgPathBuf,
outside_repo: bool,
}
impl RelativizePaths {
pub fn new(repo: &Repo) -> Result<Self, HgError> {
let cwd = current_dir()?;
let repo_root = repo.working_directory_path();
let repo_root = cwd.join(repo_root); // Make it absolute
let repo_root_hgpath =
Raphaël Gomès
rust: run `cargo clippy`...
r50809 HgPathBuf::from(get_bytes_from_path(&repo_root));
Pulkit Goyal
rhg: refactor function to relativize paths in utils...
r48988
Simon Sapin
rhg: refactor relativize_path into a struct + method...
r49284 if let Ok(cwd_relative_to_repo) = cwd.strip_prefix(&repo_root) {
// The current directory is inside the repo, so we can work with
// relative paths
Ok(Self {
repo_root: repo_root_hgpath,
cwd: HgPathBuf::from(get_bytes_from_path(
cwd_relative_to_repo,
)),
outside_repo: false,
})
} else {
Ok(Self {
repo_root: repo_root_hgpath,
cwd: HgPathBuf::from(get_bytes_from_path(cwd)),
outside_repo: true,
})
}
Pulkit Goyal
rhg: refactor function to relativize paths in utils...
r48988 }
Simon Sapin
rhg: refactor relativize_path into a struct + method...
r49284 pub fn relativize<'a>(&self, path: &'a HgPath) -> Cow<'a, [u8]> {
if self.outside_repo {
let joined = self.repo_root.join(path);
Cow::Owned(relativize_path(&joined, &self.cwd).into_owned())
Pulkit Goyal
rhg: refactor function to relativize paths in utils...
r48988 } else {
Simon Sapin
rhg: refactor relativize_path into a struct + method...
r49284 relativize_path(path, &self.cwd)
Pulkit Goyal
rhg: refactor function to relativize paths in utils...
r48988 }
}
}