src/hg/js/cpJsFiles.pl 1.1
1.1 2009/08/10 20:42:16 larrym
initial checkin
Index: src/hg/js/cpJsFiles.pl
===================================================================
RCS file: src/hg/js/cpJsFiles.pl
diff -N src/hg/js/cpJsFiles.pl
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/hg/js/cpJsFiles.pl 10 Aug 2009 20:42:16 -0000 1.1
@@ -0,0 +1,82 @@
+#!/usr/bin/env perl
+
+# Copy files to javascript directory; make versioned soft-links as appropriate (and delete obsolete ones too).
+
+# $Id$
+
+use strict;
+
+use Getopt::Long;
+
+sub usage
+{
+ my ($msg) = @_;
+ print STDERR <<END;
+$msg
+
+Usage:
+
+cpJsFiles.pl [-exclude=...] -destDir=... files
+END
+}
+
+my ($exclude, $destDir);
+my %exclude;
+
+GetOptions("exclude=s" => \$exclude, "destDir=s" => \$destDir);
+
+if($exclude) {
+ %exclude = map { $_ => 1} split(/\s*,\s*/, $exclude);
+}
+
+usage("Missing/invalid destDir '$destDir'") if(!$destDir || !(-d $destDir));
+
+$destDir =~ s/\/$//;
+
+my @destFiles;
+for (`ls $destDir`) {
+ chomp;
+ push(@destFiles, $_);
+}
+
+for my $file (@ARGV)
+{
+ if(!$exclude{$file}) {
+ my @stat = stat($file) or die "Couldn't stat '$file'; err: $!";
+ my $mtime = $stat[9];
+
+ # update destination file as appropriate
+ my $update = 0;
+ if(-e "$destDir/$file") {
+ my @destStat = stat("$destDir/$file") or die "Couldn't stat '$destDir/$file'; err: $!";
+ $update = $destStat[9] < $mtime;
+ } else {
+ $update = 1;
+ }
+ if($update) {
+ !system("cp -p $file $destDir") || die "Couldn't cp $file: err: $!";
+ }
+
+ if($file =~ /(.+)\.js$/) {
+ my $prefix = $1;
+ my $softLink = $file;
+ $softLink =~ s/\.js$/-$mtime.js/;
+
+ # Delete obsolete symlinks
+ for my $f (@destFiles) {
+ if($f =~ /$prefix-(\d+)\.js/) {
+ if($f ne $softLink) {
+ print STDERR "Deleting old soft-link $f\n";
+ unlink("$destDir/$f") || die "Couldn't unlink '$destDir/$softLink'; err: $!";
+ }
+ }
+ }
+
+ # create new symlink
+ if(!(-l "$destDir/$softLink")) {
+ print STDERR "$destDir/$softLink\n";
+ !system("ln -s $destDir/$file $destDir/$softLink") || die "Couldn't ln -s $file; err: $!";
+ }
+ }
+ }
+}