##// END OF EJS Templates
rhg: fallback when encountering ellipsis revisions...
rhg: fallback when encountering ellipsis revisions Ellipsis revisions are still experimental and buggy in non-trivial histories. We currently have no plans to improve this situation nor to add support for ellipsis revisions in `rhg`. Falling back should be done carefully (since we may have already done some work that is visible to the user), but in this case it's highly unlikely that we're doing anything useful with a repo with ellipsis revisions, so this should be strictly better, also since the error message is more explicit.

File last commit:

r49284:9b0e1f64 default
r50454:7787174f stable
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 =
HgPathBuf::from(get_bytes_from_path(repo_root.to_owned()));
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 }
}
}