mirror of
https://github.com/martinvonz/jj.git
synced 2024-12-27 06:27:43 +00:00
repo_path: accept from_relative_path("."), make "".to_fs_path("") return "."
It's common to normalize an empty directory path as ".". This change unblocks the use of from_relative_path() in edit_sparse(). There are a couple of callers who do to_fs_path(Path::new("")), but they all translate non-directory paths, which should never be empty.
This commit is contained in:
parent
a2a9b7decb
commit
8ad0a703d4
1 changed files with 9 additions and 5 deletions
|
@ -203,11 +203,15 @@ impl RepoPathBuf {
|
||||||
|
|
||||||
/// Converts repo-relative `Path` to `RepoPathBuf`.
|
/// Converts repo-relative `Path` to `RepoPathBuf`.
|
||||||
///
|
///
|
||||||
/// The input path should not contain `.` or `..`.
|
/// The input path should not contain redundant `.` or `..`.
|
||||||
pub fn from_relative_path(
|
pub fn from_relative_path(
|
||||||
relative_path: impl AsRef<Path>,
|
relative_path: impl AsRef<Path>,
|
||||||
) -> Result<Self, RelativePathParseError> {
|
) -> Result<Self, RelativePathParseError> {
|
||||||
let relative_path = relative_path.as_ref();
|
let relative_path = relative_path.as_ref();
|
||||||
|
if relative_path == Path::new(".") {
|
||||||
|
return Ok(Self::root());
|
||||||
|
}
|
||||||
|
|
||||||
let mut components = relative_path
|
let mut components = relative_path
|
||||||
.components()
|
.components()
|
||||||
.map(|c| match c {
|
.map(|c| match c {
|
||||||
|
@ -247,9 +251,6 @@ impl RepoPathBuf {
|
||||||
let input = input.as_ref();
|
let input = input.as_ref();
|
||||||
let abs_input_path = file_util::normalize_path(&cwd.join(input));
|
let abs_input_path = file_util::normalize_path(&cwd.join(input));
|
||||||
let repo_relative_path = file_util::relative_path(base, &abs_input_path);
|
let repo_relative_path = file_util::relative_path(base, &abs_input_path);
|
||||||
if repo_relative_path == Path::new(".") {
|
|
||||||
return Ok(Self::root());
|
|
||||||
}
|
|
||||||
Self::from_relative_path(repo_relative_path).map_err(|source| FsPathParseError {
|
Self::from_relative_path(repo_relative_path).map_err(|source| FsPathParseError {
|
||||||
base: file_util::relative_path(cwd, base).into(),
|
base: file_util::relative_path(cwd, base).into(),
|
||||||
input: input.into(),
|
input: input.into(),
|
||||||
|
@ -303,6 +304,9 @@ impl RepoPath {
|
||||||
let mut result = PathBuf::with_capacity(base.as_os_str().len() + self.value.len() + 1);
|
let mut result = PathBuf::with_capacity(base.as_os_str().len() + self.value.len() + 1);
|
||||||
result.push(base);
|
result.push(base);
|
||||||
result.extend(self.components().map(RepoPathComponent::as_str));
|
result.extend(self.components().map(RepoPathComponent::as_str));
|
||||||
|
if result.as_os_str().is_empty() {
|
||||||
|
result.push(".");
|
||||||
|
}
|
||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -646,7 +650,7 @@ mod tests {
|
||||||
repo_path("").to_fs_path(Path::new("base/dir")),
|
repo_path("").to_fs_path(Path::new("base/dir")),
|
||||||
Path::new("base/dir")
|
Path::new("base/dir")
|
||||||
);
|
);
|
||||||
assert_eq!(repo_path("").to_fs_path(Path::new("")), Path::new(""));
|
assert_eq!(repo_path("").to_fs_path(Path::new("")), Path::new("."));
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
repo_path("file").to_fs_path(Path::new("base/dir")),
|
repo_path("file").to_fs_path(Path::new("base/dir")),
|
||||||
Path::new("base/dir/file")
|
Path::new("base/dir/file")
|
||||||
|
|
Loading…
Reference in a new issue