ok/jj
1
0
Fork 0
forked from mirrors/jj

repo_path: rename to_internal_string() to separate names for dir vs file

This commit is contained in:
Martin von Zweigbergk 2021-05-16 23:18:33 -07:00
parent 257ea39e68
commit ef726be78b
2 changed files with 22 additions and 18 deletions

View file

@ -64,7 +64,7 @@ pub struct RepoPath {
impl Debug for RepoPath {
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error> {
f.write_fmt(format_args!("{:?}", &self.to_internal_string()))
f.write_fmt(format_args!("{:?}", &self.to_internal_file_string()))
}
}
@ -84,8 +84,8 @@ impl RepoPath {
/// The full string form used internally, not for presenting to users (where
/// we may want to use the platform's separator).
pub fn to_internal_string(&self) -> String {
self.dir.to_internal_string() + self.basename.value()
pub fn to_internal_file_string(&self) -> String {
self.dir.to_internal_dir_string() + self.basename.value()
}
pub fn to_dir_repo_path(&self) -> DirRepoPath {
@ -151,7 +151,7 @@ pub struct DirRepoPath {
impl Debug for DirRepoPath {
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error> {
f.write_fmt(format_args!("{:?}", &self.to_internal_string()))
f.write_fmt(format_args!("{:?}", &self.to_internal_dir_string()))
}
}
@ -166,7 +166,7 @@ impl DirRepoPath {
/// The full string form used internally, not for presenting to users (where
/// we may want to use the platform's separator).
pub fn to_internal_string(&self) -> String {
pub fn to_internal_dir_string(&self) -> String {
let mut result = String::new();
for component in &self.value {
result.push_str(component.value());
@ -272,14 +272,17 @@ mod tests {
#[test]
fn test_value() {
assert_eq!(RepoPath::root().to_internal_string(), "");
assert_eq!(RepoPath::from("dir").to_internal_string(), "dir");
assert_eq!(RepoPath::from("file").to_internal_string(), "file");
assert_eq!(RepoPath::from("dir/file").to_internal_string(), "dir/file");
assert_eq!(DirRepoPath::root().to_internal_string(), "");
assert_eq!(DirRepoPath::from("dir/").to_internal_string(), "dir/");
assert_eq!(RepoPath::root().to_internal_file_string(), "");
assert_eq!(RepoPath::from("dir").to_internal_file_string(), "dir");
assert_eq!(RepoPath::from("file").to_internal_file_string(), "file");
assert_eq!(
DirRepoPath::from("dir/subdir/").to_internal_string(),
RepoPath::from("dir/file").to_internal_file_string(),
"dir/file"
);
assert_eq!(DirRepoPath::root().to_internal_dir_string(), "");
assert_eq!(DirRepoPath::from("dir/").to_internal_dir_string(), "dir/");
assert_eq!(
DirRepoPath::from("dir/subdir/").to_internal_dir_string(),
"dir/subdir/"
);
}

View file

@ -229,9 +229,10 @@ impl TreeState {
let mut proto = crate::protos::working_copy::TreeState::new();
proto.tree_id = self.tree_id.0.clone();
for (file, file_state) in &self.file_states {
proto
.file_states
.insert(file.to_internal_string(), file_state_to_proto(file_state));
proto.file_states.insert(
file.to_internal_file_string(),
file_state_to_proto(file_state),
);
}
let mut temp_file = NamedTempFile::new_in(&self.state_path).unwrap();
@ -332,7 +333,7 @@ impl TreeState {
let (dir, disk_dir, git_ignore) = work.pop().unwrap();
let git_ignore = TreeState::try_chain_gitignore(
&git_ignore,
&dir.to_internal_string(),
&dir.to_internal_dir_string(),
disk_dir.join(".gitignore"),
);
for maybe_entry in disk_dir.read_dir().unwrap() {
@ -345,7 +346,7 @@ impl TreeState {
}
if file_type.is_dir() {
let subdir = dir.join(&DirRepoPathComponent::from(name));
if git_ignore.matches_all_files_in(&subdir.to_internal_string()) {
if git_ignore.matches_all_files_in(&subdir.to_internal_dir_string()) {
// If the whole directory is ignored, skip it unless we're already tracking
// some file in it. TODO: This is pretty ugly... Also, we should
// optimize it to check exactly the already-tracked files (we know that
@ -378,7 +379,7 @@ impl TreeState {
match self.file_states.get(&file) {
None => {
// untracked
if git_ignore.matches_file(&file.to_internal_string()) {
if git_ignore.matches_file(&file.to_internal_file_string()) {
continue;
}
clean = false;