faster perl version

This commit is contained in:
Joseph Lee 2006-09-20 05:37:48 +00:00
parent 425ada050a
commit 21d24ead6e

View File

@ -0,0 +1,136 @@
#!/bin/perl -w
use strict;
#use File::Copy;
use File::Basename;
my ($destdir, $printfilesCmd, $debug_state);
if ($ARGV[0] && $ARGV[0] eq '-d') {
$destdir = $ARGV[1];
$printfilesCmd = $ARGV[2];
$debug_state = "-d";
}
else {
$destdir = $ARGV[0];
$printfilesCmd = $ARGV[1];
$debug_state = "";
}
if (!$destdir || !$printfilesCmd) {
print "Usage: copyfiles.pl [-d] destdir printfilesCmd\n";
exit 1;
}
if (! -d $destdir ) {
print "Error: destdir must be a directory\n";
exit 1;
}
my @fileline = `$printfilesCmd $debug_state`;
my (%tree, %package);
my ($moduleDir, $packageDir, $installDir);
my ($file);
sub notsource($)
{
my ($line) = @_;
print "unrecognized line:|$line|\n";
}
sub add_file($ $)
{
my ($dir,$line) = @_;
if (! exists $package{$dir}) {
$package{$dir} = []; # create a new array entry if module/package key doesn't exist
}
push @{$package{$dir}}, $line; # add the source dir of this file to module/package's list
}
foreach my $line (@fileline)
{
chomp($line);
#print "$line\n";
if ( ($line =~ /CVS/)
|| ($line =~ /Opt\d\-/)
|| ($line =~ /\.cxx|\.obj|\.h|\.I|\.in|\.pdb|\.pp|\.cvsignore/)
)
{ # skip if ...
print "skipping $line\n";
next;
}
$installDir = '';
if ($line =~ /\/([^\/]+)\/src\/([^\/]+)\/(.+)$/ && $3)
{ # $1 is module aka dtool or pirates; $2 is package aka ai or battle
if ($3)
{
$moduleDir = $1;
$packageDir = $2;
$file = $3;
if (-d $file) { # don't handle bare directories
notsource($file);
next;
}
$installDir = "$moduleDir/$packageDir"
if $file =~ /\.py/; # tree install only for Python files
$tree{$moduleDir} = 1;
#print "recognized module:$moduleDir package:$packageDir\n";
}
else {
notsource($line); # don't know how to handle this file
}
}
elsif ($line =~ /pandac/)
{
$installDir = 'pandac';
}
add_file($installDir, $line);
#print "line:|$line|";
#print "$1 $2 $3 $4\n";
}
#############################################################################
print "\nSTARTING COPY\n\n";
sub echo_cmd($)
{
my ($cmd) = @_;
print "$cmd\n";
system($cmd);
}
my $cmd;
foreach my $dir (keys %tree)
{ # create the master directories
echo_cmd("mkdir -p $destdir/$dir");
echo_cmd("touch $destdir/$dir/__init__.py"); # linkage file for python
}
my ($fileline, $finaldir, $files);
foreach my $key (keys %package)
{ # loop and copy each cluster of files
$finaldir = "$destdir/$key";
print "\ncopying to $finaldir:\n";
$files = $package{$key};
foreach my $file (@{$files})
{ # dump list of files being copied
print "$file\n";
}
$fileline = join(' ', @{$files}); # create clustered command line
#print "-t $destdir/$key $fileline\n";
system("mkdir $destdir/$key");
system("cp -rpt $destdir/$key $fileline"); # copy
}
print "\n";
0;