1#!/bin/sh
2#$Header: /archive/NetBSD-CVS/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@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
36if [[ -z $1 ]];
37 then path=.;
38else
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
50fi
51
52# grab the tag from the path passed in
53if [[ -f $path/CVS/Tag ]];
54  then echo "Tag: " `cat $path/CVS/Tag | sed -e 's/^[NT]//'`
55fi
56
57awk '
58BEGIN {
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
75function 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}
102BEGIN {
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
155END {
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