#!/usr/bin/perl

# Makes and fills a ChangeLog/ directory with ChangeLogs split up into
# chunks corresponding to releases

# There will be a ChangeLog-RX.Y.Z for the changes made in just that
# release as well as a ChangeLog for all changes made after the last
# release.  This is determined by the (latest) date of committing of
# the minossoft/setup/packages-RX.Y.Z files.


# Set to 1 to force ChangeLog-RX.Y.Zs to be regenerated.  ChangeLog is
# always regenerated
$clobber = 0;

# Set any flags (other than -l and -f) to pass to cvs2cl
$cvs2cl_flags = "--no-wrap --gmt -S -U CVSROOT/users";

# Where the full cvs repository is checked out.  This *MUST* either be
# a full cvs (non-SRT) checkout or an SRT base release with this hack
# applied: http://minos.phy.bnl.gov/software/srt/WebDocs/srt-hacks.html

$cvs_dir = "$ENV{HOME}/cvs/minosroot";

# where the setup/ directory is to be found
$srt_dir = $cvs_dir;

###########################################
#### nothing for you below, move along ####

sub set_env {
  $ENV{SSH_AUTH_SOCK} = "";
  $ENV{SSH_RSH} = undef;
  $ENV{CVSROOT} =":pserver:anonymous@minoscvs.fnal.gov:/cvs/minoscvs/rep1";
  $ENV{CVS_SERVER}="env LOGNAME=bv cvs";
}

sub cvs_update {
  chdir "$cvs_dir" or die "Can't cd to $cvs_dir";
  print `cvs update -d`;
}

sub get_release_info {
  my %release_info;

  chdir "$srt_dir/setup" or die "Can't cd to $srt_dir/setup\n";

  `cvs update -d`;

  @releases = `ls packages-R*`;
  foreach $release (@releases) {
    chomp $release;
    ($junk, $ver, @rest) = split ('-',$release);
    $date = `cvs log $release | grep '^date:' | tail -1`;
#    $date = "date: 2001/06/29 19:53:52;  author: lartey;  state: Exp;\n";
#    print "release=`$release' = $ver, date = $date\n";
    $date =~ m|.*(....)/(..)/(..) (..):(..):(..).*|;

    $year = "$1-$2-$3";
    $time = "$4:$5:$6";
    $release_info{$year}{"time"} = $time;
    $release_info{$year}{"version"} = $ver;
  }

  return \%release_info;
}

set_env;
cvs_update;

mkdir "$cvs_dir/ChangeLog" unless -d "$cvs_dir/ChangeLog";

$ri_ref = get_release_info;

chdir $cvs_dir;

$lastdatestring = "";
foreach $date (sort keys %$ri_ref) {
  $time = $ri_ref->{$date}{"time"};
  $ver = $ri_ref->{$date}{"version"};

#  $datestring = "$date $time+00";
  $datestring = "$date $time";

  $filename = "ChangeLog/ChangeLog-$ver";

  if (! -e $filename or $clobber) {
    $this_datestring = "$last_datestring<=$datestring";
    print "Changes range: `$this_datestring' going to: `$filename'\n";
    print "cvs2cl $cvs2cl_flags -l -d'$this_datestring' -f $filename\n";
    `cvs2cl $cvs2cl_flags -l -d'$this_datestring' -f $filename`;
  }
  else {
    print "Changes range: `$last_datestring<=$datestring' not clobbering: `$filename'\n";
  }

  $last_datestring=$datestring;
}

$datestring = ">$last_datestring";
$filename = "ChangeLog/ChangeLog";
print "Changes range: `$datestring' going to: `$filename'\n";
print "cvs2cl $cvs2cl_flags -l -d'$datestring' -f $filename\n";
`cvs2cl $cvs2cl_flags -l -d'$datestring' -f $filename`;
