MANIFEST #22

  • //
  • guest/
  • matthew_rice/
  • util/
  • cvs2p4/
  • MANIFEST
  • View
  • Commits
  • Open Download .zip Download (8 KB)
eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
  & eval 'exec perl -S $0 $argv:q'
  if 0;
#  THE PRECEEDING STUFF EXECS perl via $PATH
# -*-Fundamental-*-
# (I'm a Emacsian Fundamentalist)
 
#   $Id: //guest/matthew_rice/util/cvs2p4/MANIFEST#22 $

#
#   Copyright (c) 1996 Network Appliance, Inc.
#
#   You may distribute under the terms of the Artistic License, as
#   specified in the README file included in the cvs2p4
#   distribution.
#
#   Original Author: Richard Geiger for Network Appliance, Inc.
#
#   $Id: //guest/matthew_rice/util/cvs2p4/MANIFEST#22 $

#  Here is the manifest.
#  You can update the checksums with "-gen"
#

require 5.000;
use Carp;
$| = 1;

($Myname = $0) =~ s%^.*/%%;
$Mydirname = &dirname($0);
 
chdir $Mydirname || die;

#path sum1 sum2 opts
$manifest = <<'MANIFEST';
MANIFEST:-:-
Artistic:08887:6:mode=444
README:14831:13:mode=444
NEWS:52329:8:mode=444
FAQ:01918:7:mode=444
bin/genmetadata:02182:25:mode=555
bin/genchanges:21250:5:mode=555
bin/genlabellist:06064:4:mode=555
bin/dochanges:57111:34:mode=555
bin/ckclientview:45225:8:mode=555
extra/dbdump:04951:2:mode=555
extra/revcount.pl:05900:2:mode=555
extra/linedep.pl:36568:1:mode=555
lib/util.pl:60780:3:mode=444
test/file,v:15593:4:mode=444
test/dollar$file,v:42472:1:mode=444
test/space file,v:42472:1:mode=444
test/config:18437:4:mode=444
test/runtest:56711:4:mode=555
test/norm:14244:1:mode=555
test/metadata.good:31983:2:mode=444
test/lines.good:18321:1:mode=444
test/changes.good:20875:2:mode=444
test/p4_changes_-l.good:51130:3:mode=444
test/p4_describe.good:52767:7:mode=444
test/p4_describe.good-r97.3:04167:6:mode=444
MANIFEST
@manifest = split(/\n/, $manifest);

$Usage = <<LIT;
$Myname: usage: $Myname [-gen|-tar <vers>] 
LIT


sub x
{
  my ($cmd) = @_;
 
  print "$Myname: $cmd\n";
  if (! $noexec)
    {
      $status = system $cmd;
      if ($status)
        { printf "$Myname: *** exit status %d\n", $status / 256; exit 1; }
    }
}


