#!/usr/bin/perl -w my ( $tag, $filename, $date ); my ( $tmp, $change_flag ); if ( $#ARGV != 2 ) { print "Usage: ", $0, " cvstag date file\n"; exit 1; } $tag = $ARGV[0]; $date = $ARGV[1]; $filename = $ARGV[2]; print STDERR "$filename\n"; open ( CVSLOG, "cvs log -d\"$date\" $filename |" ) || die $!; ## ## First get the branch revision number ## undef $revision; while ( !defined($revision) ) { if ( eof( \*CVSLOG ) ) { print STDERR "Premature end of cvs log output!\n"; exit (1); } $string = ; chomp( $string ); if ( $string =~ /$tag:/ ) { ( $tmp, $revision ) = split( /:/, $string ); $revision =~ s/\s+//g; $revision =~ s/\.0\./\./g; } } ## ## Setup the beginning of the first record ## $string = ""; while ( $string !~ /^-+/ ) { $string = ; exit(0) if ( eof(\*CVSLOG) ); } ## ## Loop starting at the revision number for the entry ## while ( $string = ) { ($tmp, $entry_rev) = split( /\s+/, $string ); if ( equal_revision( $revision, $entry_rev ) ) { if ( ! defined($change_flag) ) { print "++++++++++++++++++++++++++++++++++++++++++++++++++\n"; print "## $filename\n"; print "++\n"; $change_flag = 1; } while ( $string !~ /^-+/ && !eof(CVSLOG) ) { print "$string"; $string = ; } } else { while ( ($string !~ /^-+/) && !eof(CVSLOG) ) { $string = ; } } } close( CVSLOG ); exit 0; ############################################################## ## sub equal_revision { my ( $branch, $newfile ) = @_; my ( $indx ); my ( @branch_rev, @file_rev ); @branch_rev = split( /\./, $branch ); @file_rev = split( /\./, $newfile ); return 0 if ( $#branch_rev != ($#file_rev - 1) ); $indx = 0; while( $indx <= $#branch_rev ) { if ( $branch_rev[$indx] != $file_rev[$indx] ) { return 0; } $indx++; } return 1; }