diff --git a/bash_it.sh b/bash_it.sh index 504e26b0..ef2a6d07 100755 --- a/bash_it.sh +++ b/bash_it.sh @@ -48,6 +48,9 @@ done # TODO Automatically check for content that needs to be migrated +# Load the global "enabled" directory +_load_global_bash_it_files + # Load enabled aliases, completion, plugins for file_type in "aliases" "plugins" "completion" do diff --git a/lib/helpers.bash b/lib/helpers.bash index c08403d8..1bcf7844 100644 --- a/lib/helpers.bash +++ b/lib/helpers.bash @@ -20,6 +20,20 @@ function _load_bash_it_files() { fi } +function _load_global_bash_it_files() { + # In the new structure + if [ -d "${BASH_IT}/enabled" ] + then + FILES="${BASH_IT}/enabled/*.bash" + for config_file in $FILES + do + if [ -e "${config_file}" ]; then + source $config_file + fi + done + fi +} + # Function for reloading aliases function reload_aliases() { _load_bash_it_files "aliases" diff --git a/test/bash_it/bash_it.bats b/test/bash_it/bash_it.bats index 92dda192..d41ddbf4 100644 --- a/test/bash_it/bash_it.bats +++ b/test/bash_it/bash_it.bats @@ -15,8 +15,8 @@ function local_setup { rm -rf "$BASH_IT"/completion/enabled rm -rf "$BASH_IT"/plugins/enabled - cp -r "$BASH_IT/test/fixtures/bash_it/aliases" "$BASH_IT" - cp -r "$BASH_IT/test/fixtures/bash_it/plugins" "$BASH_IT" + # Copy the test fixture to the Bash-it folder + rsync -a "$BASH_IT/test/fixtures/bash_it/" "$BASH_IT/" # Don't pollute the user's actual $HOME directory # Use a test home directory instead @@ -137,6 +137,100 @@ function local_teardown { assert_line "0" "alias test_alias='c'" } +@test "bash-it: load global aliases in order" { + mkdir -p $BASH_IT/enabled + + ln -s $BASH_IT/plugins/available/base.plugin.bash $BASH_IT/enabled/250---base.plugin.bash + assert [ -L "$BASH_IT/enabled/250---base.plugin.bash" ] + + ln -s $BASH_IT/aliases/available/a.aliases.bash $BASH_IT/enabled/150---a.aliases.bash + assert [ -L "$BASH_IT/enabled/150---a.aliases.bash" ] + ln -s $BASH_IT/aliases/available/b.aliases.bash $BASH_IT/enabled/150---b.aliases.bash + assert [ -L "$BASH_IT/enabled/150---b.aliases.bash" ] + + # The `test_alias` alias should not exist + run alias test_alias &> /dev/null + assert_failure + + load "$BASH_IT/bash_it.sh" + + run alias test_alias &> /dev/null + assert_success + assert_line "0" "alias test_alias='b'" +} + +@test "bash-it: load global aliases in priority order" { + mkdir -p $BASH_IT/enabled + + ln -s $BASH_IT/plugins/available/base.plugin.bash $BASH_IT/enabled/250---base.plugin.bash + assert [ -L "$BASH_IT/enabled/250---base.plugin.bash" ] + + ln -s $BASH_IT/aliases/available/a.aliases.bash $BASH_IT/enabled/175---a.aliases.bash + assert [ -L "$BASH_IT/enabled/175---a.aliases.bash" ] + ln -s $BASH_IT/aliases/available/b.aliases.bash $BASH_IT/enabled/150---b.aliases.bash + assert [ -L "$BASH_IT/enabled/150---b.aliases.bash" ] + + # The `test_alias` alias should not exist + run alias test_alias &> /dev/null + assert_failure + + load "$BASH_IT/bash_it.sh" + + run alias test_alias &> /dev/null + assert_success + assert_line "0" "alias test_alias='a'" +} + +@test "bash-it: load global aliases and plugins in priority order" { + mkdir -p $BASH_IT/enabled + + ln -s $BASH_IT/plugins/available/base.plugin.bash $BASH_IT/enabled/250---base.plugin.bash + assert [ -L "$BASH_IT/enabled/250---base.plugin.bash" ] + + ln -s $BASH_IT/aliases/available/a.aliases.bash $BASH_IT/enabled/150---a.aliases.bash + assert [ -L "$BASH_IT/enabled/150---a.aliases.bash" ] + ln -s $BASH_IT/aliases/available/b.aliases.bash $BASH_IT/enabled/150---b.aliases.bash + assert [ -L "$BASH_IT/enabled/150---b.aliases.bash" ] + ln -s $BASH_IT/plugins/available/c.plugin.bash $BASH_IT/enabled/250---c.plugin.bash + assert [ -L "$BASH_IT/enabled/250---c.plugin.bash" ] + + # The `test_alias` alias should not exist + run alias test_alias &> /dev/null + assert_failure + + load "$BASH_IT/bash_it.sh" + + run alias test_alias &> /dev/null + assert_success + assert_line "0" "alias test_alias='c'" +} + +@test "bash-it: load global aliases and plugins in priority order, with one alias higher than plugins" { + mkdir -p $BASH_IT/enabled + + ln -s $BASH_IT/plugins/available/base.plugin.bash $BASH_IT/enabled/250---base.plugin.bash + assert [ -L "$BASH_IT/enabled/250---base.plugin.bash" ] + + ln -s $BASH_IT/aliases/available/a.aliases.bash $BASH_IT/enabled/350---a.aliases.bash + assert [ -L "$BASH_IT/enabled/350---a.aliases.bash" ] + ln -s $BASH_IT/aliases/available/b.aliases.bash $BASH_IT/enabled/150---b.aliases.bash + assert [ -L "$BASH_IT/enabled/150---b.aliases.bash" ] + ln -s $BASH_IT/plugins/available/c.plugin.bash $BASH_IT/enabled/250---c.plugin.bash + assert [ -L "$BASH_IT/enabled/250---c.plugin.bash" ] + + # The `test_alias` alias should not exist + run alias test_alias &> /dev/null + assert_failure + + load "$BASH_IT/bash_it.sh" + + run alias test_alias &> /dev/null + assert_success + # This will be a, loaded from the a aliases, since the global directory + # loads all component types at once + assert_line "0" "alias test_alias='a'" +} + @test "bash-it: load enabled aliases from new structure, priority-based" { mkdir -p $BASH_IT/enabled ln -s $BASH_IT/aliases/available/atom.aliases.bash $BASH_IT/enabled/150---atom.aliases.bash