69 lines
2.1 KiB
Bash
Executable File
69 lines
2.1 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Purpose : Show which version of MiniServer this machine is running
|
|
#
|
|
# MiniServer is a rolling release, so its version is the date of the commit
|
|
# the local checkout is on, plus the short hash to tell same-day commits apart,
|
|
# e.g. 2026.10.22 (c5f0651). The kernel is shown separately because it comes
|
|
# from Arch, not MiniServer.
|
|
#
|
|
# version --check prints the newer version and exits 0 if one is available,
|
|
# exits 1 if this machine is up to date, or 2 if it couldn't check.
|
|
|
|
MINISERVER="$HOME/.local/share/MiniServer"
|
|
|
|
source "$MINISERVER/utils.sh"
|
|
|
|
if ! git -C "$MINISERVER" rev-parse --git-dir &> /dev/null; then
|
|
echo "MiniServer isn't installed in $MINISERVER."
|
|
exit 2
|
|
fi
|
|
|
|
# Version string for a commit, e.g. 2026.10.22 (c5f0651)
|
|
describe() {
|
|
git -C "$MINISERVER" log -1 --format='%cd (%h)' --date=format:%Y.%m.%d "$1"
|
|
}
|
|
|
|
# Print the newer version if the remote has commits this checkout doesn't.
|
|
# Returns 1 if up to date, 2 if the remote couldn't be reached.
|
|
newer_version() {
|
|
GIT_TERMINAL_PROMPT=0 timeout 30 git -C "$MINISERVER" fetch --quiet &> /dev/null || return 2
|
|
local behind
|
|
behind="$(git -C "$MINISERVER" rev-list --count 'HEAD..@{upstream}' 2> /dev/null)" || return 2
|
|
(( behind > 0 )) || return 1
|
|
describe '@{upstream}'
|
|
}
|
|
|
|
if [ "$1" = "--check" ]; then
|
|
newer_version
|
|
exit
|
|
fi
|
|
|
|
version="$(describe HEAD)"
|
|
|
|
# Local edits to the checkout mean this isn't exactly the version above
|
|
if [ -n "$(git -C "$MINISERVER" status --porcelain --untracked-files=no)" ]; then
|
|
version="$version, modified"
|
|
fi
|
|
|
|
if latest="$(newer_version)"; then
|
|
version="$version, $latest is available (run update)"
|
|
fi
|
|
|
|
kernel="$(uname -r)"
|
|
# If the running kernel's modules are gone, a newer kernel was installed
|
|
if [ ! -d "/usr/lib/modules/$kernel" ]; then
|
|
kernel="$kernel (newer kernel installed, reboot to use it)"
|
|
fi
|
|
|
|
# 10-pacman.sh rewrites this log on every update
|
|
if [ -f "$PACMAN_UPDATE_LOG" ]; then
|
|
last_update="$(date -r "$PACMAN_UPDATE_LOG" '+%Y-%m-%d %H:%M')"
|
|
else
|
|
last_update="never"
|
|
fi
|
|
|
|
echo "MiniServer $version"
|
|
echo "Kernel $kernel"
|
|
echo "Last update $last_update"
|