]> Pileus Git - ~andy/sunrise/blob - scripts/review
sunrise/sunrise/scripts/review: die if creating new local.use.desc fails
[~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 sh scripts/use_desc_gen.sh . || exit $?
95 if [[ $(svn diff profiles/use.local.desc) ]]; then
96         svn diff profiles/use.local.desc | 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 use.local.desc" profiles/use.local.desc || exit
103                         ;;
104                         *)
105                         echo "Quitting."
106                         echo
107                         exit ;;
108         esac
109 fi
110 cd ..
111
112 if [[ -z "$*" ]] ; then
113         ebegin "Updating working copy to latest version from repository"
114         update=$(svn_up)
115         if [[ "$opt_verbose" == "1" ]] ; then
116                 echo $update
117         fi
118         update=$(echo $update | tail -n 1)
119         update=${update/Revision }
120         sunrise_revision=${update/.}
121         [ "$sunrise_revision" -lt "10" ] && exit 1
122         eend
123 #elif [[ "$*" =~ "^[0-9]*$" ]]; then 
124 #       echo "!!! Error: The revision must be an integer value $*"
125 #       exit 1
126 else
127         sunrise_revision=$*
128
129         ebegin "Updating working copy to latest version from repository"
130         svn_up -r $sunrise_revision || exit $?
131         eend
132 fi
133
134 if ! [ -e sunrise ] || ! [ -e reviewed ]; then
135         eerror "You need to have sunrise and reviewed subdirs"
136         exit
137 fi
138
139 reviewed_revision=$(svn log reviewed 2>/dev/null | grep "Reviewed up to revision " -m 1 | sed "s:Reviewed up to revision ::")
140
141 if [ $reviewed_revision -gt $sunrise_revision ]; then
142         eerror "a newer revision is already reviewed"
143         exit
144 fi
145 (
146 cd sunrise
147
148 repoman_check || exit $?
149
150 ebegin "Running portdupe"
151 scripts/portdupe
152 eend $?
153
154 cd ..
155 if [[ "$opt_quiet" == "0" ]] ; then
156         which diffstat >/dev/null 2>&1 && diff -Nur reviewed sunrise --exclude=.svn | diffstat
157         diff -Nur reviewed sunrise --exclude=Manifest --exclude=.svn --exclude=metadata.xml --exclude=digest-*
158 fi
159 ) | if [[ "$opt_quiet" == "0" ]] ; then less; else cat; fi
160
161 if [[ "$opt_quiet" == "0" ]] ; then
162         echo
163         echo -n "${BOLD}Commit changes?${NORMAL} [${GREEN}Yes${NORMAL}/${RED}No${NORMAL}] "
164         read choice
165         echo
166
167         case "$choice" in
168                 y*|Y*|"")
169                         ;;
170
171                 *)
172                         echo "Quitting."
173                         echo
174                         exit ;;
175         esac
176 fi
177
178 ebegin "Merging in changes..."
179 if [[ "$opt_verbose" == "1" ]] ; then
180         svn merge sunrise@$reviewed_revision sunrise@$sunrise_revision reviewed
181 else
182         svn merge sunrise@$reviewed_revision sunrise@$sunrise_revision reviewed -q
183 fi
184 eend ${?}
185
186 ebegin "Committing working copy to repository"
187 svn commit reviewed -m "Reviewed up to revision $sunrise_revision"
188 eend $?