Improve globbing behavior with leading '.'
This commit is contained in:
parent
945c1e5a4e
commit
6c6fee697e
4 changed files with 55 additions and 1 deletions
|
@ -182,6 +182,12 @@ mapped to extended configuration dictionaries.
|
||||||
| `if` | Execute this in your `$SHELL` and only link if it is successful. |
|
| `if` | Execute this in your `$SHELL` and only link if it is successful. |
|
||||||
| `ignore-missing` | Do not fail if the source is missing and create the link anyway (default: false) |
|
| `ignore-missing` | Do not fail if the source is missing and create the link anyway (default: false) |
|
||||||
|
|
||||||
|
Dotbot uses [glob.glob](https://docs.python.org/3/library/glob.html#glob.glob)
|
||||||
|
to resolve glob paths. However, due to its design, using a glob path such as
|
||||||
|
`config/*` for example, will not match items that being with `.`. To
|
||||||
|
specifically capture items that being with `.`, you will need to use a path
|
||||||
|
like this: `config/.*`.
|
||||||
|
|
||||||
#### Example
|
#### Example
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
|
|
|
@ -76,6 +76,8 @@ class Link(dotbot.Plugin):
|
||||||
else:
|
else:
|
||||||
self._log.lowinfo("Globs from '" + path + "': " + str(glob_results))
|
self._log.lowinfo("Globs from '" + path + "': " + str(glob_results))
|
||||||
glob_base = path[:glob_star_loc]
|
glob_base = path[:glob_star_loc]
|
||||||
|
if glob_base.endswith('/.') or glob_base == '.':
|
||||||
|
glob_base = path[:glob_star_loc - 1]
|
||||||
for glob_full_item in glob_results:
|
for glob_full_item in glob_results:
|
||||||
glob_item = glob_full_item[len(glob_base):]
|
glob_item = glob_full_item[len(glob_base):]
|
||||||
glob_link_destination = os.path.join(destination, glob_item)
|
glob_link_destination = os.path.join(destination, glob_item)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
test_description='link glob'
|
test_description='link glob multi star'
|
||||||
. '../test-lib.bash'
|
. '../test-lib.bash'
|
||||||
|
|
||||||
test_expect_success 'setup' '
|
test_expect_success 'setup' '
|
||||||
|
|
|
@ -45,3 +45,49 @@ grep "apple" ~/bin/a &&
|
||||||
grep "banana" ~/bin/b &&
|
grep "banana" ~/bin/b &&
|
||||||
grep "cherry" ~/bin/c
|
grep "cherry" ~/bin/c
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'setup 3' '
|
||||||
|
rm -rf ~/bin &&
|
||||||
|
echo "dot_apple" > ${DOTFILES}/bin/.a &&
|
||||||
|
echo "dot_banana" > ${DOTFILES}/bin/.b &&
|
||||||
|
echo "dot_cherry" > ${DOTFILES}/bin/.c
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'run 3' '
|
||||||
|
run_dotbot -v <<EOF
|
||||||
|
- defaults:
|
||||||
|
link:
|
||||||
|
glob: true
|
||||||
|
create: true
|
||||||
|
- link:
|
||||||
|
~/bin/: bin/.*
|
||||||
|
EOF
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'test 3' '
|
||||||
|
grep "dot_apple" ~/bin/.a &&
|
||||||
|
grep "dot_banana" ~/bin/.b &&
|
||||||
|
grep "dot_cherry" ~/bin/.c
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'setup 4' '
|
||||||
|
rm -rf ~/bin &&
|
||||||
|
echo "dot_apple" > ${DOTFILES}/.a &&
|
||||||
|
echo "dot_banana" > ${DOTFILES}/.b &&
|
||||||
|
echo "dot_cherry" > ${DOTFILES}/.c
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'run 4' '
|
||||||
|
run_dotbot -v <<EOF
|
||||||
|
- link:
|
||||||
|
"~":
|
||||||
|
path: .*
|
||||||
|
glob: true
|
||||||
|
EOF
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'test 4' '
|
||||||
|
grep "dot_apple" ~/.a &&
|
||||||
|
grep "dot_banana" ~/.b &&
|
||||||
|
grep "dot_cherry" ~/.c
|
||||||
|
'
|
||||||
|
|
Loading…
Reference in a new issue