summaryrefslogtreecommitdiff
blob: ab3b628e810dedb50f3a9d6f259d8fcbba0cd8f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#!/bin/bash
# Copyright 1999-2009 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

# gamerlay-review - Automates the Gentoo GamerLay Overlay commit process
# Released into the public domain.

source /etc/init.d/functions.sh

BLUE=$BRACKET
BOLD=$'\e[0;01m'
DARKGREEN=$'\e[32m'
GREEN=$GOOD
LIGHTBLUE=$HILITE
RED=$BAD
YELLOW=$WARN

tmpdir="/tmp/$(basename ${0}).$$"
patchset=${tmpdir}/$(basename ${0})-patchset.patch
summary_changes=${tmpdir}/$(basename ${0})-summary-changes.log
opt_norepoman=0
opt_quiet=0
opt_verbose=0

fatal() {
    eerror "!!! Error: $*"
}

#TODO: Interesting thing to handle a backtrace in case of problems ? (ala ebuild.sh)
#backtrace() {
#    if [ $opt_verbose == 1 ]; then
#	eerror "Call stack:"
#	set ${FUNCNAME[*]}; shift
#	while [ $# > 1 ]; do
#	    eerror "  $(basename ${0}): Called ${1}"
#	    shift
#	done
#    fi
#    exit $1
#}

eend_or_die() {
    eend $1 || exit $?
}

usage() {
cat <<EOF
${BOLD}Usage:${NORMAL} ${LIGHTBLUE}gamerlay-review${NORMAL} [ ${GREEN}options${NORMAL} ] ${BLUE}message${NORMAL}

${GREEN}options${NORMAL}:      
  ${BOLD}--help, -h${NORMAL}       Show help
  ${BOLD}--norepoman, -p${NORMAL}  Skip repoman check
  ${BOLD}--quiet, -q${NORMAL}      Don't ask for confirmation
  ${BOLD}--verbose, -v${NORMAL}    Show detailed information during commit

${BLUE}message${NORMAL}:
  Commit message describing changes.
EOF
  exit ${1:-0}
}

git_command() {

    local errlog=${tmpdir}/error.log
    local git_command_stdout=""
    local retval=""

    if [ $opt_verbose == 1 ]; then
	einfo "${FUNCNAME[0]}: $*"
    fi
    
    if [ "$1" = "-o" ]; then
	shift; git_command_stdout=$1; shift
	git $* 2>${errlog} >$git_command_stdout || retval=$?
    else
	git $* 2>${errlog} >/dev/null || retval=$?
    fi

    if [ -n "$retval" ]; then
	fatal "${FUNCNAME[0]}: $* failed"
	return $retval
    fi
}

git_checkout() {
    git_command checkout ${1}
}

while [ $# > 0 ]; do
    case "${1}" in 
	--help|-h)
	    usage ;;
	--norepoman|-p)
	    opt_norepoman=1
	    shift ;;
	--quiet|-q)
	    opt_quiet=1
	    shift ;;
	--verbose|-v)
	    opt_verbose=1
	    shift ;;
	-*)
	    usage 1 ;;
	*)
	    break ;;
    esac
done

if [ -z "$*" ]; then
    fatal "You must give a commit message, see gamerlay-review -h for more details"
    exit 1
fi

if [ $opt_norepoman = 0 ]; then
    ebegin "Running repoman"
    repoman full || fatal "Please fix repoman QA errors before continue"
    eend_or_die $?
fi

mkdir -p ${tmpdir}
ebegin "Computing differences between the two working branches"
git_command -o ${summary_changes} diff --name-status master && \
sed -e '/^A\tDocumentation\/[a-zA-Z0-9\._][a-zA-Z0-9\._]*$/d'  \
    -e '/^A\tscripts\/[a-zA-Z0-9\._][a-zA-Z0-9\._]*/d' -i ${summary_changes} && \
git_command -o ${patchset} diff --patch-with-stat --full-index master
eend_or_die $?

ebegin "Synchronizing devel and stable branches"
git_checkout master && git_command apply --whitespace=nowarn ${patchset}
eend_or_die $?

rm -rf Documentation/ scripts/
ebegin "Adding local changes to the working stable branch"
git_command add "*" && git_command commit -a -m "$*"
eend_or_die $?

echo
echo "${DARKGREEN}The following local changes will be pushed to the stable branch on the repository:${NORMAL}"
echo

cat ${summary_changes}

if [ $opt_quiet = 0 ]; then
    echo
    echo -n "${BOLD}Commit changes?${NORMAL} [${GREEN}Yes${NORMAL}/${RED}No${NORMAL}] "
    read choice
    echo
    
    case "$choice" in
	y*|Y*|"")
	    ;;
	*)
	    echo "Quitting."
	    echo
	    exit 1 ;;
    esac
fi

ebegin "Adding a tag to the working devel branch"
git_checkout devel && \
git_command tag -a Reviewed_up_$(data +%Y_%m_%d) -m "Reviewed up $(data +%Y/%m/%d)" && \
git_command push
eend_or_die $?
ebegin "Pushing working copy of the stable branch to the repository"
git_checkout master && git_command push
eend_or_die $?
rm -rf ${tmpdir}