d317b7479d6e020405f5e96d4ccbea152d03e806
larrym
  Tue Mar 15 14:19:30 2011 -0700
improve usage message
diff --git src/hg/utils/cpAndLinkToResourceFiles.pl src/hg/utils/cpAndLinkToResourceFiles.pl
index 3bf6c95..beb0dde 100755
--- src/hg/utils/cpAndLinkToResourceFiles.pl
+++ src/hg/utils/cpAndLinkToResourceFiles.pl
@@ -1,135 +1,144 @@
 #!/usr/bin/env perl
 
 # Copy files to resource directory; make versioned soft-links as appropriate (and delete obsolete ones too).
 
 use strict;
 
 use Cwd;
 use Getopt::Long;
 
 sub usage
 {
     my ($msg) = @_;
     print STDERR <<END;
 $msg
 
 Usage:
 
-cpAndLinkToResourceFiles.pl [-exclude=...] -destDir=... files
+cpAndLinkToResourceFiles.pl [OPTION] -destDir=dir -versionFile=file files
+
+Copy any modified static files to a directory in the apache DocumentRoot and create appropriately versioned softlinks.
+
+Options:
+
+     -destDir=dir          Directory where we copy files
+     -exclude=fileList     Comma-delimited list of files to exclude (useful if the files argument was created using "ls *.js")
+     -forceVersionNumbers  Force use of CGI versioned softlinks; useful for debugging in dev trees
+     -versionFile=file     Get CGI version from this header file
 END
 }
 
 my ($exclude, $destDir, $debug, $versionFile, $cgiVersion, $useMtimes);
 my %exclude;
 my $forceVersionNumbers;   # You can use this option to test CGI-versioned links on dev server
 
 GetOptions("exclude=s" => \$exclude, "destDir=s" => \$destDir, "debug" => \$debug, 
            "versionFile=s" => \$versionFile,  "forceVersionNumbers" =>  \$forceVersionNumbers);
 
 if($exclude) {
     %exclude = map { $_ => 1} split(/\s*,\s*/, $exclude);
 }
 
 usage("Missing/invalid destDir '$destDir'") if(!$destDir || !(-d $destDir));
 
 my $host = $ENV{HOST};
 if(!defined($host)) {
     $host = `/bin/hostname`;
     chomp($host);
 }
 
 # Use version based links in production sites, mtime based links in dev sites (see redmine #3170)
 if($forceVersionNumbers) {
     $useMtimes = 0;
 } else {
     $useMtimes = $host eq 'hgwdev' || $host eq 'genome-test' || $host eq 'genome-preview';
 }
 
 if(!$useMtimes) {
     if(defined($versionFile)) {
         open(FILE, $versionFile) || die "Couldn't open '$versionFile'; err: $!";
         while(<FILE>) {
             if(/CGI_VERSION \"([^\"]+)\"/) {
                 $cgiVersion = $1;
             }
         }
         close(FILE);
         if(!defined($cgiVersion)) {
             die "Couldn't find CGI_VERSION in '$versionFile'";
         }
     } else {
         die "Missing required versionFile parameter";
     }
 }
 
 $destDir =~ s/\/$//;
 
 my @destFiles;
 opendir(DIR, $destDir);
 for my $file (readdir(DIR)) {
     if($file !~ /^\./) {
         push(@destFiles, $file);
     }
 }
 closedir(DIR);
 
 # To avoid screwing up mirrors who run "rsync --links", we chdir into the resource directory and make non-absolute softlinks there.
 my $cwd = getcwd();
 chdir($destDir) || die "Couldn't chdir into '$destDir'; err: $!";
 
 for my $file (@ARGV)
 {
     if(!$exclude{$file}) {
         my @stat = stat("$cwd/$file") or die "Couldn't stat '$file'; err: $!";
         my $mtime = $stat[9];
         
         # update destination file as appropriate
         my $update = 0;
         my $destFile = $file;
         if(-e $destFile) {
             my @destStat = stat("$destFile") or die "Couldn't stat '$destFile'; err: $!";
             $update = ($destStat[9] < $mtime);
         } else {
             $update = 1;
         }
         if($update) {
             if (-e $destFile) {
                 unlink($destFile) || die "Couldn't unlink $destFile'; err: $!";
             }
             if($debug) {
                 print STDERR "cp -p $cwd/$file $destFile\n";
             }
             !system("cp -p $cwd/$file $destFile") || die "Couldn't cp $cwd/file to $destFile: err: $!";
         }
 
         if($file =~ /(.+)\.([a-z]+)$/) {
             my $prefix = $1;
             my $suffix = $2;
             # make sure time is right, in case file; file might have been newer,
             # speculation that cp -p silently failed if user doesn't own destDir
             @stat = stat($destFile) or die "Couldn't stat '$destFile'; err: $!";
             $mtime = $stat[9];
 
             my $softLink = $file;
             if($useMtimes) {
                 $softLink =~ s/\.${suffix}$/-$mtime.${suffix}/;
             } else {
                 $softLink =~ s/\.${suffix}$/-v$cgiVersion.${suffix}/;
             }
             # Delete obsolete symlinks
             for my $f (@destFiles) {
                 if(($useMtimes && $f =~ /^$prefix-\d+\.$suffix$/) || ($useMtimes && $f =~ /^$prefix-v\d+\.$suffix$/)) {
                     if($f ne $softLink) {
                         print STDERR "Deleting old soft-link $f\n" if($debug);
                         unlink($f) || die "Couldn't unlink obsolete softlink '$softLink'; err: $!";
                     }
                 }
             }
             # create new symlink
             if(!(-l "$softLink")) {
                 print STDERR "ln -s $softLink\n" if($debug);
                 !system("ln -s $file $softLink") || die "Couldn't ln -s $file; err: $!";
             }
         }
     }
 }