diff options
-rw-r--r-- | README.md | 2 | ||||
-rw-r--r-- | dotbot/executor/linker.py | 2 | ||||
-rw-r--r-- | test/tests/link-environment-variable-expansion-source.bash | 18 | ||||
-rw-r--r-- | test/tests/link-environment-variable-expansion-target.bash | 25 | ||||
-rw-r--r-- | test/tests/link-environment-variable-unset.bash | 18 |
5 files changed, 64 insertions, 1 deletions
@@ -118,7 +118,7 @@ Following the formatting used in the examples is a good idea. Link commands specify how files and directories should be symbolically linked. If desired, items can be specified to be forcibly linked, overwriting existing -files if necessary. +files if necessary. Environment variables in paths are automatically expanded. #### Format diff --git a/dotbot/executor/linker.py b/dotbot/executor/linker.py index f0e94bc..5c12ea0 100644 --- a/dotbot/executor/linker.py +++ b/dotbot/executor/linker.py @@ -19,6 +19,8 @@ class Linker(Executor): def _process_links(self, links): success = True for destination, source in links.items(): + source = os.path.expandvars(source) + destination = os.path.expandvars(destination) if isinstance(source, dict): # extended config path = source['path'] diff --git a/test/tests/link-environment-variable-expansion-source.bash b/test/tests/link-environment-variable-expansion-source.bash new file mode 100644 index 0000000..50456d6 --- /dev/null +++ b/test/tests/link-environment-variable-expansion-source.bash @@ -0,0 +1,18 @@ +test_description='link expands environment variables in source' +. '../test-lib.bash' + +test_expect_success 'setup' ' +echo "grape" > ${DOTFILES}/h +' + +test_expect_success 'run' ' +export APPLE="h" && +run_dotbot <<EOF +- link: + ~/.i: \$APPLE +EOF +' + +test_expect_success 'test' ' +grep "grape" ~/.i +' diff --git a/test/tests/link-environment-variable-expansion-target.bash b/test/tests/link-environment-variable-expansion-target.bash new file mode 100644 index 0000000..3a2e4dd --- /dev/null +++ b/test/tests/link-environment-variable-expansion-target.bash @@ -0,0 +1,25 @@ +test_description='link expands environment variables in target' +. '../test-lib.bash' + +test_expect_success 'setup' ' +echo "apple" > ${DOTFILES}/f && +echo "grape" > ${DOTFILES}/h +' + +test_expect_success 'run' ' +export ORANGE=".config" && +export BANANA="g" && +unset PEAR && +run_dotbot <<EOF +- link: + ~/\${ORANGE}/\$BANANA: + path: f + create: true + ~/\$PEAR: h +EOF +' + +test_expect_success 'test' ' +grep "apple" ~/.config/g && +grep "grape" ~/\$PEAR +' diff --git a/test/tests/link-environment-variable-unset.bash b/test/tests/link-environment-variable-unset.bash new file mode 100644 index 0000000..8673729 --- /dev/null +++ b/test/tests/link-environment-variable-unset.bash @@ -0,0 +1,18 @@ +test_description='link leaves unset environment variables' +. '../test-lib.bash' + +test_expect_success 'setup' ' +echo "apple" > ${DOTFILES}/\$ORANGE +' + +test_expect_success 'run' ' +unset ORANGE && +run_dotbot <<EOF +- link: + ~/.f: \$ORANGE +EOF +' + +test_expect_success 'test' ' +grep "apple" ~/.f +' |