dctlenv/libexec/dctlenv-use

46 lines
1.7 KiB
Bash
Executable File

#!/usr/bin/env bash
set -uo pipefail
[ "$#" -gt 1 ] && log_error "Need 1 version instead of $#" 'usage: dctlenv use [<version>]'
version_requested="${1:-""}"
[ -n "$version_requested" ] || log_error 'Version is not specified' 'usage: dctlenv use [<version>]'
version_requested=$(echo $version_requested | sed 's/^v//')
if [[ $version_requested == "latest" ]]; then
version_requested="$(dctlenv-list-remote | tail -n 1)"
fi
log_debug "Searching $DCTLENV_ROOT/versions for version matching $version_requested"
version="$(\find "$DCTLENV_ROOT/versions" -type d -exec basename {} \; 2>/dev/null \
| tail -n +2 \
| sort -t'.' -k 1nr,1 -k 2nr,2 -k 3nr,3 \
| grep -e "$version_requested" \
| head -n 1
)"
if [ -n "$version" ]; then
log_debug "Found version: $version"
else
echo "No installed versions of driftctl matched '$version_requested', let's install it"
$(dctlenv-install $version_requested 1>/dev/null) || log_error "Installation of version $version_requested failed"
version=$version_requested
fi
target_path="$DCTLENV_ROOT/versions/$version"
[ -f "$target_path/driftctl" ] \
|| log_error "Version directory for $version is present, but the driftctl binary is not! Manual intervention required"
[ -x "$target_path/driftctl" ] \
|| log_error "Version directory for $version is present, but the driftctl binary is not executable! Manual intervention required"
echo "Switching version to v$version"
version_file="$(dctlenv-version-file)"
log_debug "Writing \"$version\" to \"$version_file\""
echo "$version" > "$version_file" || log_error "Failed to switch to v$version"
$(driftctl version 1>/dev/null) || log_error "'driftctl version' failed, something is wrong"
echo "Switching completed"