forked from extern/nushell
Correction bug multiple dots mkdir and touch (#8486)
This commit is contained in:
parent
1134c2f16c
commit
01e5ba01f6
@ -84,3 +84,45 @@ fn print_created_paths() {
|
|||||||
assert!(actual.err.contains("dir_3"));
|
assert!(actual.err.contains("dir_3"));
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn creates_directory_three_dots() {
|
||||||
|
Playground::setup("mkdir_test_1", |dirs, _| {
|
||||||
|
nu!(
|
||||||
|
cwd: dirs.test(),
|
||||||
|
"mkdir test..."
|
||||||
|
);
|
||||||
|
|
||||||
|
let expected = dirs.test().join("test...");
|
||||||
|
|
||||||
|
assert!(expected.exists());
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn creates_directory_four_dots() {
|
||||||
|
Playground::setup("mkdir_test_1", |dirs, _| {
|
||||||
|
nu!(
|
||||||
|
cwd: dirs.test(),
|
||||||
|
"mkdir test...."
|
||||||
|
);
|
||||||
|
|
||||||
|
let expected = dirs.test().join("test....");
|
||||||
|
|
||||||
|
assert!(expected.exists());
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn creates_directory_three_dots_quotation_marks() {
|
||||||
|
Playground::setup("mkdir_test_1", |dirs, _| {
|
||||||
|
nu!(
|
||||||
|
cwd: dirs.test(),
|
||||||
|
"mkdir 'test...'"
|
||||||
|
);
|
||||||
|
|
||||||
|
let expected = dirs.test().join("test...");
|
||||||
|
|
||||||
|
assert!(expected.exists());
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@ -122,3 +122,42 @@ fn not_create_file_if_it_not_exists() {
|
|||||||
assert!(!path.exists());
|
assert!(!path.exists());
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn creates_file_three_dots() {
|
||||||
|
Playground::setup("create_test_1", |dirs, _sandbox| {
|
||||||
|
nu!(
|
||||||
|
cwd: dirs.test(),
|
||||||
|
"touch file..."
|
||||||
|
);
|
||||||
|
|
||||||
|
let path = dirs.test().join("file...");
|
||||||
|
assert!(path.exists());
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn creates_file_four_dots() {
|
||||||
|
Playground::setup("create_test_1", |dirs, _sandbox| {
|
||||||
|
nu!(
|
||||||
|
cwd: dirs.test(),
|
||||||
|
"touch file...."
|
||||||
|
);
|
||||||
|
|
||||||
|
let path = dirs.test().join("file....");
|
||||||
|
assert!(path.exists());
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn creates_file_four_dots_quotation_marks() {
|
||||||
|
Playground::setup("create_test_1", |dirs, _sandbox| {
|
||||||
|
nu!(
|
||||||
|
cwd: dirs.test(),
|
||||||
|
"touch 'file....'"
|
||||||
|
);
|
||||||
|
|
||||||
|
let path = dirs.test().join("file....");
|
||||||
|
assert!(path.exists());
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@ -33,6 +33,7 @@ pub fn expand_ndots(path: impl AsRef<Path>) -> PathBuf {
|
|||||||
|
|
||||||
// find if we need to expand any >2 dot paths and early exit if not
|
// find if we need to expand any >2 dot paths and early exit if not
|
||||||
let mut dots_count = 0u8;
|
let mut dots_count = 0u8;
|
||||||
|
let mut not_separator_before_dot = false;
|
||||||
let ndots_present = {
|
let ndots_present = {
|
||||||
for chr in path_str.chars() {
|
for chr in path_str.chars() {
|
||||||
if chr == '.' {
|
if chr == '.' {
|
||||||
@ -42,7 +43,7 @@ pub fn expand_ndots(path: impl AsRef<Path>) -> PathBuf {
|
|||||||
// this path component had >2 dots
|
// this path component had >2 dots
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
not_separator_before_dot = !(is_separator(chr) || chr.is_whitespace());
|
||||||
dots_count = 0;
|
dots_count = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -50,7 +51,7 @@ pub fn expand_ndots(path: impl AsRef<Path>) -> PathBuf {
|
|||||||
dots_count > 2
|
dots_count > 2
|
||||||
};
|
};
|
||||||
|
|
||||||
if !ndots_present {
|
if !ndots_present || not_separator_before_dot {
|
||||||
return path.as_ref().into();
|
return path.as_ref().into();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user