update flutter install

This commit is contained in:
AJ ONeal
2020-06-14 00:20:53 -06:00
parent 525a3b3c11
commit 5a7fab00cf
2 changed files with 95 additions and 31 deletions
+67 -31
View File
@@ -18,50 +18,86 @@ set -u
# Install flutter #
###################
common_flutter_home="${HOME}/.local/opt/flutter"
new_flutter_home="${HOME}/.local/opt/flutter-v${WEBI_VERSION}"
new_flutter="${HOME}/.local/opt/flutter-v${WEBI_VERSION}/bin/flutter"
# The command name may be different from the package name
# (i.e. golang => go, rustlang => cargo, ripgrep => rg)
# Note: $HOME may contain special characters and should alway be quoted
pkg_cmd_name="flutter"
#pkg_cmd_name_formatted="flutter $WEBI_VERSION"
# Test for existing version
set +e
cur_flutter="$(command -v flutter)"
set -e
if [ -n "$cur_flutter" ]; then
cur_ver=$(flutter --version | head -n 1 | cut -d' ' -f2)
if [ "$cur_ver" == "$(echo $WEBI_VERSION)" ]; then
echo "flutter v$WEBI_VERSION already installed at $cur_flutter"
exit 0
elif [ "$cur_flutter" != "$new_flutter" ]; then
echo "WARN: possible conflict with flutter v$WEBI_VERSION at $cur_flutter"
fi
fi
# Some of these directories may be the same
pkg_common_opt="$HOME/.local/opt/flutter"
pkg_common_bin="$HOME/.local/opt/flutter/bin"
pkg_common_cmd="$HOME/.local/opt/flutter/bin/flutter"
pkg_new_opt="$HOME/.local/opt/flutter-v$WEBI_VERSION"
pkg_new_bin="$HOME/.local/opt/flutter-v$WEBI_VERSION/bin"
pkg_new_cmd="$HOME/.local/opt/flutter-v$WEBI_VERSION/bin/flutter"
pkg_current_cmd=""
webi_download
# The version info should be reduced to a sortable version, without any leading characters
# (i.e. v12.8.0 => 12.8.0, go1.14 => 1.14, 1.12.13+hotfix => 1.12.13+hotfix)
pkg_get_current_version() {
echo "$(flutter --version 2>/dev/null | head -n 1 | cut -d' ' -f2)"
}
webi_extract
# Any version-related directories should be unlinked and relinked to the correct version
# (for example: 'go' is special and needs both $HOME/go and $HOME/.local/opt/go)
# (others like 'rg', 'hugo', and 'caddy' are single files that just get replaced)
pkg_switch_version() {
rm -rf "$pkg_common_opt"
ln -s "$pkg_new_opt" "$pkg_common_opt"
}
pushd "${WEBI_TMP}" 2>&1 >/dev/null
echo Installing flutter v${WEBI_VERSION} as "$new_flutter"
# Different packages represent the version in different ways
# ex: node v12.8.0 (leading 'v')
# ex: go1.14 (no space, nor trailing '.0's)
# ex: flutter 1.17.2 (plain)
pkg_format_cmd_version() {
my_version=$1
echo "$pkg_cmd_name $my_version"
}
pkg_install() {
pushd "$WEBI_TMP" 2>&1 >/dev/null
# simpler for single-binary commands
#mv ./example*/bin/example "$HOME/.local/bin"
# best for packages and toolchains
rm -rf "$new_flutter_home"
if [ -n "$(command -v rsync 2>/dev/null | grep rsync)" ]; then
rsync -Krl ./flutter*/ "$new_flutter_home/" 2>/dev/null
rsync -Krl ./flutter*/ "$pkg_new_opt/" 2>/dev/null
else
cp -Hr ./flutter*/* "$new_flutter_home/" 2>/dev/null
cp -Hr ./flutter*/.* "$new_flutter_home/" 2>/dev/null
cp -Hr ./flutter*/* "$pkg_new_opt/" 2>/dev/null
cp -Hr ./flutter*/.* "$pkg_new_opt/" 2>/dev/null
fi
rm -rf ./flutter*
popd 2>&1 >/dev/null
popd 2>&1 >/dev/null
}
###################
# Update PATH #
###################
pkg_post_install() {
webi_path_add "$pkg_common_bin"
}
#
# The webi_* functions are defined in webi/template.bash at https://github.com/webinstall/packages
#
# for packages that can have multiple versions
webi_check
# for packages that can be downloaded via links in ./releases.js
webi_download
# for single files or packaged directories (compressed or uncompressed)
# supported formats: .xz, .tar.*, and .zip
webi_extract
echo "Installing '$pkg_cmd_name' v$WEBI_VERSION as $pkg_new_cmd"
# for installing the tool
pkg_install
# for updating paths and installing companion tools
pkg_post_install
# for re-linking to a previously installed version
pkg_switch_version
echo "Installed '$pkg_cmd_name' v$WEBI_VERSION as $pkg_new_cmd"
# TODO get better output from pathman / output the path to add as return to webi bootstrap
webi_path_add "$new_flutter_home/bin"
echo "Installed 'flutter'"
echo ""
+28
View File
@@ -43,6 +43,34 @@ export WEBI_CURL="$(command -v curl)"
export WEBI_WGET="$(command -v wget)"
set -e
webi_check() {
# Test for existing version
set +e
pkg_current_cmd="$(command -v "$pkg_cmd_name")"
set -e
my_current_version=""
if [ -n "$pkg_current_cmd" ]; then
pkg_current_version="$(pkg_get_current_version)"
# remove trailing '.0's for golang's sake
my_current_version="$(echo $pkg_current_version | sed 's:\.0::g')"
my_new_version="$(echo $WEBI_VERSION | sed 's:\.0::g')"
my_canonical_name="$(pkg_format_cmd_version "$WEBI_VERSION")"
if [ "$my_new_version" == "$my_current_version" ]; then
echo "$my_canonical_name already installed at $pkg_current_cmd"
exit 0
else
if [ "$pkg_current_cmd" != "$pkg_common_cmd" ]; then
echo "WARN: possible conflict between $my_canonical_name and $pkg_current_version at $pkg_current_cmd"
fi
if [ -x "$pkg_new_cmd" ]; then
pkg_switch_version
echo "switched to $my_canonical_name at $pkg_new_opt"
exit 0
fi
fi
fi
}
webi_download() {
if [ -n "${1:-}" ]; then
my_url="$1"