]> Pileus Git - ~andy/sunrise/blob - scripts/review
use /etc/init.d/functions.sh
[~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=$BRACKET
8 BOLD=$'\e[0;01m'
9 DARKGREEN=$'\e[32m'
10 GREEN=$GOOD
11 LIGHTBLUE=$HILITE
12 RED=$BAD
13 YELLOW=$WARN
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 if [[ -z "$*" ]] ; then
94         ebegin "Updating working copy to latest version from repository"
95         update=$(svn_up)
96         if [[ "$opt_verbose" == "1" ]] ; then
97                 echo $update
98         fi
99         update=$(echo $update | tail -n 1)
100         update=${update/At revision }
101         sunrise_revision=${update/.}
102         [ "$sunrise_revision" -lt "10" ] && exit 1
103         eend
104 #elif [[ "$*" =~ "^[0-9]*$" ]]; then 
105 #       echo "!!! Error: The revision must be an integer value $*"
106 #       exit 1
107 else
108         sunrise_revision=$*
109
110         ebegin "Updating working copy to latest version from repository"
111         svn_up -r $sunrise_revision || exit $?
112         eend
113 fi
114
115 if ! [ -e sunrise ] || ! [ -e reviewed ]; then
116         eerror "You need to have sunrise and reviewed subdirs"
117         exit
118 fi
119
120 reviewed_revision=$(svn log reviewed 2>/dev/null | grep "Reviewed up to revision " -m 1 | sed "s:Reviewed up to revision ::")
121
122 if [ $reviewed_revision -gt $sunrise_revision ]; then
123         eerror "a newer revision is already reviewed"
124         exit
125 fi
126 (
127 cd sunrise
128
129 repoman_check || exit $?
130
131 ebegin "Running portdupe"
132 scripts/portdupe
133 eend $?
134
135 cd ..
136 if [[ "$opt_quiet" == "0" ]] ; then
137         which diffstat >/dev/null 2>&1 && diff -Nur reviewed sunrise --exclude=.svn | diffstat
138         diff -Nur reviewed sunrise --exclude=Manifest --exclude=.svn --exclude=metadata.xml --exclude=digest-*
139 fi
140 ) | if [[ "$opt_quiet" == "0" ]] ; then less; else cat; fi
141
142 if [[ "$opt_quiet" == "0" ]] ; then
143         echo
144         echo -n "${BOLD}Commit changes?${NORMAL} [${GREEN}Yes${NORMAL}/${RED}No${NORMAL}] "
145         read choice
146         echo
147
148         case "$choice" in
149                 y*|Y*|"")
150                         ;;
151
152                 *)
153                         echo "Quitting."
154                         echo
155                         exit ;;
156         esac
157 fi
158
159 ebegin "Merging in changes..."
160 if [[ "$opt_verbose" == "1" ]] ; then
161         svn merge sunrise@$reviewed_revision sunrise@$sunrise_revision reviewed
162 else
163         svn merge sunrise@$reviewed_revision sunrise@$sunrise_revision reviewed -q
164 fi
165 eend ${?}
166
167 ebegin "Committing working copy to repository"
168 svn commit reviewed -m "Reviewed up to revision $sunrise_revision"
169 eend $?