Home | History | Annotate | Line # | Download | only in scripts
      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