[LON-CAPA-cvs] cvs: loncom /build/system_dependencies perltest.pl

albertel lon-capa-cvs@mail.lon-capa.org
Fri, 22 Aug 2003 20:48:38 -0000


albertel		Fri Aug 22 16:48:38 2003 EDT

  Modified files:              
    /loncom/build/system_dependencies	perltest.pl 
  Log:
  - now you can send it the command 'updatedev' or 'updatestable' which will attempt to do CPAN updates on modules that are either outdated or missing, Which works alot of the time
  - remove the _ref from some vars
  
  
Index: loncom/build/system_dependencies/perltest.pl
diff -u loncom/build/system_dependencies/perltest.pl:1.11 loncom/build/system_dependencies/perltest.pl:1.12
--- loncom/build/system_dependencies/perltest.pl:1.11	Fri Aug 22 15:56:02 2003
+++ loncom/build/system_dependencies/perltest.pl	Fri Aug 22 16:48:38 2003
@@ -2,7 +2,7 @@
 
 # perltest.pl - script to test the status of perl modules on a LON-CAPA system
 #
-# $Id: perltest.pl,v 1.11 2003/08/22 19:56:02 albertel Exp $
+# $Id: perltest.pl,v 1.12 2003/08/22 20:48:38 albertel Exp $
 #
 ###
 
@@ -158,7 +158,7 @@
 =cut
 
 # =================================== Process version information of this file.
-my $VERSION = sprintf("%d.%02d", q$Revision: 1.11 $ =~ /(\d+)\.(\d+)/);
+my $VERSION = sprintf("%d.%02d", q$Revision: 1.12 $ =~ /(\d+)\.(\d+)/);
 
 # ========================== Determine the mode that this script should run in.
 my $mode;
@@ -325,10 +325,12 @@
 my @dev_outdated;
 my @dev_okay;
 my @dev_veryokay;
+my @dev_to_update;
 my @stable_missing;
 my @stable_outdated;
 my @stable_okay;
 my @stable_veryokay;
+my @stable_to_update;
 
 # ===== Loop through all of the needed CPAN distributions and probe the system.
 foreach my $dist (keys %dist_module_hash) {
@@ -339,44 +341,48 @@
     my ($vok,$vstr);
     foreach my $type ('dev','stable') {
 	my ($vers_mod,$vers_dist);
-	my ($missing_ref,$outdated_ref,$veryokay_ref,$okay_ref);
+	my ($missing,$outdated,$veryokay,$okay,$to_update);
 	if ($type eq 'dev') {
 	    $vers_mod=$module_dev_version_hash{$module};
 	    $vers_dist=$dist_dev_version_hash{$dist};
-	    ($missing_ref,$outdated_ref,$veryokay_ref,$okay_ref)=
-		(\@dev_missing,\@dev_outdated,\@dev_veryokay,\@dev_okay);
+	    ($missing,$outdated,$veryokay,$okay,$to_update)=
+		(\@dev_missing,\@dev_outdated,\@dev_veryokay,\@dev_okay,
+		 \@dev_to_update);
 	} elsif ($type eq 'stable') {
 	    $vers_mod=$module_stable_version_hash{$module};
 	    $vers_dist=$dist_stable_version_hash{$dist};
-	    ($missing_ref,$outdated_ref,$veryokay_ref,$okay_ref)=
+	    ($missing,$outdated,$veryokay,$okay,$to_update)=
 		(\@stable_missing,\@stable_outdated,\@stable_veryokay,
-		 \@stable_okay);
+		 \@stable_okay,\@stable_to_update);
 	}
 	($vok,$vstr) = have_vers($module,$vers_mod);
 	# print "fsflag: $fsflag, vok: $vok, vstr: $vstr, fs: $fs\n";
 	if ($fsflag and !$vok and $vstr=~/not found/) {
-	    push(@$missing_ref,'MISSING  '.$dist.' (want distribution '.
+	    push(@$missing,'MISSING  '.$dist.' (want distribution '.
 		 $module.' version '. $vers_dist.') ?'."\n");
+	    push(@$to_update,$dist);
 	    # The question mark indicates there was a pattern match in the
 	    # big_module_string which would be unexpected.
 	    # There is no usual reason to tell the normal LON-CAPA user about this
 	    # question mark.  This is just source code magic.
 	} elsif (!$fsflag and !$vok and $vstr=~/not found/) {
-	    push(@$missing_ref,'MISSING  '.$dist.' (want distribution '.
+	    push(@$missing,'MISSING  '.$dist.' (want distribution '.
 		 $module.' version '.$vers_dist.')'."\n");
+	    push(@$to_update,$dist);
 	} elsif ($fsflag and !$vok and $vstr!~/not found/) {
-	    push(@$outdated_ref,'OUTDATED '.$dist.' wanted module: v'.
+	    push(@$outdated,'OUTDATED '.$dist.' wanted module: v'.
 		 $vers_mod.'; '.$vstr.' (VERSION_FROM is '.
 		 $fs.') want dist '.$module.' version '.$vers_dist.'.'. "\n");
+	    push(@$to_update,$dist);
 	} elsif ($fsflag) {
 	    $vstr=~/found v(.*)/;
 	    my $vc=$1;
 	    if ($vc eq $vers_mod) {
-		push(@$veryokay_ref,'VERYOKAY '.$dist.' wanted: v'.
+		push(@$veryokay,'VERYOKAY '.$dist.' wanted: v'.
 		     $vers_mod.'; '.$vstr.' (VERSION_FROM is '.$fs.
 		     ') want dist '.$module.' version '.$vers_dist."\n");
 	    } else {
-		push(@$okay_ref,'OKAY     '.$dist.' wanted: v'.
+		push(@$okay,'OKAY     '.$dist.' wanted: v'.
 		     $vers_mod.'; '.$vstr.' (VERSION_FROM is '.$fs.').'."\n");
 	    }
 	}
@@ -509,6 +515,29 @@
 END
   }
 
+if ($mode =~ /^update(dev|stable)$/) {
+    use CPAN;
+    my $type=$1;
+    print $detailstream 'Attempting to do a '.$type.' update'."\n";
+    my $to_update;
+    if ($type eq 'dev') {
+	$to_update=\@dev_to_update;
+    } elsif ($type eq 'stable') {
+	$to_update=\@stable_to_update;
+    }
+    foreach my $dist (@$to_update) {
+	my $module=$dist_module_hash{$dist};
+	my ($vers_mod,$vers_dist);
+	if ($type eq 'dev') {
+	    $vers_mod=$module_dev_version_hash{$module};
+	    $vers_dist=$dist_dev_version_hash{$dist};
+	} elsif ($type eq 'stable') {
+	    $vers_mod=$module_stable_version_hash{$module};
+	    $vers_dist=$dist_stable_version_hash{$dist};
+	}
+	install($module);
+    }
+}
 # ================================================================ Subroutines.
 # Note that "vers_cmp" and "have_vers" are adapted from a bugzilla version 2.16
 # "checksetup.pl" script.