103 lines
3.3 KiB
Bash
103 lines
3.3 KiB
Bash
#
|
|
# This is a bash shell fragment, intended to be sourced by scripts that
|
|
# want to work with git in the emc2 repo.
|
|
#
|
|
# Sets GIT_BRANCH to the passed in branch name; if none is passed in it
|
|
# attempts to detect the current branch (this will fail if the repo is in a
|
|
# detached HEAD state).
|
|
#
|
|
# Sets DEB_COMPONENT based on the branch. Official release branches get
|
|
# their own component, all other branches go in "scratch".
|
|
#
|
|
# Sets GIT_TAG to the most recent signed tag (this will fall back to the
|
|
# most recent tag of any kind if no signed tag is found).
|
|
#
|
|
# shellcheck shell=bash
|
|
|
|
|
|
function githelper() {
|
|
if [ -z "$1" ]; then
|
|
GIT_BRANCH=$(git symbolic-ref -q --short HEAD 2>/dev/null)
|
|
if [ -z "$GIT_BRANCH" ]; then
|
|
GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
|
fi
|
|
else
|
|
GIT_BRANCH="$1"
|
|
fi
|
|
|
|
case $GIT_BRANCH in
|
|
master)
|
|
MM=$(git show HEAD:VERSION | sed -E 's/^([0-9]+)\.([0-9]+).*/\1.\2/')
|
|
GIT_TAG_GLOB="v${MM}.*"
|
|
DEB_COMPONENT="master"
|
|
;;
|
|
# release branches have names matching "number.number", which is awkward to express as a glob
|
|
[0-9].[0-9] | [0-9].[0-9][0-9] | [0-9].[0-9][0-9][0-9] | [0-9][0-9].[0-9] | [0-9][0-9].[0-9][0-9] | [0-9][0-9].[0-9][0-9][0-9])
|
|
GIT_TAG_GLOB="v${GIT_BRANCH}.*"
|
|
DEB_COMPONENT=$GIT_BRANCH
|
|
;;
|
|
v2.5_branch)
|
|
GIT_TAG_GLOB="v2.5*"
|
|
DEB_COMPONENT="v2.5_branch"
|
|
;;
|
|
v2.4_branch)
|
|
GIT_TAG_GLOB="v2.4*"
|
|
DEB_COMPONENT="v2.4_branch"
|
|
;;
|
|
*)
|
|
GIT_TAG_GLOB="*"
|
|
# Disable unused variable warnings on DEB_COMPONENT
|
|
# shellcheck disable=SC2034
|
|
DEB_COMPONENT="scratch"
|
|
;;
|
|
esac
|
|
|
|
|
|
# use the gnupg keyring from our git repo to verify signatures on the release tags
|
|
GNUPGHOME=$(git rev-parse --show-toplevel)/gnupg
|
|
export GNUPGHOME
|
|
|
|
NEWEST_SIGNED_TAG_UTIME=-1
|
|
NEWEST_UNSIGNED_TAG_UTIME=-1
|
|
for TAG in $(git tag -l "$GIT_TAG_GLOB"); do
|
|
if ! git cat-file tag "$TAG" > /dev/null 2> /dev/null; then
|
|
continue
|
|
fi
|
|
|
|
TAG_UTIME=$(git cat-file tag "$TAG" | grep tagger | awk '{print $(NF-1)-$NF*36}')
|
|
|
|
if git tag -v "$TAG" > /dev/null 2> /dev/null; then
|
|
# it's a valid signed tag
|
|
if [ "$TAG_UTIME" -gt "$NEWEST_SIGNED_TAG_UTIME" ]; then
|
|
NEWEST_SIGNED_TAG=$TAG
|
|
NEWEST_SIGNED_TAG_UTIME=$TAG_UTIME
|
|
fi
|
|
else
|
|
# unsigned tag
|
|
if [ "$TAG_UTIME" -gt "$NEWEST_UNSIGNED_TAG_UTIME" ]; then
|
|
NEWEST_UNSIGNED_TAG=$TAG
|
|
NEWEST_UNSIGNED_TAG_UTIME=$TAG_UTIME
|
|
fi
|
|
fi
|
|
|
|
done
|
|
|
|
if [ "$NEWEST_SIGNED_TAG_UTIME" -gt -1 ]; then
|
|
# Disable unused variable warnings on GIT_TAG
|
|
# shellcheck disable=SC2034
|
|
GIT_TAG="$NEWEST_SIGNED_TAG"
|
|
return
|
|
fi
|
|
|
|
if [ "$NEWEST_UNSIGNED_TAG_UTIME" -gt -1 ]; then
|
|
echo "no signed tags found, falling back to unsigned tags" > /dev/null 1>&2
|
|
# Disable unused variable warnings on GIT_TAG
|
|
# shellcheck disable=SC2034
|
|
GIT_TAG="$NEWEST_UNSIGNED_TAG"
|
|
return
|
|
fi
|
|
|
|
echo "no annotated tags found, not even unsigned" > /dev/null 1>&2
|
|
}
|
|
|