]> Pileus Git - ~andy/sunrise/blob - scripts/review
scripts/review: Update review script
[~andy/sunrise] / scripts / review
1 #!/bin/bash
2 # review - Move a certain revision from sunrise/ to reviewed/
3 # Released into the public domain
4
5 source /etc/init.d/functions.sh
6
7 BLUE=$'\033[34;01m'
8 BOLD=$'\e[0;01m'
9 DARKGREEN=$'\e[32m'
10 GREEN=$'\e[32;01m'
11 LIGHTBLUE=$HILITE
12 RED=$'\033[31;01m'
13 YELLOW=$'\033[33;01m'
14 opt_norepoman=0
15 opt_noupdate=0
16 opt_quiet=0
17 opt_verbose=0
18
19 svn_up() {
20         if [[ "$opt_noupdate" == "0" ]] ; then
21                 svn update $*
22
23                 local conflict_files=$(svn status | sed -rn 's/^C.+ ([^ ]+)$/\1/p')
24                 if [[ -n "$conflict_files" ]] ; then
25                         echo "!!! Error: Some local files have changes that conflict with the latest"
26                         echo "!!! revisions in the repository. Please contact the previous committer(s) to"
27                         echo "!!! resolve the conflicts manually before running sunrise-commit again:"
28                         for filename in $conflict_files ; do
29                                 echo "!!!"
30                                 echo "!!!        file: ${filename}"
31                                 echo "!!!   committer: $(svn info ${filename} | sed -rn 's/Last Changed Author\: (.*)$/\1/p')"
32                         done
33                         exit 1
34                 fi
35         fi
36         return 0
37 }
38
39 repoman_check() {
40         if [[ "$opt_norepoman" == "0" ]] ; then
41                 ebegin "Running repoman"
42                 export PORTDIR_OVERLAY="$(pwd)"
43                 repoman
44                 eend $?
45                 return $?
46         fi
47 }
48
49 usage() {
50 cat << EOF
51 ${BOLD}Usage:${NORMAL} ${LIGHTBLUE}$0${NORMAL} [ ${GREEN}options${NORMAL} ] ${BLUE}revision${NORMAL}
52
53 ${GREEN}options${NORMAL}:
54   ${BOLD}--help, -h${NORMAL}       Show help
55   ${BOLD}--norepoman, -p${NORMAL}  Skip repoman check
56   ${BOLD}--noupdate, -d${NORMAL}   Don't update from repository before committing
57   ${BOLD}--quiet, -q${NORMAL}      Don't ask for confirmation
58   ${BOLD}--verbose, -v${NORMAL}    Show detailed information during commit
59 EOF
60         exit ${1:-0}
61 }
62
63 while [[ $# > 0 ]] ; do
64         case "$1" in
65                 --help|-h)
66                         usage ;;
67
68                 --norepoman|-p)
69                         opt_norepoman=1
70                         shift ;;
71
72                 --noupdate|-d)
73                         opt_noupdate=1
74                         shift ;;
75
76                 --quiet|-q)
77                         opt_quiet=1
78                         shift ;;
79
80                 --verbose|-v)
81                         opt_verbose=1
82                         shift ;;
83
84                 -*)
85                         echo "!!! Error: Unknown option ${1}. See: sunrise-commit -h"
86                         exit 1 ;;
87
88                 *)
89                         break ;;
90         esac
91 done
92
93 cd sunrise
94 ls -d *-* > profiles/categories
95 if [[ $(svn diff profiles/categories) ]]; then
96         svn diff profiles/categories | if [[ "$opt_quiet" == "0" ]] ; then less; else cat; fi
97         echo -n "${BOLD}Commit changes?${NORMAL} [${GREEN}Yes${NORMAL}/${RED}No${NORMAL}] "
98         read choice
99         echo
100         case "$choice" in
101                 y*|Y*|"")
102                         svn commit -m "Automatic update to categories" profiles/categories || exit
103                         ;;
104                 *)
105                         echo "Quitting."
106                         echo
107                         exit ;;
108         esac
109 fi
110 sh scripts/use_desc_gen.sh . || exit $?
111 if [[ $(svn diff profiles/use.local.desc) ]]; then
112         svn diff profiles/use.local.desc | if [[ "$opt_quiet" == "0" ]] ; then less; else cat; fi
113         echo -n "${BOLD}Commit changes?${NORMAL} [${GREEN}Yes${NORMAL}/${RED}No${NORMAL}] "
114         read choice
115         echo
116         case "$choice" in
117                 y*|Y*|"")
118                         svn commit -m "Automatic update to use.local.desc" profiles/use.local.desc || exit
119                         ;;
120                 *)
121                         echo "Quitting."
122                         echo
123                         exit ;;
124         esac
125 fi
126 cd ..
127
128 if [[ -z "$*" ]] ; then
129         ebegin "Updating working copy to latest version from repository"
130         update=$(svn_up)
131         if [[ "$opt_verbose" == "1" ]] ; then
132                 echo $update
133         fi
134         update=$(echo $update | tail -n 1)
135         update=${update/Revision }
136         sunrise_revision=${update/.}
137         [ "$sunrise_revision" -lt "10" ] && exit 1
138         eend
139 #elif [[ "$*" =~ "^[0-9]*$" ]]; then 
140 #       echo "!!! Error: The revision must be an integer value $*"
141 #       exit 1
142 else
143         sunrise_revision=$*
144
145         ebegin "Updating working copy to latest version from repository"
146         svn_up -r $sunrise_revision || exit $?
147         eend
148 fi
149
150 if ! [ -e sunrise ] || ! [ -e reviewed ]; then
151         eerror "You need to have sunrise and reviewed subdirs"
152         exit
153 fi
154
155 reviewed_revision=$(svn log reviewed 2>/dev/null | grep "Reviewed up to revision " -m 1 | sed "s:Reviewed up to revision ::")
156
157 if [ $reviewed_revision -gt $sunrise_revision ]; then
158         eerror "a newer revision is already reviewed"
159         exit
160 fi
161 (
162 cd sunrise
163
164 repoman_check || exit $?
165
166 ebegin "Running portdupe"
167 scripts/portdupe
168 eend $?
169
170 cd ..
171 if [[ "$opt_quiet" == "0" ]] ; then
172         which diffstat >/dev/null 2>&1 && diff -Nur reviewed sunrise --exclude=.svn | diffstat
173         diff -Nur reviewed sunrise --exclude=Manifest --exclude=.svn --exclude=metadata.xml --exclude=digest-*
174 fi
175 ) | if [[ "$opt_quiet" == "0" ]] ; then less; else cat; fi
176
177 if [[ "$opt_quiet" == "0" ]] ; then
178         echo
179         echo -n "${BOLD}Commit changes?${NORMAL} [${GREEN}Yes${NORMAL}/${RED}No${NORMAL}] "
180         read choice
181         echo
182
183         case "$choice" in
184                 y*|Y*|"")
185                         ;;
186
187                 *)
188                         echo "Quitting."
189                         echo
190                         exit ;;
191         esac
192 fi
193
194 ebegin "Merging in changes..."
195 if [[ "$opt_verbose" == "1" ]] ; then
196         svn merge sunrise@$reviewed_revision sunrise@$sunrise_revision reviewed
197 else
198         svn merge sunrise@$reviewed_revision sunrise@$sunrise_revision reviewed -q
199 fi
200 eend ${?}
201
202 ebegin "Committing working copy to repository"
203 svn commit reviewed -m "Reviewed up to revision $sunrise_revision"
204 eend $?