Nove to new layout
This commit is contained in:
150
bin/kernel-autobump
Executable file
150
bin/kernel-autobump
Executable file
@@ -0,0 +1,150 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Variables
|
||||
REPO_PATH=${1}
|
||||
PULL_REMOTE=${2}
|
||||
PUSH_REMOTE=${3}
|
||||
BRANCH=${4}
|
||||
PREFIX=${5}
|
||||
REGEX=${6}
|
||||
|
||||
show_help() {
|
||||
echo "${0} <repo path> <pull remote> <push remote> <branch> <push tag prefix> v<track regex>" >&2
|
||||
echo "Example: ${0} ~/repos/kernel stable origin 3.12 sabayon- 3\.12\.[0-9999]" >&2
|
||||
}
|
||||
|
||||
if [ ! -d "${REPO_PATH}" ]; then
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "${PULL_REMOTE}" ]; then
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "${PUSH_REMOTE}" ]; then
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "${BRANCH}" ]; then
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "${PREFIX}" ]; then
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "${REGEX}" ]; then
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rollback() {
|
||||
cd "${REPO_PATH}" || return 1
|
||||
git rebase --abort || true
|
||||
git reset --hard "${PUSH_REMOTE}/${BRANCH}" || return 1
|
||||
}
|
||||
|
||||
start() {
|
||||
cd "${REPO_PATH}" || return 1
|
||||
|
||||
echo "Fetching ${PULL_REMOTE}"
|
||||
git fetch --quiet "${PULL_REMOTE}" || {
|
||||
rollback
|
||||
return 1;
|
||||
}
|
||||
|
||||
echo "Fetching ${PUSH_REMOTE}"
|
||||
git fetch --quiet "${PUSH_REMOTE}" || {
|
||||
rollback
|
||||
return 1;
|
||||
}
|
||||
|
||||
local tags=$(git tag | grep -e "v${REGEX}")
|
||||
echo "Tracking tags:"
|
||||
echo -e "${tags}"
|
||||
if [ -z "${tags}" ]; then
|
||||
echo "No tags to track for: ${REGEX} in ${REPO_PATH}"
|
||||
return 0
|
||||
fi
|
||||
|
||||
local bumps=()
|
||||
local tag= tracked_tag=
|
||||
for tag in ${tags}; do
|
||||
tracked_tag="${PREFIX}${tag/v}"
|
||||
echo "Checking tag: ${tag}, ${tracked_tag}"
|
||||
if ! git tag | grep -q -e "^${tracked_tag}$"; then
|
||||
echo "Not tracked: ${tag}, ${tracked_tag}"
|
||||
bumps+=( "${tag}" )
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -z "${bumps[*]}" ]; then
|
||||
echo "Nothing to do."
|
||||
return 0
|
||||
fi
|
||||
|
||||
if ! git show-branch "${BRANCH}" > /dev/null; then
|
||||
echo "Creating branch: ${BRANCH}"
|
||||
git checkout -q "${PUSH_REMOTE}/${BRANCH}" -b "${BRANCH}" || {
|
||||
rollback
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
echo "Checking out branch: ${BRANCH}"
|
||||
git checkout -q "${BRANCH}" || {
|
||||
rollback
|
||||
return 1;
|
||||
}
|
||||
fi
|
||||
|
||||
echo "Updating branch"
|
||||
git rebase --quiet "${PUSH_REMOTE}/${BRANCH}" || {
|
||||
rollback
|
||||
return 1;
|
||||
}
|
||||
|
||||
for tag in "${bumps[@]}"; do
|
||||
echo "Working on tag: ${tag}"
|
||||
git merge --quiet "${tag}" -m "Automatic merge of tag ${PULL_REMOTE}/${tag}" || {
|
||||
rollback
|
||||
return 1;
|
||||
}
|
||||
bash sabayon/bump-configs.sh || {
|
||||
rollback
|
||||
return 1;
|
||||
}
|
||||
|
||||
local changed=$(git ls-files -m -d -o --exclude-standard sabayon/config)
|
||||
if [ -n "${changed}" ]; then
|
||||
git commit --quiet sabayon/config -m "sabayon: bump configs" || {
|
||||
rollback
|
||||
return 1;
|
||||
}
|
||||
fi
|
||||
|
||||
git push --quiet || {
|
||||
rollback
|
||||
return 1;
|
||||
}
|
||||
git push --quiet --tags || {
|
||||
rollback
|
||||
return 1;
|
||||
}
|
||||
|
||||
tracked_tag="${PREFIX}${tag/v}"
|
||||
bash sabayon/tag-version.sh "${tracked_tag}" || {
|
||||
rollback
|
||||
return 1;
|
||||
}
|
||||
|
||||
echo "Released ${tracked_tag}"
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
start
|
||||
Reference in New Issue
Block a user