Skip to content

Commit 5d0eb33

Browse files
committed
os: keep the glob prefix verbatim before wildcard folders
1 parent 5f161cf commit 5d0eb33

2 files changed

Lines changed: 24 additions & 3 deletions

File tree

‎vlib/os/glob_prefix_test.v‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,23 @@ fn test_glob_keeps_a_repeated_prefix_verbatim() {
4141
assert '.././vlib/os/os.v' in os.glob('.././vlib/os/*.v')!
4242
os.chdir(@VMODROOT)!
4343
}
44+
45+
fn test_glob_keeps_a_dot_prefix_before_a_wildcard_folder() {
46+
$if windows {
47+
return
48+
}
49+
root := os.join_path(os.vtmp_dir(), 'glob_dot_prefix_wildcard_${os.getpid()}')
50+
os.mkdir_all(os.join_path(root, 'sub'))!
51+
os.write_file(os.join_path(root, 'sub', 'a.v'), '')!
52+
os.write_file(os.join_path(root, 'root.v'), '')!
53+
defer {
54+
os.chdir(@VMODROOT) or {}
55+
os.rmdir_all(root) or {}
56+
}
57+
os.chdir(root)!
58+
assert os.glob('./*/a.v')! == ['./sub/a.v']
59+
assert os.glob('././*/a.v')! == ['././sub/a.v']
60+
assert os.glob('./**/*.v')! == ['./root.v', './sub/a.v']
61+
// Files matched right in the start folder carry no walked root.
62+
assert os.glob('./*.v')! == ['./root.v']
63+
}

‎vlib/os/os_nix.c.v‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -215,11 +215,12 @@ fn native_glob_pattern(pattern string, mut matches []string) ! {
215215
}
216216
if prefix != '' {
217217
// The walk reports paths rooted at the folded start folder; swap that
218-
// root for the prefix as it was written in the pattern.
219-
walked := if cwd == '.' { '' } else { '${cwd}${path_separator}' }
218+
// root for the prefix as it was written in the pattern. From `.`, only the
219+
// folders matched by a wildcard or walked by `**` start with `./`.
220+
walked := '${cwd}${path_separator}'
220221
for i := from; i < matches.len; i++ {
221222
found := matches[i]
222-
matches[i] = if walked != '' && found.starts_with(walked) {
223+
matches[i] = if found.starts_with(walked) {
223224
'${prefix}${found[walked.len..]}'
224225
} else {
225226
'${prefix}${found}'

0 commit comments

Comments
 (0)