blob: cc3aac32172a75ae77649f2440baebacfdaa78ae [file] [log] [blame]
#!/bin/bash
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
# Git patch functions.
#
#
# Define functions.
#
#
# Formats patch. Create patch in one commit from user who run script and with default comment.
#
# Params:
# - Git home.
# - Default branch.
# - Patch with patch.
# - Suffix for created patch-file.
#
formatPatch () {
GIT_HOME=$1
DEFAULT_BRANCH=$2
PATCHED_BRANCH=$3
PATCH_SUFFIX=$4
if [ "${IGNITE_CURRENT_BRANCH}" = "${IGNITE_DEFAULT_BRANCH}" ]
then
echo "$0, ERROR:"
echo "You are on Default branch. Please, checkout branch with changes."
exit 1
fi
cd "${GIT_HOME}" || { echo "failed to change directory to ${GIT_HOME}"; exit 1; }
git checkout "${DEFAULT_BRANCH}"
DEF_BRANCH_REV="$(git rev-parse --short HEAD)"
git checkout -b tmppatch
# Merge to make only one commit.
git merge --squash ${PATCHED_BRANCH}
git commit -a -m "# ${PATCHED_BRANCH}"
PATCH_FILE=${PATCHES_HOME}'/'${DEFAULT_BRANCH}_${DEF_BRANCH_REV}_${PATCHED_BRANCH}${PATCH_SUFFIX}
git format-patch ${DEFAULT_BRANCH} --stdout > ${PATCH_FILE}
echo "Patch file created."
git checkout ${PATCHED_BRANCH}
git branch -D tmppatch # Delete tmp branch.
echo
echo "Patch created: ${PATCH_FILE}"
}
#
# Determines Current branch.
#
# Params:
# - Git home.
# Return - Current branch.
#
determineCurrentBranch () {
GIT_HOME=$1
cd ${GIT_HOME} || { echo "failed to change directory to $1"; exit 1; }
CURRENT_BRANCH=`git rev-parse --abbrev-ref HEAD`
echo "$CURRENT_BRANCH"
}
#
# Checks that given git repository has clean work tree (there is no uncommited changes).
# Exit with code 1 in error case.
#
# Params:
# - Git home.
#
requireCleanWorkTree () {
cd "$1" || { echo "failed to change directory to $1"; exit 1; } # At git home.
# Update the index
git update-index -q --ignore-submodules --refresh
err=0
# Disallow unstaged changes in the working tree
if ! git diff-files --quiet --ignore-submodules --
then
echo "$0, ERROR:"
echo >&2 "You have unstaged changes."
git diff-files --name-status -r --ignore-submodules -- >&2
err=1
fi
# Disallow uncommitted changes in the index
if ! git diff-index --cached --quiet HEAD --ignore-submodules --
then
echo "$0, ERROR:"
echo >&2 "Your index contains uncommitted changes."
git diff-index --cached --name-status -r --ignore-submodules HEAD -- >&2
err=1
fi
if [ $err = 1 ]
then
echo >&2 "Please commit or stash them."
exit 1
fi
}