| #!/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 |