david_williams | 5125637 | 2010-04-20 21:04:25 +0000 | [diff] [blame] | 1 | #!/usr/bin/env bash |
david_williams | e529817 | 2007-12-20 03:30:54 +0000 | [diff] [blame] | 2 | |
| 3 | |
david_williams | 53f9de1 | 2008-01-02 19:31:06 +0000 | [diff] [blame] | 4 | # remember to leave no slashes on filename in source command, |
david_williams | e529817 | 2007-12-20 03:30:54 +0000 | [diff] [blame] | 5 | # (the commonVariations.shsource file, that is) |
| 6 | # so that users path is used to find it (first) |
david_williams | 5dc46da | 2008-01-13 06:39:38 +0000 | [diff] [blame] | 7 | if [ -z $BUILD_INITIALIZED ] |
david_williams | e529817 | 2007-12-20 03:30:54 +0000 | [diff] [blame] | 8 | then |
david_williams | 53f9de1 | 2008-01-02 19:31:06 +0000 | [diff] [blame] | 9 | source commonVariations.shsource |
david_williams | 133dcf3 | 2008-03-06 22:50:05 +0000 | [diff] [blame] | 10 | source ${RELENG_CONTROL}/commonComputedVariables.shsource |
david_williams | e529817 | 2007-12-20 03:30:54 +0000 | [diff] [blame] | 11 | fi |
| 12 | |
david_williams | 7fdc093 | 2011-02-12 06:03:48 +0000 | [diff] [blame] | 13 | # utility functions to remove directories over n days old |
david_williams | 1c00bdc | 2011-02-12 07:21:43 +0000 | [diff] [blame] | 14 | |
david_williams | 3ffc5f6 | 2011-02-14 05:09:19 +0000 | [diff] [blame] | 15 | # We used to use atime (access time) so even if something was created/modified long ago, |
david_williams | 7fdc093 | 2011-02-12 06:03:48 +0000 | [diff] [blame] | 16 | # if we read it often, such as for a "prereq", then we will know it is still in use. |
david_williams | 1c00bdc | 2011-02-12 07:21:43 +0000 | [diff] [blame] | 17 | # Complication: I've learned that "access time" is modified even by things like ls or find, so |
| 18 | # may not be that accurate if "still in use". We may want to change to "modified time" and |
| 19 | # at same time change out |
| 20 | # build scripts to 'touch' prereq and basebuilder files each time they are used. |
| 21 | |
david_williams | 7fdc093 | 2011-02-12 06:03:48 +0000 | [diff] [blame] | 22 | # Remember: for most funtions using times, 'n' time is essentially compared/converted to hours, |
david_williams | 3ffc5f6 | 2011-02-14 05:09:19 +0000 | [diff] [blame] | 23 | # where hours = 24 + (n * 24), so basically ctime +0 means "at least 1 day old") |
david_williams | e529817 | 2007-12-20 03:30:54 +0000 | [diff] [blame] | 24 | |
david_williams | 7fdc093 | 2011-02-12 06:03:48 +0000 | [diff] [blame] | 25 | # = = = = = = = = = = = = = = = = = = = = = |
david_williams | cd76106 | 2011-02-11 22:02:03 +0000 | [diff] [blame] | 26 | |
| 27 | |
| 28 | # requires parent Directiory as first argument |
| 29 | # if nDays not specified as second argument, then 0 is assumed |
| 30 | # (which is one day) |
| 31 | # if "saveAtLeast" is not set, as third argument, then assumed to be 1 |
| 32 | # (that is, at least "saveAtLeast" directories will be saved, no matter how old) |
david_williams | bc9bea8 | 2011-02-12 05:29:48 +0000 | [diff] [blame] | 33 | function removeOldArtifactsDirectories () |
| 34 | { |
david_williams | cd76106 | 2011-02-11 22:02:03 +0000 | [diff] [blame] | 35 | |
| 36 | parentDir=$1; |
| 37 | ndays=$2; |
| 38 | saveAtLeast=$3; |
| 39 | |
| 40 | if [ -z $parentDir ] |
| 41 | then |
| 42 | echo "ERROR: no parent directory specified in function call"; |
| 43 | return -1; |
| 44 | fi |
| 45 | |
| 46 | if [ -z ndays ] |
| 47 | then |
| 48 | echo "INFO: ndays not specified, 1 day assumed"; |
| 49 | ndays=0 |
| 50 | else |
| 51 | echo "INFO: ndays set to $ndays"; |
| 52 | fi |
| 53 | |
| 54 | if [ -z saveAtLeast ] |
| 55 | then |
| 56 | echo "INFO: saveAtLeast not specified, 1 assumed"; |
| 57 | saveAtLeast=0 |
| 58 | else |
| 59 | echo "INFO: saveAtLeast set to $saveAtLeast"; |
| 60 | fi |
david_williams | e529817 | 2007-12-20 03:30:54 +0000 | [diff] [blame] | 61 | |
david_williams | eececc1 | 2007-12-20 04:36:02 +0000 | [diff] [blame] | 62 | echo; |
david_williams | f3eaef2 | 2011-02-14 05:25:49 +0000 | [diff] [blame] | 63 | echo " Removing directories older than " $(( ${ndays} + 1 )) " days"; |
david_williams | cd76106 | 2011-02-11 22:02:03 +0000 | [diff] [blame] | 64 | echo " (from under ${parentDir})"; |
| 65 | before=`find ${parentDir} -mindepth 2 -maxdepth 2 | wc -l`; |
david_williams | eececc1 | 2007-12-20 04:36:02 +0000 | [diff] [blame] | 66 | echo " number of directories before cleaning: ${before}"; |
david_williams | e529817 | 2007-12-20 03:30:54 +0000 | [diff] [blame] | 67 | |
david_williams | 5dc46da | 2008-01-13 06:39:38 +0000 | [diff] [blame] | 68 | # empty directories often result from "bad builds". We remove those no matter how old |
david_williams | d0bdbd2 | 2011-02-12 19:52:11 +0000 | [diff] [blame] | 69 | find ${parentDir} -mindepth 2 -maxdepth 3 -type d -empty -execdir rm -fr '{}' \; |
david_williams | 2a47e17 | 2008-01-07 22:27:12 +0000 | [diff] [blame] | 70 | # now remove old ones |
david_williams | 3ffc5f6 | 2011-02-14 05:09:19 +0000 | [diff] [blame] | 71 | find ${parentDir} -mindepth 2 -maxdepth 2 -type d -ctime +$ndays -execdir ${RELENG_CONTROL}/removeArtifactDirIf.sh '{}' $saveAtLeast \; |
david_williams | e529817 | 2007-12-20 03:30:54 +0000 | [diff] [blame] | 72 | |
david_williams | cd76106 | 2011-02-11 22:02:03 +0000 | [diff] [blame] | 73 | after=`find ${parentDir} -mindepth 2 -maxdepth 2 | wc -l`; |
david_williams | eececc1 | 2007-12-20 04:36:02 +0000 | [diff] [blame] | 74 | echo " number of directories after cleaning: ${after}"; |
david_williams | cd76106 | 2011-02-11 22:02:03 +0000 | [diff] [blame] | 75 | echo; |
| 76 | |
| 77 | } |
| 78 | |
| 79 | # requires parent Directiory as first argument |
| 80 | # if nDays not specified as second argument, then 0 is assumed |
| 81 | # (which is one day) |
david_williams | aae11dc | 2011-02-12 01:58:43 +0000 | [diff] [blame] | 82 | |
david_williams | 6178a20 | 2011-02-11 22:42:37 +0000 | [diff] [blame] | 83 | function removeOldDirectories () { |
david_williams | cd76106 | 2011-02-11 22:02:03 +0000 | [diff] [blame] | 84 | |
| 85 | parentDir=$1; |
| 86 | ndays=$2; |
david_williams | aae11dc | 2011-02-12 01:58:43 +0000 | [diff] [blame] | 87 | |
david_williams | cd76106 | 2011-02-11 22:02:03 +0000 | [diff] [blame] | 88 | |
| 89 | if [ -z $parentDir ] |
| 90 | then |
| 91 | echo "ERROR: no parent directory specified in function call"; |
| 92 | return -1; |
| 93 | fi |
| 94 | |
| 95 | if [ -z ndays ] |
| 96 | then |
| 97 | echo "INFO: ndays not specified, 1 day assumed"; |
| 98 | ndays=0 |
| 99 | else |
| 100 | echo "INFO: ndays set to $ndays"; |
| 101 | fi |
| 102 | |
david_williams | cd76106 | 2011-02-11 22:02:03 +0000 | [diff] [blame] | 103 | |
| 104 | echo; |
david_williams | f3eaef2 | 2011-02-14 05:25:49 +0000 | [diff] [blame] | 105 | echo " Removing directories older than " $(( ${ndays} + 1 )) " days"; |
david_williams | cd76106 | 2011-02-11 22:02:03 +0000 | [diff] [blame] | 106 | echo " (from under ${parentDir})"; |
| 107 | before=`find ${parentDir} -mindepth 1 -maxdepth 1 | wc -l`; |
| 108 | echo " number of directories before cleaning: ${before}"; |
| 109 | |
| 110 | # empty directories often result from "bad builds". We remove those no matter how old |
david_williams | d0bdbd2 | 2011-02-12 19:52:11 +0000 | [diff] [blame] | 111 | find ${parentDir} -mindepth 1 -maxdepth 2 -type d -empty -execdir rm -fr '{}' \; |
david_williams | cd76106 | 2011-02-11 22:02:03 +0000 | [diff] [blame] | 112 | # now remove old ones |
david_williams | 3ffc5f6 | 2011-02-14 05:09:19 +0000 | [diff] [blame] | 113 | find ${parentDir} -mindepth 1 -maxdepth 1 -type d -ctime +$ndays -execdir ${RELENG_CONTROL}/removeIf.sh '{}' \; |
david_williams | cd76106 | 2011-02-11 22:02:03 +0000 | [diff] [blame] | 114 | |
| 115 | after=`find ${parentDir} -mindepth 1 -maxdepth 1 | wc -l`; |
| 116 | echo " number of directories after cleaning: ${after}"; |
| 117 | echo; |
| 118 | |
| 119 | } |
| 120 | |
david_williams | a70b03d | 2011-02-12 02:49:40 +0000 | [diff] [blame] | 121 | |
| 122 | # requires parent Directiory as first argument |
| 123 | # if nDays not specified as second argument, then 0 is assumed |
| 124 | # (which is one day) |
| 125 | # This is a good function to remove old files and directories from tmp |
david_williams | bc9bea8 | 2011-02-12 05:29:48 +0000 | [diff] [blame] | 126 | function removeOldDirectoriesAndFiles () |
| 127 | { |
david_williams | a70b03d | 2011-02-12 02:49:40 +0000 | [diff] [blame] | 128 | |
| 129 | parentDir=$1; |
| 130 | ndays=$2; |
| 131 | |
| 132 | |
| 133 | if [ -z $parentDir ] |
| 134 | then |
| 135 | echo "ERROR: no parent directory specified in function call"; |
| 136 | return -1; |
| 137 | fi |
| 138 | |
| 139 | if [ -z ndays ] |
| 140 | then |
david_williams | 3ffc5f6 | 2011-02-14 05:09:19 +0000 | [diff] [blame] | 141 | echo "INFO: ndays not specified, 14 days assumed"; |
david_williams | a70b03d | 2011-02-12 02:49:40 +0000 | [diff] [blame] | 142 | ndays=13 |
| 143 | else |
| 144 | echo "INFO: ndays set to $ndays"; |
| 145 | fi |
| 146 | |
| 147 | |
| 148 | echo; |
david_williams | f3eaef2 | 2011-02-14 05:25:49 +0000 | [diff] [blame] | 149 | echo " Removing directories and files older than " $(( ${ndays} + 1 )) " days"; |
david_williams | a70b03d | 2011-02-12 02:49:40 +0000 | [diff] [blame] | 150 | echo " (from under ${parentDir})"; |
| 151 | before=`find ${parentDir} | wc -l`; |
| 152 | echo " number of directories and files before cleaning: ${before}"; |
| 153 | |
| 154 | # remove all old directories and files |
david_williams | 3ffc5f6 | 2011-02-14 05:09:19 +0000 | [diff] [blame] | 155 | find ${parentDir} -ctime +$ndays -execdir rm -fr '{}' \; |
david_williams | a70b03d | 2011-02-12 02:49:40 +0000 | [diff] [blame] | 156 | |
| 157 | after=`find ${parentDir} | wc -l`; |
| 158 | echo " number of directories and files after cleaning: ${after}"; |
| 159 | echo; |
| 160 | |
| 161 | } |
| 162 | |
david_williams | 7fdc093 | 2011-02-12 06:03:48 +0000 | [diff] [blame] | 163 | # = = = = = = = = = = = = = = = = = = = = = |
david_williams | bc9bea8 | 2011-02-12 05:29:48 +0000 | [diff] [blame] | 164 | |
david_williams | 7fdc093 | 2011-02-12 06:03:48 +0000 | [diff] [blame] | 165 | # artifacts are special, since they have a three-layer directory structure, |
| 166 | # and we want to be sure to always retain at least one, no matter how old. |
david_williams | ca2f4c5 | 2011-02-12 21:24:18 +0000 | [diff] [blame] | 167 | echo " "; |
david_williams | 508036c | 2011-02-11 22:51:24 +0000 | [diff] [blame] | 168 | echo "INFO: Checking to remove old artifacts." |
david_williams | cd76106 | 2011-02-11 22:02:03 +0000 | [diff] [blame] | 169 | removeOldArtifactsDirectories ${PROJECT_ARTIFACTS} 3 1; |
david_williams | 508036c | 2011-02-11 22:51:24 +0000 | [diff] [blame] | 170 | |
david_williams | ca2f4c5 | 2011-02-12 21:24:18 +0000 | [diff] [blame] | 171 | echo " "; |
david_williams | 508036c | 2011-02-11 22:51:24 +0000 | [diff] [blame] | 172 | echo "INFO: Checking to remove old project working directories." |
david_williams | 3ffc5f6 | 2011-02-14 05:09:19 +0000 | [diff] [blame] | 173 | removeOldDirectories ${PROJECT_PROJECTS} 1; |
david_williams | 508036c | 2011-02-11 22:51:24 +0000 | [diff] [blame] | 174 | |
david_williams | ca2f4c5 | 2011-02-12 21:24:18 +0000 | [diff] [blame] | 175 | echo " "; |
david_williams | 508036c | 2011-02-11 22:51:24 +0000 | [diff] [blame] | 176 | echo "INFO: Checking to remove old testing directories." |
david_williams | 3ffc5f6 | 2011-02-14 05:09:19 +0000 | [diff] [blame] | 177 | removeOldDirectories ${PROJECT_TESTS} 1; |
| 178 | |
| 179 | echo " "; |
| 180 | echo "INFO: Checking to remove old project builder directories." |
david_williams | 88fcd2a | 2011-02-24 04:37:32 +0000 | [diff] [blame] | 181 | removeOldDirectories ${PROJECT_BUILDERS} 3; |
david_williams | e2c1257 | 2011-02-12 20:53:03 +0000 | [diff] [blame] | 182 | |
david_williams | ca2f4c5 | 2011-02-12 21:24:18 +0000 | [diff] [blame] | 183 | echo " "; |
david_williams | a70b03d | 2011-02-12 02:49:40 +0000 | [diff] [blame] | 184 | echo "INFO: Checking to remove old tmp directories and files." |
david_williams | 6d0b297 | 2011-02-12 02:51:14 +0000 | [diff] [blame] | 185 | removeOldDirectoriesAndFiles ${RECOMMENDED_TMP_DIR} 13; |
david_williams | 7fdc093 | 2011-02-12 06:03:48 +0000 | [diff] [blame] | 186 | |
david_williams | 1c00bdc | 2011-02-12 07:21:43 +0000 | [diff] [blame] | 187 | # even once per month is a bit "risky" for prereqs, since some patch builds, for example, may not be ran except |
david_williams | 0847298 | 2011-02-12 06:10:41 +0000 | [diff] [blame] | 188 | # once every blue moon ... hence pre-reqs will need to be re-fetched. And, remember, by that time, the |
david_williams | 1c00bdc | 2011-02-12 07:21:43 +0000 | [diff] [blame] | 189 | # pre-req might have moved to a different URL (possibly archives), so our build scripts might have |
| 190 | # to be changed to point to 'archive' location. |
david_williams | 7fdc093 | 2011-02-12 06:03:48 +0000 | [diff] [blame] | 191 | # TODO: we have some prereqs that can not be retrieved automatically. So, we should have |
| 192 | # an "exclude" list, such as oagis_release_8.0_GA-withSP3.zip, DITA-OT1.2.1_bin-ASL.zip, WSDL_1.1_for%20OAGIS_8.0.zip. |
| 193 | # I don't recall which, but one or more of these have a "license confirmation" screen that prevents |
| 194 | # autodownload so when if/when we want it, we have to get our selves, and copy into prereqs directory. |
| 195 | # And one of those, I think oagis_release? has some write protected files that prevents their deletion, |
| 196 | # once unzipped, so we have tweeked the permissions. |
david_williams | ca2f4c5 | 2011-02-12 21:24:18 +0000 | [diff] [blame] | 197 | echo " "; |
david_williams | 3ffc5f6 | 2011-02-14 05:09:19 +0000 | [diff] [blame] | 198 | echo "INFO: Checking to remove old pre-req directories and files."; |
| 199 | removeOldDirectoriesAndFiles ${LOCAL_PREREQS_CACHE} 30; |
david_williams | 0847298 | 2011-02-12 06:10:41 +0000 | [diff] [blame] | 200 | |
david_williams | ca2f4c5 | 2011-02-12 21:24:18 +0000 | [diff] [blame] | 201 | echo " "; |
david_williams | 3ffc5f6 | 2011-02-14 05:09:19 +0000 | [diff] [blame] | 202 | echo "INFO: Checking to remove old basebuilders."; |
| 203 | removeOldDirectories ${BASE_BUILDERS} 30; |
david_williams | 0847298 | 2011-02-12 06:10:41 +0000 | [diff] [blame] | 204 | |