Changeset 28037
- Timestamp:
- 2013-08-13T21:13:25+12:00 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
other-projects/nightly-tasks/diffcol/trunk/gen-model-colls.sh
r28027 r28037 12 12 13 13 # USAGE 14 # Put this file in the toplevel of the Greenstone 2 binary/ SVN installation14 # Put this file in the toplevel of the Greenstone 2 binary/compiled SVN installation 15 15 # that you want to generate the model collections with. 16 # Call with 0 args to process all model collections 17 # Call with n args, where each is a collection name in the model-collections 18 # list 16 # You can provide a list of collection names or none, in which case all the collections 17 # are processed. 18 19 # Pass in --svnupdate to copy across the contents of archives and index in the 20 # rebuilt collection, overwriting their equivalents in the svn model collection, 21 # but not removing any extraneous HASH folders already present. 22 23 # Pass in --svndelete to remove what's in archives and index from svn and replace 24 # the contents of archives and index with the matching contents from the rebuild 25 # collection. Useful for when the HASH directory naming has changed and everything 26 # in archives and index has to be wiped out and moved back in from the rebuilt col. 27 28 # If neither is passed in, then the collections are rebuilt but the svn model-collect 29 # is not updated and the repository is not updated. 30 31 # This program leaves you to do the final commit on the (svn) model-collect folder! 32 33 # Examples of usage: 34 # ./gen-model-colls.sh 35 # ./gen-model-colls.sh --svndelete 36 # ./gen-model-colls.sh --svnupdate Tudor-Basic Tudor-Enhanced 37 38 # The first just rebuilds all the collections in a new folder called collect and stops there 39 # The second rebuilds all the collections and then removes all contents of the archives and the 40 # index folders from the svn checked-out model-collect and removes them from svn. Then it copies 41 # across all the contents of the rebuilt archives and index into model-collect and svn adds them. 42 # The third example checks out all the model-collections again, but rebuilds only the 3 collections 43 # specified in the new collect folder. Then it copies across the contents of the archives and index 44 # folders of those 3 collections into their model-collect equivalents. 45 46 # You then still have to do the final svn commit on the model-collect folder. 47 48 # Also valid examples: 49 # ./gen-model-colls.sh Tudor-Basic Tudor-Enhanced 50 # ./gen-model-colls.sh --svndelete Tudor-Basic Tudor-Enhanced 51 # ./gen-model-colls.sh --svnupdate 19 52 20 53 # PSEUDOCODE … … 23 56 # Makes a copy 24 57 # In the copy: gets rid of their .svn folders, and builds each collection in turn, moving building to index once done 25 26 27 58 # If --svndelete was passed in: svn removes model-collect/archives/* and model-collect/index/*, copies over index/* 59 # and archives/* from collect into model-collect and svn adds model-collect/archives/* and model-collect/index/* 60 # If --svnupdate was passed in: copies collect/archives/* into model-collect/archives/*, and copies collect/index/* 61 # into model-collect/index/*, overwriting files that already existed but have now been updated upon rebuild. However, 62 # --svnupdate will leave untouched any files and folders unique to model-collect. 63 64 # svn update/delete a single collection 65 function update_single_collection () { 66 collection=$1 67 mode=$2 68 69 #escape the filename (in case of space) 70 collection=`echo $collection | sed 's@ @\\\ @g'` 71 72 #get just the basename 73 collection=`basename $collection` 74 75 if [ ! -e model-collect/$collection ]; then 76 echo "$collection does not exist in model-collect, commit separately" 77 return; 78 fi 79 80 # diff the svn model and rebuilt model collections 81 diff_result=`diff -rq model-collect/$collection collect/$collection | grep -v ".svn"` 82 # echo "Diff result for collection $collection: $diff_result" 83 84 # if no differences in the current collection, then we're done 85 if [ "x$diff_result" == "x" ]; then 86 echo "No differences in collection $collection" 87 return; 88 fi 89 90 # check that none of the lines mention files outside the archives or index folders 91 # http://en.gibney.org/tell_the_bash_to_split_by_newline_charac 92 # http://forums.gentoo.org/viewtopic-p-3130541.html 93 94 # http://wi-fizzle.com/article/276 95 # http://stackoverflow.com/questions/918886/how-do-i-split-a-string-on-a-delimiter-in-bash 96 # http://www.linuxquestions.org/questions/programming-9/split-a-string-on-newlines-bash-313206/ 97 # http://unix.stackexchange.com/questions/39473/command-substitution-splitting-on-newline-but-not-space 98 99 # store backup of Internal Field Separator value, then set IFS to newline for splitting on newline 100 101 IFS_BAK=$IFS 102 # IFS='\n' # splits on all whitespace 103 IFS=' 104 ' 105 # in the lines returned from the diff, test for archives or newline 106 # http://stackoverflow.com/questions/229551/string-contains-in-bash 107 for line in `diff -rq model-collect/$collection collect/$collection | grep -v ".svn"`; do 108 # echo "LINE: $line" 109 if [[ "$line" != *archives* && "$line" != *index* ]]; then 110 # the file that is different is neither in index nor in archives, send this diffline to the report 111 echo $line >> report.txt 112 fi 113 done 114 115 IFS=$IFS_BAK 116 IFS_BAK= 117 118 # Now svn remove what's unique to model-collect and svn add what's been rebuilt in index and archives 119 # see # http://stackoverflow.com/questions/7502261/delete-folder-content-and-remove-from-version-control 120 121 if [ "$mode" == "svndelete" ]; then 122 svn rm model-collect/$collection/archives/* 123 svn rm model-collect/$collection/index/* 124 fi 125 126 # copy across the contents of the rebuilt model-collection's index and archives to the svn model-collect 127 cp -r collect/$collection/archives/* model-collect/$collection/archives/. 128 cp -r collect/$collection/index/* model-collect/$collection/index/. 129 130 if [ "$mode" == "svndelete" ]; then 131 svn add model-collect/$collection/archives/* 132 svn add model-collect/$collection/index/* 133 fi 134 135 # To undo the changes made by svndelete, run the following manually 136 # svn revert --depth infinity <model-collect/$collection/archives/* 137 # svn revert --depth infinity <model-collect/$collection/archives/* 138 # then remove both the local archives and index, and do an svn up to get original checkout back 139 140 # if etc/collect.cfg is different, copy it across too? 141 142 143 } 144 145 # re-build a single collection in "collect" which is a copy of model-collect 28 146 function single_collection () { 29 147 collection=$1 … … 47 165 } 48 166 49 167 # unused 168 # re-build all collections in "collect" which is a copy of model-collect 50 169 function all_collections() { 51 170 … … 53 172 for collection in collect/*; do 54 173 single_collection $collection; 174 #update_single_collection $collection; 55 175 done 56 176 } 57 177 178 # http://stackoverflow.com/questions/16483119/example-of-how-to-use-getopt-in-bash 179 function usage() { 180 # usage() { echo "Usage: $0 [-s <45|90>] [-p <string>]" 1>&2; exit 1; } 181 182 echo "*******************************************" 183 echo "Usage: $0 [--svnupdate|--svndelete] [col1, col2, col3,...]"; 184 echo "If no collections are provided, all collections will be processed."; 185 echo "If neither svnupdate nor svndelete are provided, svnupdate is assumed."; 186 echo "*******************************************" 187 exit 1; 188 } 189 58 190 59 191 # The program starts here 192 193 # process optional command line arguments 194 # http://blog.onetechnical.com/2012/07/16/bash-getopt-versus-getopts/ 195 # Execute getopt 196 ARGS=$(getopt -o ud -l "svnupdate,svndelete" -n "$0" -- "$@"); 197 198 #Bad arguments 199 if [ $? -ne 0 ];then 200 usage 201 exit 1 202 fi 203 204 eval set -- "$ARGS"; 205 206 # mode can be svndelete or svnupdate 207 mode= 208 209 # -n: http://tldp.org/LDP/abs/html/testconstructs.html 210 while true; do 211 case "$1" in 212 -d|--svndelete) 213 shift; 214 if [ "x$mode" == "xsvnupdate" ]; then 215 echo 216 echo "Can't use both svndelete and svnupdate" 217 usage 218 exit 1 219 else 220 mode=svndelete 221 fi 222 ;; 223 -u|--svnupdate) 224 shift; 225 if [ "x$mode" == "xsvndelete" ]; then 226 echo 227 echo "Can't use both svndelete and svnupdate" 228 usage 229 exit 1 230 else 231 mode=svnupdate 232 fi 233 ;; 234 --) 235 shift; 236 break; 237 ;; 238 esac 239 done 240 241 # If no mode provided (svndelete|svnupdate) as cmd line arg, then don't modify 242 # the svn model-collect folder. We leave it at rebuilding its copy in collect 243 244 #http://www.cyberciti.biz/faq/linux-unix-sleep-bash-scripting/ 245 #if [ "x$mode" == "x" ]; then 246 # echo 247 # echo "***Mode svndelete or svnupdate not provided. Defaulting to svnupdate... 3s to change to your mind" 248 # echo 249 # sleep 3s 250 # mode=svnupdate 251 #fi 252 253 # the remaining arguments to the script are assumed to be collections 254 255 # debugging 256 #for collection in "$@"; do 257 # collection=collect/$collection 258 # echo "Collection: $collection" 259 #done 260 261 # finished processing arguments 262 263 264 # report will contain the output of the diff for 265 if [ -f report.txt ]; then 266 rm report.txt 267 fi 60 268 61 269 # Need pdfbox for the PDFBox tutorial … … 93 301 #find . -name ".svn" -type d -exec rm -rf {} \; 94 302 #cd .. 95 find collect -name ".svn" -type d -exec rm -rf {} \; 303 find collect -name ".svn" -type d -exec rm -rf {} \; #2>&1 > /dev/null 96 304 97 305 … … 104 312 105 313 if [ "$1" == "" ]; then 106 all_collections 314 # all_collections 315 #for each collection, import, build, move building to index 316 for collection in collect/*; do 317 single_collection $collection; 318 if [ "x$mode" != "x" ]; then 319 update_single_collection $collection $mode; 320 fi 321 done 107 322 else 108 323 # Command-line args are a list of collections, 109 324 # process each command-line arg, after confirming such a collection exists 110 325 111 for collection in collect/"$@"; do 326 for collection in "$@"; do 327 collection=collect/$collection 112 328 if test -e $collection; then 113 329 single_collection $collection; 330 if [ "x$mode" != "x" ]; then 331 update_single_collection $collection $mode; 332 fi 114 333 else 115 334 echo "Can't find collection $collection. Skipping." … … 117 336 done 118 337 fi 338 339 340 echo 341 echo "*****************************************" 342 # if we were svn updating/deleting collections, then mode was set 343 # if in that case a report was generated with additional differences, point the user to it 344 if [ -f report.txt ] && [ "x$mode" != "x" ]; then 345 echo "Some files outside of archives and index folders were different. See report.txt" 346 echo 347 fi 348 349 echo "The original collect directory has been left renamed as collect_orig" 350 echo 351 if [ "x$mode" == "x" ]; then 352 echo "The model-collect folder has not been altered. Changes have only been made to collect" 353 else 354 echo "You still need to run svn status and svn commit on the model-collect folder" 355 fi 356 echo "*****************************************" 357 echo 358 359
Note:
See TracChangeset
for help on using the changeset viewer.