blob: cfc18e6a3716e40f1a46cd39751910d46a098621 [file] [log] [blame]
#!/bin/bash
#
# git-paranoia: for those parnaoid about what goes into releases based on git.
#
# Copyright 2012 Luis R. Rodriguez <mcgrof@do-not-panic.com>
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 2 of the License, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Software Foundation, Inc., 59
# Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Pretty colors
GREEN="\033[01;32m"
YELLOW="\033[01;33m"
NORMAL="\033[00m"
BLUE="\033[34m"
RED="\033[31m"
PURPLE="\033[35m"
CYAN="\033[36m"
UNDERLINE="\033[02m"
INTERACTIVE="0"
RUN_CLEAN="0"
function usage()
{
echo -e "Usage: ${GREEN}$1${NORMAL} ${BLUE}[ -i ]${NORMAL}"
echo -e "-i\tInteractive, allows user to override paranoia"
echo -e "-c\tRuns git clean -x -d for you. Not for the faint of heart"
echo
echo -e "Example usage:"
echo
echo -e "export GIT_DIRS=\"${HOME}/linux-stable/ ${HOME}/linux-next\""
echo -e "$1"
echo
exit
}
function __git_paranoia()
{
for i in $GIT_DIRS; do
if [[ ! -d $i ]]; then
echo -e "${BLUE}$i${NORMAL} does not exist"
return 1
fi
cd $i;
if [[ "$RUN_CLEAN" = "1" ]]; then
git clean -x -d -f
fi
printf "Verifying ${BLUE}%15s\t${CYAN}%40s\t" $(basename $i) $(git describe)
git tag -v $(git describe --dirty) > /dev/null 2>&1
if [[ $? -ne 0 || $(git status -s | wc -l) -ne 0 ]]; then
echo -e "[${RED}FAILED${NORMAL}]"
# We're paranoid, not only do we want the git tag to be GPG signed
# but we also want *no* unepxected content on the releases! If you have
# any files that do not belong into the git tree, nuke them, we won't do it
# for you!
if [[ $(git status -s | wc -l) -ne 0 || $(git clean -x -d -n | wc -l) -ne 0 ]]; then
echo -e "Detected some content which likely should not be released."
echo -e "In order to fix either run 'git clean -x -d -f' yourself or"
echo -e "run '$0 -c'"
echo -e ""
echo -e "Not commited content: (run: git clean -x -d -f to fix)"
git status -s
git clean -x -d -n | sed 's|^Would|Should|g'
fi
return 1
else
echo -e "[${GREEN}OK!${NORMAL}]"
fi
done
}
if [[ -z $GIT_DIRS ]]; then
GIT_DIRS="${PWD}"
STAT="$(git status > /dev/null 2>&1 && echo $?)"
if [[ $STAT -ne 0 ]]; then
echo -e "${RED}Error${NORMAL}:"
echo -e "${PWD} not a git tree. Jump into one or set the "
echo -e "${CYAN}GIT_DIRS${NORMAL} environment variable with your list of git trees"
echo
usage $0
exit 1
fi
fi
while [ $# -ne 0 ]; do
if [[ "$1" = "-i" ]]; then
INTERACTIVE="1"
shift; continue;
fi
if [[ "$1" = "-c" ]]; then
RUN_CLEAN="1"
shift; continue;
fi
echo -e "Unexpected argument passed: ${RED}${1}${NORMAL}"
usage $0
exit
done
__git_paranoia
if [[ $? -ne 0 ]]; then
echo
echo -e "Detected some tree content is not yet ${RED}GPG signed${NORMAL}..."
if [[ "$INTERACTIVE" = "0" ]]; then
exit 1
fi
read -p "Do you still want to continue (y/N)? "
if [[ "${REPLY}" != "y" ]]; then
echo -e "Bailing out !"
exit 1
fi
fi
exit 0