Mercurial > public > mercurial-scm > hg
view rust/rhg/src/utils/path_utils.rs @ 48674:f7086f6173f8 stable
dirstate-v2: rename the configuration to enable the format
The rename of the old experimental name was overlooked before the 6.0 release.
We rename everything to use the new name (and keep the released name as an alias
for compatibility).
Differential Revision: https://phab.mercurial-scm.org/D12129
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 01 Feb 2022 16:36:20 +0100 |
parents | 9ecf802b06e0 |
children | 10c32e1b892a |
line wrap: on
line source
// 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. use crate::error::CommandError; use crate::ui::UiError; 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; pub fn relativize_paths( repo: &Repo, paths: impl IntoIterator<Item = impl AsRef<HgPath>>, mut callback: impl FnMut(Cow<[u8]>) -> Result<(), UiError>, ) -> Result<(), CommandError> { 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())); let outside_repo: bool; let cwd_hgpath: HgPathBuf; 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 outside_repo = false; cwd_hgpath = HgPathBuf::from(get_bytes_from_path(cwd_relative_to_repo)); } else { outside_repo = true; cwd_hgpath = HgPathBuf::from(get_bytes_from_path(cwd)); } for file in paths { if outside_repo { let file = repo_root_hgpath.join(file.as_ref()); callback(relativize_path(&file, &cwd_hgpath))?; } else { callback(relativize_path(file.as_ref(), &cwd_hgpath))?; } } Ok(()) }