From 79ca9a708d5d3372cfb9ec07d5c7cb3ce2c71148 Mon Sep 17 00:00:00 2001 From: cornfeedhobo Date: Thu, 24 Sep 2020 11:41:36 -0500 Subject: [PATCH] support multiple paths in pathmunge --- lib/helpers.bash | 18 ++++++++++++------ test/lib/helpers.bats | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 6 deletions(-) diff --git a/lib/helpers.bash b/lib/helpers.bash index da3abc0a..5078d6f8 100644 --- a/lib/helpers.bash +++ b/lib/helpers.bash @@ -680,12 +680,18 @@ then example 'pathmunge /path/to/dir is equivalent to PATH=/path/to/dir:$PATH' example 'pathmunge /path/to/dir after is equivalent to PATH=$PATH:/path/to/dir' - if ! [[ $PATH =~ (^|:)$1($|:) ]] ; then - if [ "$2" = "after" ] ; then - export PATH=$PATH:$1 - else - export PATH=$1:$PATH + IFS=':' local -a 'a=($1)' + local i=${#a[@]} + while [[ $i -gt 0 ]] ; do + i=$(( i - 1 )) + p=${a[i]} + if ! [[ $PATH =~ (^|:)$p($|:) ]] ; then + if [[ "$2" = "after" ]] ; then + export PATH=$PATH:$p + else + export PATH=$p:$PATH + fi fi - fi + done } fi diff --git a/test/lib/helpers.bats b/test/lib/helpers.bats index d4557300..6721070c 100644 --- a/test/lib/helpers.bats +++ b/test/lib/helpers.bats @@ -39,6 +39,39 @@ function local_setup { assert_failure } +@test 'helpers: pathmunge: ensure function is defined' { + run type -t pathmunge + assert_line 'function' +} + +@test 'helpers: pathmunge: single path' { + new_paths='/tmp/fake-pathmunge-path' + old_path="${PATH}" + pathmunge "${new_paths}" + assert_equal "${new_paths}:${old_path}" "${PATH}" +} + +@test 'helpers: pathmunge: single path, with space' { + new_paths='/tmp/fake pathmunge path' + old_path="${PATH}" + pathmunge "${new_paths}" + assert_equal "${new_paths}:${old_path}" "${PATH}" +} + +@test 'helpers: pathmunge: multiple paths' { + new_paths='/tmp/fake-pathmunge-path1:/tmp/fake-pathmunge-path2' + old_path="${PATH}" + pathmunge "${new_paths}" + assert_equal "${new_paths}:${old_path}" "${PATH}" +} + +@test 'helpers: pathmunge: multiple paths, with space' { + new_paths='/tmp/fake pathmunge path1:/tmp/fake pathmunge path2' + old_path="${PATH}" + pathmunge "${new_paths}" + assert_equal "${new_paths}:${old_path}" "${PATH}" +} + @test "helpers: bash-it help aliases ag" { run bash-it help aliases "ag" assert_line -n 0 "ag='ag --smart-case --pager=\"less -MIRFX'"