diff --git a/shared.sh b/shared.sh index e1624ce..c4bfb11 100644 --- a/shared.sh +++ b/shared.sh @@ -20,19 +20,13 @@ pcre_old_calver='^(?P0|[1-9]\d*)-0{0,1}(?P0|[0-9]\d*)-R(?P0 remove_prefix() { local tag="$1" if [[ -n "${tag_prefix:-}" ]]; then - # Escape special characters in tag_prefix - local escaped_prefix - escaped_prefix=$(printf '%s\n' "$tag_prefix" | sed 's/[][\/.^$*]/\\&/g') # special chars matched by sed: ] [ / . ^ $ * - - # shellcheck disable=SC2143 - if [[ -z "$(echo "${tag}" | grep "^${tag_prefix}")" ]] ; then - echo "" - return + if [[ "${tag}" == "${tag_prefix}"* ]]; then + printf '%s\n' "${tag:${#tag_prefix}}" + else + printf '\n' fi - # shellcheck disable=SC2001 - echo "${tag}" | sed "s|^${escaped_prefix}||" # Use | as the delimiter to avoid conflicts with / else - echo "${tag}" + printf '%s\n' "${tag}" fi } diff --git a/tests/test_version-lookup.bats b/tests/test_version-lookup.bats index ebb03f1..ff6082d 100644 --- a/tests/test_version-lookup.bats +++ b/tests/test_version-lookup.bats @@ -103,6 +103,35 @@ function init_repo { [[ "$output" = *"CURRENT_V_VERSION=v0.1.2"* ]] } +@test "treats tag_prefix as a literal string" { + init_repo + + export tag_prefix="v." + + git tag v.1.2.3 + git tag v1.9.9 + + run version-lookup.sh + + print_run_info + [ "$status" -eq 0 ] && + [[ "$output" = *"CURRENT_VERSION=1.2.3"* ]] +} + +@test "supports a tag_prefix containing a sed delimiter" { + init_repo + + export tag_prefix="foo|bar@" + + git tag "foo|bar@1.2.3" + + run version-lookup.sh + + print_run_info + [ "$status" -eq 0 ] && + [[ "$output" = *"CURRENT_VERSION=1.2.3"* ]] +} + @test "finds the current normal version even if there's a newer pre-release version" { init_repo