summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsource3/script/cvslog.pl102
1 files changed, 102 insertions, 0 deletions
diff --git a/source3/script/cvslog.pl b/source3/script/cvslog.pl
new file mode 100755
index 0000000000..f3d020aa72
--- /dev/null
+++ b/source3/script/cvslog.pl
@@ -0,0 +1,102 @@
+#!/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 = <CVSLOG>;
+ 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 = <CVSLOG>;
+ exit(0) if ( eof(\*CVSLOG) );
+}
+
+##
+## Loop starting at the revision number for the entry
+##
+
+while ( $string = <CVSLOG> ) {
+
+ ($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 = <CVSLOG>;
+ }
+ }
+ else {
+ while ( ($string !~ /^-+/) && !eof(CVSLOG) ) {
+ $string = <CVSLOG>;
+ }
+ }
+}
+
+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;
+}
+
+