1 #!/bin/sh 2 #$Header: /tank/opengrok/rsync2/NetBSD/src/external/gpl2/lvm2/dist/scripts/last_cvs_update.sh,v 1.1.1.1 2008/12/22 00:18:57 haad Exp $ 3 ################################################################################ 4 ## 5 ## Copyright 2001 Sistina Software, Inc. 6 ## 7 ## This is free software released under the GNU General Public License. 8 ## There is no warranty for this software. See the file COPYING for 9 ## details. 10 ## 11 ## See the file CONTRIBUTORS for a list of contributors. 12 ## 13 ## This file is maintained by: 14 ## AJ Lewis <lewis (at] sistina.com> 15 ## 16 ## File name: last_cvs_update.sh 17 ## 18 ## Description: displays the last file updated by CVS commands and the date 19 ## it was updated. May be given a relative or absolute path. 20 ## Based on this information, you should be able to do a 21 ## cvs co -D $date GFS and get the same version of the source 22 ## tree as this tool was run on. 23 ## 24 ## Will also give you the CVS tag the source tree is based off 25 ## off when appropriate 26 ## 27 ## Output format: 28 ## [Tag: $TAG] 29 ## The last file updated by CVS was: 30 ## $path/$file 31 ## on 32 ## $date 33 ## 34 ################################################################################ 35 36 if [[ -z $1 ]]; 37 then path=.; 38 else 39 if [[ $1 == "-h" ]]; 40 then echo "usage: $0 [ -h | path ]" 41 exit 0; 42 else 43 if [[ -d $1 ]] 44 then path=$1; 45 else 46 echo "usage: $0 [ -h | path ]" 47 exit 0; 48 fi 49 fi 50 fi 51 52 # grab the tag from the path passed in 53 if [[ -f $path/CVS/Tag ]]; 54 then echo "Tag: " `cat $path/CVS/Tag | sed -e 's/^[NT]//'` 55 fi 56 57 awk ' 58 BEGIN { 59 FS = "/" 60 } 61 { 62 # find the path for the Entries file 63 path = FILENAME 64 sub(/^\.\//, "", path) 65 66 # remove the CVS part of it 67 sub(/CVS\/Entries/, "", path) 68 69 # add the path the the filename that was modified, and put the date it was 70 # modified in as well 71 print path $2 " " $4 72 73 }' `find $path -name "Entries" -printf "%h/%f "` | awk ' 74 # converts string name of month the a numeral 75 function cvt_month(month) { 76 if(month == "Jan") 77 return 0 78 if(month == "Feb") 79 return 1 80 if(month == "Mar") 81 return 2 82 if(month == "Apr") 83 return 3 84 if(month == "May") 85 return 4 86 if(month == "Jun") 87 return 5 88 if(month == "Jul") 89 return 6 90 if(month == "Aug") 91 return 7 92 if(month == "Sep") 93 return 8 94 if(month == "Oct") 95 return 9 96 if(month == "Nov") 97 return 10 98 if(month == "Dec") 99 return 11 100 return -1 101 } 102 BEGIN { 103 FS = " " 104 latest="" 105 maxyear = 0 106 maxdate = 0 107 maxmonth = "Jan" 108 maxtime = "00:00:00" 109 } 110 { 111 # check year first 112 if (maxyear < $6) { 113 date = $2 " " $3 " " $4 " " $5 " " $6 114 file = $1 115 maxyear = $6 116 maxmonth = $3 117 maxdate = $4 118 maxtime = $5 119 } 120 else { 121 if (maxyear == $6) { 122 # then month if year is the same 123 if (cvt_month(maxmonth) < cvt_month($3)) { 124 date = $2 " " $3 " " $4 " " $5 " " $6 125 file = $1 126 maxmonth = $3 127 maxdate = $4 128 maxtime = $5 129 } 130 else { 131 if (cvt_month(maxmonth) == cvt_month($3)) { 132 #then date if month is the same 133 if (maxdate < $4) { 134 date = $2 " " $3 " " $4 " " $5 " " $6 135 file = $1 136 maxdate = $4 137 maxtime = $5 138 } 139 else { 140 if (maxdate == $4) { 141 # then time if date is the same 142 if (maxtime < $5) { 143 date = $2 " " $3 " " $4 " " $5 " " $6 144 file = $1 145 maxtime = $5 146 } 147 } 148 } 149 } 150 } 151 } 152 } 153 } 154 155 END { 156 # strip leading "./" from filename 157 sub(/^\.\//, "", file) 158 print "The last file updated by CVS was:" 159 print file 160 print "on" 161 print date " GMT" 162 }' 163 164