sub dirname
{
  my ($dir) = @_;
 
  $dir =~ s%^$%.%; $dir = "$dir/";
  if ($dir =~ m%^/[^/]*//*$%) { return "/"; }
  if ($dir =~ m%^.*[^/]//*[^/][^/]*//*$%)
    { $dir =~ s%^(.*[^/])//*[^/][^/]*//*$%$1%; { return $dir; } }
  return ".";
}


sub usage
{
  print STDERR $Usage;
  exit 1;
}


sub help
{
  print STDERR <<LIT;
$Usage
$Myname is used to help verify the completeness of the cvs2p4
distribution kit.
LIT
  exit 1;
}

$uname = `/bin/uname -a`; chop $uname;
($u_os, $u_host, $u_osrel) = split(/\s+/, $uname);

if    ($u_os eq "SunOS" && $u_osrel =~ /^5\./)
  { $sum = "/usr/ucb/sum"; }
elsif ($u_os eq "SunOS" && $u_osrel =~ /^4\./)
  { $sum = "/bin/sum"; }
elsif ($u_os eq "OSF1" && $u_osrel =~ /^V[34]\./)
  { $sum = "/bin/sum" }
elsif ($u_os eq "FreeBSD" && $u_osrel =~ /^2\.\./)
  { $sum = "NONE" }
else
  { print STDERR "\n$Myname: warning: not tested for \"$u_os $u_osrel\".\n\n"; }

#  Take our chances with $PATH
#
if (! defined($sum)) { $sum = "sum"; }
if (! defined($tar)) { $tar = "tar"; }

$op = "check";

while ($#ARGV >= 0)
  {
    if    ($ARGV[0] eq "-gen")  { $op = "gen"; shift; next; }
    elsif ($ARGV[0] eq "-tar")
      {
        $op = "tar"; shift;
        if ($#ARGV < 0) { usage; }
        $vers = $ARGV[0]; shift;
        next;
      }
    elsif ($ARGV[0] eq "-help") { &help; }
    elsif ($ARGV[0] =~ /^-/)    { &usage; }
    if ($Args ne "") { $Args .= " "; }
    push(@Args, $ARGV[0]);
    shift;
  }

if ($#Args != -1) { &usage; }

if ($op eq "gen")
  {
    @mestat = stat($Myname);

    if (! open(ME, "<$Myname"))
      {
        print "Can't open myself for modification: $!\n";
        exit 1;
      }
    if (! open(NEWME, ">$Myname.gen"))
      {
        print "Can't open myself for modification: $!\n";
        exit 1;
      }
    while (<ME>) { print NEWME; if (/^\$manifest = <<'MANIFEST';$/) { last; } }
  }
elsif ($op eq "tar")
  { $tarcmd = "$tar cvf cvs2p4-$vers.tar"; }


if ($op eq "check" && $sum eq "NONE")
  { print "\n[Checksums will not be checked on this $u_os system.]\n\n"; }

$status = 0;
foreach $ent (@manifest)
  {
    ($path, $sum1, $sum2, $opts) = split(/:/, $ent);

    if ($op eq "check" || $op eq "gen")
      {
        if (! lstat($path))
          { print "? $path... not found (couldn't stat)\n"; $status |= 1; }
        else
          {
            $linktarg = "";
            if ($opts =~ /\bsymlink=([^,\s]+)\b/)
              { $linktarg = $1; }
            else
              {
                if ($sum ne "NONE")
                  {
                    $sums = `$sum '$path'`; chop $sums;
                    ($csum1, $csum2) = split(/\s+/, $sums);
                  }
              }

            if ($op eq "check")
              {
                if ($linktarg ne "")
                  {
		    if (! -l $path)
                      { print "? $path... symlink not found\n"; $status |= 1; }
                    else
                      {
  		        $link = readlink $path;
                        if ($link ne $linktarg)
                          { print "? $path... symlink should be \"$linktarg\"\n"; $status |= 2; }
                        else
                          { print "  $path\n"; }
                      }
                  }
                else
                  {
  		    if ($path =~ /(\/){0,1}$Myname$/)
                      { print "  $path\n"; next; }
                    if ($sum ne "NONE" && ($csum1 != $sum1 || $csum2 != $sum2))
                      { print "M $path... modified (checksums mismatch)\n"; $status |= 2; }
                    else
                      { print "  $path\n"; }
                  }
              }
            elsif ($op eq "gen")
              {
   	        if ($path =~ /(\/){0,1}$Myname$/)
                  {
                    print NEWME "$path:-:-\n";
                    print "$path\n"; next;
                  }
                if ($linktarg ne "")
	          {
                    $_ = sprintf("$path:-:-:$opts\n");                    
                    print NEWME;
                    print "$path\n";
                  }               
                else
                  {
                    $_ = sprintf("$path:$csum1:$csum2:$opts\n");
                    print NEWME;
                    print "$path - checksum generated\n";
                  }
              }
          }
        next;
      }
    elsif ($op eq "tar")
      {
        if ($opts =~ /\bmode=([0-9]+)\b/)
          {
            $mode = $1;
            &x("/bin/chmod $mode '$path'");
          }
        @modes = lstat("$path");
	$owners{$path} = $modes[4];
	$groups{$path} = $modes[5];
	chown(0, 0, "$path")
          || print STDERR "WARNING: can't \"chown 0, 0, cvs2p4-$vers/$path\": $!\n";
        $tarcmd .= " 'cvs2p4-$vers/$path'";
      }
  }

if ($op eq "gen")
  {
    while (<ME>) { if (/^MANIFEST$/) { print NEWME; last; }}
    while (<ME>) { print NEWME; } close NEWME;
    unlink "$Myname.old";
    rename "$Myname", "$Myname.old" || die;
    rename "$Myname.gen", "$Myname" || die;
    chmod $mestat[2], "$Myname" || die;
  }
elsif ($op eq "tar")
  {
    $Here = `/bin/pwd`; chop $Here;
    ($Herename = $Here) =~ s%^.*/%%;
    $Parent = &dirname($Here);
    &x("/bin/mv $Parent/$Herename $Parent/cvs2p4-$vers");
    chdir $Parent || die;
    &x("$tarcmd")
    &x("/bin/mv $Parent/cvs2p4-$vers $Parent/$Herename");
    &x("/bin/mv $Parent/cvs2p4-$vers.tar $Parent/$Herename/cvs2p4-$vers.tar");

    chdir $Here || die;
    foreach $path (keys(%owners))
      {
	$own = $owners{$path}; $grp = $groups{$path};
	chown ($own, $grp, "$path") || 
          print STDERR "WARNING: can't \"chown $own, $grp, $path\": $!\n";
      }
  }

print "\n";
if ($status == 0) { print "All ok\n"; }
if ($status & 1) { print "*** some files are missing\n"; }
if ($status & 2) { print "*** some files have been modified\n"; }

exit $status;

# Change User Description Committed
#22 883 Matthew Rice Matt's cvs2p4 1.2.36 release
#21 882 Matthew Rice Matt's cvs2p4 1.2.35 release
#20 881 Matthew Rice Matt's cvs2p4 1.2.34 release
#19 880 Matthew Rice Matt's cvs2p4 1.2.33 release
#18 879 Matthew Rice Matt's cvs2p4 1.2.32 release
#17 878 Matthew Rice Matt's cvs2p4 1.2.31 release
#16 877 Matthew Rice Matt's cvs2p4 1.2.30 release
#15 876 Matthew Rice Matt's cvs2p4 1.2.29 release
#14 875 Matthew Rice Matt's cvs2p4 1.2.28 release
#13 874 Matthew Rice Matt's cvs2p4 1.2.27 release
#12 873 Matthew Rice Matt's cvs2p4 1.2.26 release
#11 872 Matthew Rice Matt's cvs2p4 1.2.25 release
#10 871 Matthew Rice Matt's cvs2p4 1.2.24 release
#9 870 Matthew Rice Matt's cvs2p4 1.2.23 release
#8 869 Matthew Rice Matt's cvs2p4 1.2.22 release
#7 868 Matthew Rice Matt's cvs2p4 1.2.21 release
#6 867 Matthew Rice Matt's cvs2p4 1.2.20 release
#5 866 Matthew Rice Matt's cvs2p4 1.2.19 release
#4 865 Matthew Rice Matt's cvs2p4 1.2.18 release
#3 864 Matthew Rice Matt's cvs2p4 1.2.17 release
#2 863 Matthew Rice Matt's cvs2p4 1.2.16 release
#1 862 Matthew Rice Branched off of Richard's 1.2.15 release.
//guest/richard_geiger/utils/cvs2p4/MANIFEST
#19 475 Richard Geiger Package cvs2p4 1.2.15
#18 460 Richard Geiger Publish 1.2.14
#17 422 Richard Geiger Package 1.2.13
#16 417 Richard Geiger Packaging for 1.2.12
#15 399 Richard Geiger 1.2.11
#14 393 Richard Geiger 1.2.10
#13 392 Richard Geiger CHanges for 1.2.10 (tolerate empty RCS file)
#12 343 Richard Geiger 1.2.9
#11 331 Richard Geiger 1.2.8 - handle cr/lf in ,v's ...
Yuck
#10 305 Richard Geiger Changes for 1.2.7
#9 283 Richard Geiger MANIFEST includes itself once more.
#8 253 Richard Geiger "MANIFEST" itself must handle shell metacharacters in filenames,
since we added a couple to the tests!
#7 252 Richard Geiger MANIFEST checksums for 1.2.6
#6 251 Richard Geiger Changes for 1.2.6 - metacharacters in filenames.
#5 247 Richard Geiger Just correct the version number at the top of the README, so
this doesn't rool the version number!
#4 240 Richard Geiger Version 1.2.5, to account for post-1999 RCS behavior.
(Courtesy of David Simon, Goldman Sachs)
#3 229 Richard Geiger Packaging for 1.2.4 release.
#2 180 Richard Geiger 1.2.3 release.
#1 130 Richard Geiger CVS-to-Perforce converter.
This is release 1.2.2
(first submit to the Perforce Public Depot)