#!/usr/local/bin/perl -w

use strict;

use File::Copy;
use File::Compare;


sub mergedir
{
 foreach (@_)
  {
   die "No $_\n" unless (-d $_);
  }
 my ($ptk,$old,$new) = @_;
 my %done;
 opendir(DIR,$new) || die "Cannot open $new:$!";
 my $file;
 while (defined($file = readdir(DIR)))
  {
   if (-T "$new/$file")
    {
     my $nf = "$new/$file";
     next unless -r $nf;
     my $of = "$old/$file";
     my $pf = "$ptk/$file";
     unless (-r $pf)
      {
       copy($nf,$pf);
       my $code = system('p4','add',$pf);
       die "Cannot add $pf\n" if $code;
       print "$pf added\n";
       next;
      }
     $of = "/dev/null" unless (-r $of);
     if (compare($of,$nf))
      {
       # Tcl/Tk version has changed
       if (compare($nf,$pf))
        {
         my $code = system('p4','edit',$pf);
         die "Cannot edit $pf\n" if $code;
         $code = system('merge',$pf,$of,$nf);
         if ($code)
          {
           print "$pf needs fixing\n";
           print FIXUP "$pf\n";
          }
         else
          {
           print "$pf merged okay\n";
          }
        }
       else
        {
         print "cmp $nf $pf - idential to source\n";
        }
      }
     else
      {
       print "cmp $of $nf - unchanged in source\n";
      }
    }
  }
 closedir(DIR);
}
             
# chdir($ARGV[0]) || die "Cannot cd to $ARGV[0]:$!";
open(FIXUP,">Fixup");
mergedir(@ARGV);
close(FIXUP);
