Files
q-tools/rc
2025-11-06 15:22:29 +02:00

110 lines
3.2 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
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"
curl -L -f -s https://six9.net/software/q-tools/current.tar.gz > "$QTOOLSPATH"/current.tar.gz || return
tar -xz -C "$QTOOLSPATH" -f "$QTOOLSPATH"/current.tar.gz || return
rm -rf \
"$QTOOLSPATH"/.git \
"$QTOOLSPATH"/current.tar.gz
local obsoleted_file
if [[ -e .removed_files.txt ]]; then
while read obsoleted_file; do
if [[ -e "$obsoleted_file" ]]; then
echo removing "$obsoleted_file"
else
echo no such file: "$obsoleted_file"
fi
done < .removed_files.txt
fi
set +u
fi
fi
_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