minor cleanup and optimizations preparing for rework of do_copyfile.

This commit is contained in:
granrose%netscape.com 1999-09-15 00:27:37 +00:00
Родитель d3542379d6
Коммит 8d0efb9100
1 изменённых файлов: 49 добавлений и 48 удалений

Просмотреть файл

@ -45,11 +45,11 @@ $saved_cwd = cwd();
$component = ""; # current component being copied
$PD = ""; # file Path Delimiter ( /, \, or :)
$altdest = ""; # alternate file destination
$file = ""; # file being copied
$line = ""; # line being processed
$srcdir = ""; # directory being copied from
$destdir = ""; # destination being copied to
$package = ""; # file listing files to copy
$os = "NULL"; # os type (MacOS, MSDOS, "" == Unix)
$os = ""; # os type (MacOS, MSDOS, Unix)
$verbose = 0; # shorthand for --debug 1
$lineno = 0; # line # of package file for error text
$debug = 0; # controls amount of debug output
@ -58,8 +58,8 @@ $help = 0; # flag: if set, print usage
# get command line options
$return = GetOptions( "source|src|s=s", \$srcdir,
"destination|dest|d=s", \$destdir,
$return = GetOptions( "source|s=s", \$srcdir,
"destination|d=s", \$destdir,
"file|f=s", \$package,
"os|o=s", \$os,
"help|h", \$help,
@ -93,7 +93,7 @@ open (MANIFEST,"<$package") ||
die "Error: couldn't open file $package for reading: $!. Exiting...\n";
LINE: while (<MANIFEST>) {
$file = "";
$line = "";
$altdest = "";
$lineno++;
@ -125,7 +125,7 @@ LINE: while (<MANIFEST>) {
# delete the file or directory following the '-'
/^-/ && do {
s/^-//; # strip leading '-'
($debug >= 10) && print "delete.\n";
($debug >= 10) && print "delete: $destdir$PD$component$PD$_\n";
do_delete ("$destdir$PD$component$PD$_");
next LINE;
};
@ -134,39 +134,40 @@ LINE: while (<MANIFEST>) {
/\,/ && do {
/.*\,.*\,.*/ &&
die "Error: multiple commas not allowed ($package, $lineno): $_.\n";
($file, $altdest) = split (/\s*\,\s*/, $_, 2);
$file =~ s/$PD*$//; # strip any trailing delimiter
($line, $altdest) = split (/\s*\,\s*/, $_, 2);
$line =~ s/$PD*$//; # strip any trailing delimiter
$altdest =~ s/$PD*$//; # strip any trailing delimiter
($debug >= 10) && print "relocate: $file, $altdest.\n";
($debug >= 10) && print "relocate: $line, $altdest.\n";
};
($file eq "") && ($file = $_); # if $file not set, set it.
if ($line eq "") {
$line = $_; # if $line not set, set it.
}
# if it has wildcards, do recursive copy.
/(?:\*|\?)/ && do {
($debug >= 10) && print "wildcard copy.\n";
do_batchcopy ("$srcdir$PD$file");
next LINE;
};
# if it's a directory, do recursive copy.
(-d "$srcdir$PD$file") && do {
($debug >= 10) && print "directory copy.\n";
do_batchcopy ("$srcdir$PD$file");
do_batchcopy ("$srcdir$PD$line");
next LINE;
};
# if it's a single file, copy it.
( -f "$srcdir$PD$file" ) && do {
( -f "$srcdir$PD$line" ) && do {
($debug >= 10) && print "file copy.\n";
do_copyfile ();
$file = "";
next LINE;
};
# if we hit this, dunno what it is. abort! abort!
die "Error: $_ unrecognized ($package, $lineno). Exiting...\n";
# cyeh print "Error: $_ unrecognized ($package, $lineno). Exiting...\n";
# if it's a directory, do recursive copy.
(-d "$srcdir$PD$line") && do {
($debug >= 10) && print "directory copy.\n";
do_batchcopy ("$srcdir$PD$line");
next LINE;
};
# if we hit this, it's either a file in the package file that is
# not in the src directory, or it is not a valid entry.
warn "Warning: package error or possible missing file: $_ ($package, $lineno).\n";
} # LINE
@ -223,7 +224,7 @@ sub do_copyfile
if ($batch) {
$srcfile = $File::Find::name;
} else {
$srcfile = "$srcdir$PD$file";
$srcfile = "$srcdir$PD$line";
}
# check that source file is readable
(!( -r $srcfile )) &&
@ -233,7 +234,7 @@ sub do_copyfile
if ($altdest ne "") {
if ($batch) {
$path = "$destdir$PD$component$PD$altdest$PD$File::Find::dir";
$path =~ s/$srcdir$PD$file$PD//; # rm info added by find
$path =~ s/$srcdir$PD$line$PD//; # rm info added by find
$basefile = basename ($File::Find::name);
($debug >= 5) &&
print "recursive find w/altdest: $path $basefile\n";
@ -265,8 +266,8 @@ sub do_copyfile
($debug >= 5) &&
print "recursive find w/o altdest: $path $basefile\n";
} else {
$path = dirname ("$destdir$PD$component$PD$file");
$basefile = basename ($file);
$path = dirname ("$destdir$PD$component$PD$line");
$basefile = basename ($line);
($debug >= 5) &&
print "recursive find w/o altdest: $path $basefile\n";
}
@ -283,14 +284,14 @@ sub do_copyfile
if ($batch) {
print "$basefile\n"; # from unglob
} else {
print "$file\n"; # from single file
print "$line\n"; # from single file
}
if ($debug >= 3) {
print "copy\t$srcfile =>\n\t\t$path$PD$basefile\n";
}
}
copy ("$srcfile", "$path$PD$basefile") ||
die "Error: copy of file $srcdir$PD$file failed ($package, $component, $lineno): $!. Exiting...\n";
die "Error: copy of file $srcdir$PD$line failed ($package, $component, $lineno): $!. Exiting...\n";
# if this is unix, set the dest file permissions
if ($os eq "") {
@ -346,6 +347,7 @@ sub do_component
if ( -d "$destdir$PD$component" ) {
warn "Warning: component directory \"$component\" already exists in \"$destdir\".\n";
} else {
($debug >= 4) && print "mkdir $destdir$PD$component\n";
mkdir ("$destdir$PD$component", 0755) ||
die "Error: couldn't create component directory \"$component\": $!. Exiting...\n";
}
@ -411,8 +413,8 @@ sub check_arguments
fileparse_set_fstype ($os);
($debug >= 4) && print "OS: $os\n";
warn "Warning: MSDOS not fully implemented/tested.\n";
} elsif ( $os =~ /unix/i ) { # null because Unix is default for
$os = ""; # fileparse_set_fstype()
} elsif ( $os =~ /unix/i ) {
$os = "Unix"; # can be anything but MacOS, MSDOS, or VMS
$PD = "/";
fileparse_set_fstype ($os);
($debug >= 4) && print "OS: Unix\n";
@ -422,7 +424,7 @@ sub check_arguments
}
if ($exitval) {
print "\See '$0 --help\' for more information.\n";
print "See \'$0 --help\' for more information.\n";
print "Exiting...\n";
exit ($exitval);
}
@ -453,33 +455,33 @@ $0
in the destination directory as specified by the package file.
Options:
--source <source directory>
-s, --source <source directory>
Specifies the directory from which to copy the files
specified in the file passed via --file. Can also be
abbreviated to: --src, --s.
specified in the file passed via --file.
Required.
--destination <destination directory>
-d, --destination <destination directory>
Specifies the directory in which to create the component
directories and copy the files specified in the file passed
via --file. Can also be abbreviated to: --dest, --d.
via --file.
NOTE: This MUST be an absolute path, relative paths
will not work!
Required.
--file <package file>
-f, --file <package file>
Specifies the file listing the components to be created in
the destination directory and the files to copy from the
source directory to each component directory in the
destination directory. Can also be abbreviated to: --f.
destination directory.
Required.
--os [dos|mac|unix]
Specifies which type of system this is. Used for parsing file
specifications from the package file. Can also be abbreviated
to: --o.
-o, --os [dos|mac|unix]
Specifies which type of system this is. Used for parsing
file specifications from the package file.
Required.
--help
Prints this information. Can also be abbreviated to: --h
-h, --help
Prints this information.
Optional.
--debug [1-10]
@ -489,9 +491,8 @@ Options:
3 : includes source and destination for each copy.
Optional.
--verbose
Print component names and files copied/deleted. Can also
be abbreviated to: --v.
-v, --verbose
Print component names and files copied/deleted.
Optional.