make link before add to PATH package's responsibility
[webi-installers/.git] / webi / template.bash
index 8c42305ff9fdc953628fd431f1841e35c722a07f..d346078cf8bb775fda615a804fee7c9cc84e7dcc 100644 (file)
@@ -11,6 +11,7 @@ set -u
 #WEBI_HOST=
 #WEBI_RELEASES=
 #WEBI_CSV=
+#WEBI_TAG=
 #WEBI_VERSION=
 #WEBI_MAJOR=
 #WEBI_MINOR=
@@ -22,12 +23,13 @@ set -u
 #WEBI_EXT=
 #WEBI_PKG_URL=
 #WEBI_PKG_FILE=
+export WEBI_HOST
 
 ##
 ## Set up tmp, download, and install directories
 ##
 
-WEBI_TMP=${WEBI_TMP:-"$(mktemp -d -t webinstall-go.XXXXXXXX)"}
+WEBI_TMP=${WEBI_TMP:-"$(mktemp -d -t webinstall-${WEBI_PKG:-}.XXXXXXXX)"}
 
 mkdir -p "$HOME/Downloads"
 mkdir -p "$HOME/.local/bin"
@@ -41,24 +43,68 @@ export WEBI_CURL="$(command -v curl)"
 export WEBI_WGET="$(command -v wget)"
 set -e
 
+webi_check() {
+    # Test for existing version
+    set +e
+    my_current_cmd="$(command -v "$pkg_cmd_name")"
+    set -e
+    if [ -n "$my_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')"
+        if [ -n "$(command -v pkg_format_cmd_version)" ]; then
+            my_canonical_name="$(pkg_format_cmd_version "$WEBI_VERSION")"
+        else
+            #my_canonical_name="$WEBI_NAME $WEBI_VERSION"
+            my_canonical_name="$pkg_cmd_name v$WEBI_VERSION"
+        fi
+        if [ "$my_new_version" == "$my_current_version" ]; then
+            echo "$my_canonical_name already installed at $my_current_cmd"
+            exit 0
+        else
+            if [ "$my_current_cmd" != "$pkg_common_cmd" ]; then
+                echo "WARN: possible conflict between $my_canonical_name and $pkg_current_version at $my_current_cmd"
+            fi
+            if [ -x "$pkg_new_cmd" ]; then
+                pkg_link_new_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"
     else
+        if [ "error" == "$WEBI_CHANNEL" ]; then
+            echo "Could not find $WEBI_NAME v$WEBI_VERSION"
+            exit 1
+        fi
         my_url="$WEBI_PKG_URL"
         echo "Downloading $WEBI_NAME v$WEBI_VERSION"
     fi
     if [ -n "${2:-}" ]; then
         my_dl="$2"
     else
-        my_dl="$WEBI_PKG_FILE"
+        my_dl="$HOME/Downloads/$WEBI_PKG_FILE"
     fi
 
     if [ -n "$WEBI_WGET" ]; then
         # wget has resumable downloads
-        wget -c "$my_url" --user-agent="wget $WEBI_UA" -O "$my_dl"
+        # TODO wget -c --content-disposition "$my_url"
+        set +e
+        wget -q --show-progress -c "$my_url" --user-agent="wget $WEBI_UA" -O "$my_dl"
+        if ! [ $? -eq 0 ]; then
+          echo "failed to download from $WEBI_PKG_URL"
+          exit 1
+        fi
+        set -e
     else
         # BSD curl is non-resumable, hence we don't bother
+        # TODO curl -fsSL --remote-name --remote-header-name --write-out "$my_url"
         curl -fSL "$my_url" -H "User-Agent: curl $WEBI_UA" -o "$my_dl"
     fi
 }
@@ -71,6 +117,12 @@ webi_extract() {
         elif [ "zip" == "$WEBI_EXT" ]; then
             echo "Extracting $HOME/Downloads/$WEBI_PKG_FILE"
             unzip "$HOME/Downloads/$WEBI_PKG_FILE"
+        elif [ "exe" == "$WEBI_EXT" ]; then
+            # do nothing (but don't leave an empty if block either)
+            echo -n ""
+        elif [ "xz" == "$WEBI_EXT" ]; then
+            echo "Inflating $HOME/Downloads/$WEBI_PKG_FILE"
+            unxz -c "$HOME/Downloads/$WEBI_PKG_FILE" > $(basename "$WEBI_PKG_FILE")
         else
             # do nothing
             echo "Failed to extract $HOME/Downloads/$WEBI_PKG_FILE"
@@ -95,7 +147,8 @@ webi_path_add() {
         export PATH="$HOME/.local/bin:$PATH"
     fi
 
-    pathman add "$1"
+    # in case pathman was recently installed and the PATH not updated
+    "$HOME/.local/bin/pathman" add "$1"
 }
 
 ##
@@ -112,4 +165,32 @@ webi_path_add() {
 ##
 ##
 
+if [ -n $(command -v pkg_install) ]; then
+    pkg_cmd_name="${pkg_cmd_name:-$WEBI_NAME}"
+
+    pkg_common_opt="${pkg_common_opt:-$HOME/.local/opt/$pkg_cmd_name}"
+    pkg_common_bin="${pkg_common_bin:-$pkg_common_opt/bin}"
+    pkg_common_cmd="${pkg_common_cmd:-$pkg_common_bin/$pkg_cmd_name}"
+
+    pkg_new_opt="${pkg_new_opt:-$HOME/.local/opt/$pkg_cmd_name-v$WEBI_VERSION}"
+    pkg_new_bin="${pkg_new_bin:-$pkg_new_opt/bin}"
+    pkg_new_cmd="${pkg_new_cmd:-$pkg_new_bin/$pkg_cmd_name}"
+
+    [ -n $(command -v pkg_pre_install) ] && pkg_pre_install
+
+    echo "Installing '$pkg_cmd_name' v$WEBI_VERSION as $pkg_new_cmd"
+    pkg_install
+
+    [ -n $(command -v pkg_post_install) ] && pkg_post_install
+
+    if [ -n $(command -v pkg_post_install_message) ]; then
+        pkg_post_install_message
+    else
+        echo "Installed '$pkg_cmd_name' v$WEBI_VERSION as $pkg_new_cmd"
+    fi
+    echo ""
+fi
+
+rm -rf "$WEBI_TMP"
+
 }