Files
q-tools/rc
2025-11-05 17:53:07 +02:00

101 lines
2.9 KiB
Plaintext
Executable File

# source me to enable tools
if [[ "$OSTYPE" = "darwin"* ]]; then
QTOOLSPATH=$( realpath $( dirname "$BASH_SOURCE" ) )
else
QTOOLSPATH=$( readlink -f $( dirname "$BASH_SOURCE" ) )
fi
PATH=$PATH:"$QTOOLSPATH"/bin
[[ "$1" = "-f" ]] && PATH="$QTOOLSPATH"/bin:$PATH
. "$QTOOLSPATH"/q-tools-functions
path_remove_duplicates
[[ -f "$QTOOLSPATH"/tsv/tsvkit.sh ]] && . "$QTOOLSPATH"/tsv/tsvkit.sh &>/dev/null
function _q-tools-reload {
# reload self
[[ -z "$QTOOLSPATH" ]] && return
source "$QTOOLSPATH"/rc
}
function _q-tools-update {
# update self
[[ -z "$QTOOLSPATH" ]] && return
[[ -w "$QTOOLSPATH" ]] || return
"$QTOOLSPATH"/rc -u
_q-tools-reload
}
function _q-tools-update-binary {
# update self
[[ -z "$QTOOLSPATH" ]] && return
[[ -w "$QTOOLSPATH" ]] || return
pushd ~ >/dev/null
if [[ ! -e "$QTOOLSPATH"/.version ]]; then
touch "$QTOOLSPATH"/.version
fi
local current_version
local remote_version
current_version=$( cat "$QTOOLSPATH"/.version )
remote_version=$( curl -f -s -L https://six9.net/software/q-tools/current.txt )
if [[ -n "$remote_version" ]]; then
if [[ "$remote_version" != "$current_version" ]]; then
set -u
echo "Update $current_version => $remote_version"
mkdir -p "$QTOOLSPATH"
curl -L -f -s https://six9.net/software/q-tools/current.tar.gz > "$QTOOLSPATH"/current.tar.gz || return
find "$QTOOLSPATH" -maxdepth 1 -mindepth 1 -type d -exec rm -r \{\} \;
tar -xz -C "$QTOOLSPATH" -f "$QTOOLSPATH"/current.tar.gz || return
rm "$QTOOLSPATH"/current.tar.gz
set +u
fi
fi
popd > /dev/null
_q-tools-reload
}
function _self_update() {
touch "$QTOOLSPATH"/.lastupdate
pushd "$QTOOLSPATH" > /dev/null
if [[ -d .git ]]; then
git remote get-url origin 2>&1 | grep -q https.*git.six9.net && {
_q-tools-update-binary
}
if [[ "$1" = "-u" ]]; then
git pull
else
timeout 10 git pull > /dev/null 2>&1
fi
else
_q-tools-update-binary
fi
popd > /dev/null
}
[[ "$1" = "-u" ]] && {
_self_update -u
unset -f _self_update
}
# Update self weekly,
# if folder writable, if repository, if an interactive terminal, if not updated the last week
TOOLS_TO_UPDATE=1
[[ -w "$QTOOLSPATH" ]] || TOOLS_TO_UPDATE=0
[[ -w "$QTOOLSPATH"/.git ]] || TOOLS_TO_UPDATE=0
[[ -t 0 ]] || TOOLS_TO_UPDATE=0
[[ -t 1 ]] || TOOLS_TO_UPDATE=0
[[ -t 2 ]] || TOOLS_TO_UPDATE=0
[[ -f "$QTOOLSPATH"/.lastupdate ]] || touch -t 0101010101 "$QTOOLSPATH"/.lastupdate 2> /dev/null
[[ -w "$QTOOLSPATH"/.lastupdate ]] || TOOLS_TO_UPDATE=0
if [ $TOOLS_TO_UPDATE -eq 1 ]; then
TOOLS_LASTUPDATE=$( "$QTOOLSPATH"/files/file-age "$QTOOLSPATH"/.lastupdate d )
[[ "$TOOLS_LASTUPDATE" -gt 7 ]] && _self_update
unset TOOLS_LASTUPDATE
fi
unset TOOLS_TO_UPDATE
unset -f _self_update