summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md2
-rw-r--r--dotbot/executor/linker.py2
-rw-r--r--test/tests/link-environment-variable-expansion-source.bash18
-rw-r--r--test/tests/link-environment-variable-expansion-target.bash25
-rw-r--r--test/tests/link-environment-variable-unset.bash18
5 files changed, 64 insertions, 1 deletions
diff --git a/README.md b/README.md
index 3534dba..367e562 100644
--- a/README.md
+++ b/README.md
@@ -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
+'