Update of /cvsroot/fink/fink/perlmod/Fink
In directory sc8-pr-cvs5.sourceforge.net:/tmp/cvs-serv14468/perlmod/Fink
Modified Files:
Tag: selfupdate_classes
ChangeLog SelfUpdate.pm
Log Message:
Actual updating now implemented in SU::$method->do_direct; offloaded
from SU functions for $method==(rsync,point)
Index: SelfUpdate.pm
===================================================================
RCS file: /cvsroot/fink/fink/perlmod/Fink/SelfUpdate.pm,v
retrieving revision 1.117.2.3
retrieving revision 1.117.2.4
diff -u -d -r1.117.2.3 -r1.117.2.4
--- SelfUpdate.pm 6 Mar 2007 20:02:28 -0000 1.117.2.3
+++ SelfUpdate.pm 7 Mar 2007 09:41:17 -0000 1.117.2.4
@@ -133,10 +133,6 @@
$method = $methods{lc $method};
}
- my ($srcdir, $finkdir, $latest_fink, $installed_version, $answer);
-
- $srcdir = "$basepath/src";
- $finkdir = "$basepath/fink";
if (defined $method) {
&print_breaking("\n Please note: the command 'fink selfupdate' "
. "should be used for routine updating; you
only need to use "
@@ -144,15 +140,8 @@
. "changing your update method. \n\n");
}
if (! defined $config->param("SelfUpdateMethod") and defined $method) {
- if ($method eq 'cvs') {
- $answer = "cvs";
- }
- elsif ($method eq 'rsync') {
- $answer = "rsync";
- }
- else {
- $answer = "point";
- }
+ my $answer = $method;
+ $answer = 'point' if !defined $answer;
&need_devtools($answer);
&print_breaking("fink is setting your default update method to
$answer \n");
$config->set_param("SelfUpdateMethod", $answer);
@@ -162,7 +151,7 @@
# The user has not chosen a selfupdatemethod yet, always ask
# if the fink.conf setting is not there.
if (! defined $config->param("SelfUpdateMethod") and ! defined $method)
{
- $answer = &prompt_selection("Choose an update method",
+ my $answer = &prompt_selection("Choose an update method",
intro => "fink needs you to
choose a SelfUpdateMethod.",
default => [ value => "rsync" ],
choices => [
@@ -186,7 +175,7 @@
if ($config->param("SelfUpdateMethod") eq 'cvs' and $method ne 'rsync')
{
&need_devtools('cvs');
Fink::SelfUpdate::rsync->stamp_clear();
- if (-d "$finkdir/dists/CVS") {
+ if (-d "$basepath/fink/dists/CVS") {
&do_direct_cvs();
&do_finish();
return;
@@ -198,12 +187,11 @@
}
elsif ($config->param("SelfUpdateMethod") eq 'rsync' and $method ne
'cvs'){
&need_devtools('rsync');
- &do_direct_rsync();
+ Fink::SelfUpdate::rsync->do_direct();
&do_finish();
return;
}
# Hm, we were called with a different option than the default :(
- $installed_version = &pkginfo_version();
my $selfupdatemethod = $config->param("SelfUpdateMethod");
if ($selfupdatemethod ne 'rsync' and $method eq 'rsync') {
@@ -214,7 +202,7 @@
die "Sorry, fink doesn't support rsync updating in the
10.5 distribution at present.\n\n";
}
- $answer =
+ my $answer =
&prompt_boolean("The current selfupdate method is
$selfupdatemethod. "
. "Do you wish to change the default
selfupdate method ".
"to rsync?", default => 1);
@@ -224,12 +212,12 @@
&need_devtools('rsync');
$config->set_param("SelfUpdateMethod", "rsync");
$config->save();
- &do_direct_rsync();
+ Fink::SelfUpdate::rsync->do_direct();
&do_finish();
return;
}
if ($selfupdatemethod ne 'cvs' and $method eq 'cvs') {
- $answer =
+ my $answer =
&prompt_boolean("The current selfupdate method is
$selfupdatemethod. "
. "Do you wish to change the default
selfupdate method ".
"to cvs?", default => 1);
@@ -244,38 +232,7 @@
return;
}
if (($config->param("SelfUpdateMethod") eq "point")) {
- # get the file with the current release number
- my $currentfink;
- $currentfink = "CURRENT-FINK-$distribution";
- ### if we are in 10.1, need to use "LATEST-FINK" not
"CURRENT-FINK"
- if ($distribution eq "10.1") {
- $currentfink = "LATEST-FINK";
- }
- my $website = "http://www.finkproject.org";
- if (-f "$basepath/lib/fink/URL/website") {
- $website = cat "$basepath/lib/fink/URL/website";
- chomp($website);
- }
- if (&fetch_url("$website/$currentfink", $srcdir)) {
- die "Can't get latest version info\n";
- }
- $latest_fink = cat "$srcdir/$currentfink";
- chomp($latest_fink);
- if ( ! Fink::SelfUpdate::CVS->stamp_check() and !
Fink::SelfUpdate::rsync->stamp_check() ) {
- # check if we need to upgrade
- if (&version_cmp($latest_fink . '-1', '<=',
$distribution . '-' . $installed_version . '-1')) {
- print "\n";
- &print_breaking("You already have the package
descriptions from ".
- "the latest
Fink point release. ".
-
"(installed:$installed_version available:$latest_fink)");
- return;
- }
- } else {
- Fink::SelfUpdate::CVS->stamp_clear();
- Fink::SelfUpdate::rsync->stamp_clear();
- Fink::SelfUpdate::CVS->clear_metadata();
- }
- &do_tarball($latest_fink);
+ Fink::SelfUpdate::point->do_direct();
&do_finish();
}
}
@@ -551,68 +508,6 @@
}
-### update from packages tarball
-# parameter: version number
-
-sub do_tarball {
- my $newversion = shift;
- my ($downloaddir, $dir);
- my ($pkgtarball, $url, $verbosity, $unpack_cmd);
-
- print "\n";
- &print_breaking("I will now download the package descriptions for ".
- "Fink $newversion and update the core
packages. ".
- "After that, you should update the
other packages ".
- "using commands like 'fink
update-all'.");
- print "\n";
-
- $downloaddir = "$basepath/src";
- chdir $downloaddir or die "Can't cd to $downloaddir: $!\n";
-
- # go ahead and upgrade
- # first, download the packages tarball
- $dir = "dists-$newversion";
-
- ### if we are in 10.1, need to use "packages" not "dists"
- if ($distribution eq "10.1") {
- $dir = "packages-$newversion";
- }
-
- $pkgtarball = "$dir.tar.gz";
- $url = "mirror:sourceforge:fink/$pkgtarball";
-
- if (not -f $pkgtarball) {
- if (&fetch_url($url, $downloaddir)) {
- die "Downloading the update tarball '$pkgtarball' from
the URL '$url' failed.\n";
- }
- }
-
- # unpack it
- if (-e $dir) {
- rm_rf $dir or
- die "can't remove existing directory $dir\n";
- }
-
- $verbosity = "";
- if ($config->verbosity_level() > 1) {
- $verbosity = "v";
- }
- $unpack_cmd = "tar -xz${verbosity}f $pkgtarball";
- if (&execute($unpack_cmd)) {
- die "unpacking $pkgtarball failed\n";
- }
-
- # inject it
- chdir $dir or die "Can't cd into $dir: $!\n";
- if (&execute("./inject.pl $basepath -quiet")) {
- die "injecting the new package definitions from $pkgtarball
failed\n";
- }
- chdir $downloaddir or die "Can't cd to $downloaddir: $!\n";
- if (-e $dir) {
- rm_rf $dir;
- }
-}
-
=item do_finish
Fink::SelfUpdate::do_finish;
@@ -713,158 +608,6 @@
print "\n";
}
-# apparently-unused function
-
-sub rsync_check {
- &do_direct_rsync();
- &do_finish();
-}
-
-sub do_direct_rsync {
- my ($descdir, @sb, $cmd, $rmcmd, $vercmd, $username, $msg);
- my ($timecmd, $oldts, $newts);
- my $origmirror;
- my $dist = $distribution;
- my $rsynchost = $config->param_default("Mirror-rsync",
"rsync://master.us.finkmirrors.net/finkinfo/");
- # add rsync quiet flag if verbosity level permits
- my $verbosity = "-q";
- my $nohfs ="";
- if ($config->verbosity_level() > 1) {
- $verbosity = "-v";
- }
- if (system("rsync -help 2>&1 | grep 'nohfs' >/dev/null") == 0) {
- $nohfs = "--nohfs";
- }
- $descdir = "$basepath/fink";
- chdir $descdir or die "Can't cd to $descdir: $!\n";
-
-
- $origmirror = Fink::Mirror->get_by_name("rsync");
-
-RSYNCAGAIN:
- $rsynchost = $origmirror->get_site_retry("", 0);
- if( !grep(/^rsync:/,$rsynchost) ) {
- print "No mirror worked. This seems unusual, please submit a
short summary of this event to [EMAIL PROTECTED] Thank you\n";
- exit 1;
- }
-
- # Fetch the timestamp for comparison
- $timecmd = "rsync -az $verbosity $nohfs $rsynchost/TIMESTAMP
$descdir/TIMESTAMP.tmp";
- if (&execute($timecmd)) {
- print "Failed to fetch the timestamp file from the rsync
server: $rsynchost. Check the error messages above.\n";
- goto RSYNCAGAIN;
- }
- # If there's no TIMESTAMP file, then we haven't synced from rsync
- # before, so there's no checking we can do. Blaze on past.
- if ( -f "$descdir/TIMESTAMP" ) {
- open TS, "$descdir/TIMESTAMP";
- $oldts = <TS>;
- close TS;
- chomp $oldts;
- # Make sure the timestamp only contains digits
- if ($oldts =~ /\D/) {
- unlink("$descdir/TIMESTAMP.tmp");
- die "The timestamp file $descdir/TIMESTAMP contains
non-numeric characters. This is illegal. Refusing to continue.\n";
- }
-
- open TS, "$descdir/TIMESTAMP.tmp";
- $newts = <TS>;
- close TS;
- chomp $newts;
- # Make sure the timestamp only contains digits
- if ($oldts =~ /\D/) {
- unlink("$descdir/TIMESTAMP.tmp");
- die "The timestamp file fetched from $rsynchost
contains non-numeric characters. This is illegal. Refusing to continue.\n";
- }
-
- if ( $oldts > $newts ) {
- # error out complaining that we're trying to update
- # from something older than what we already have.
- unlink("$descdir/TIMESTAMP.tmp");
- print "The timestamp of the server is older than what
you already have.\n";
- exit 1;
- }
-
- }
-
- # If the Distributions line has been updated...
- if (! -d "$descdir/$dist") {
- mkdir_p "$descdir/$dist";
- }
- @sb = stat("$descdir/$dist");
-
- # We need to remove the CVS directories, since what we're
- # going to put there isn't from cvs. Leaving those directories
- # there will thoroughly confuse things if someone later does
- # selfupdate-cvs. However, don't actually do the removal until
- # we've tried to put something there.
- $msg = "I will now run the rsync command to retrieve the latest package
descriptions. \n";
-
- $rsynchost =~ s/\/*$//;
- $dist =~ s/\/*$//;
-
- my $rinclist = "";
-
- my @trees = grep { m,^(un)?stable/, } $config->get_treelist();
- die "Can't find any trees to update\n" unless @trees;
- map { s/\/*$// } @trees;
-
- foreach my $tree (@trees) {
- my $oldpart = $dist;
- my @line = split /\//,$tree;
-
- $rinclist .= " --include='$dist/'";
- for(my $i = 0; defined $line[$i]; $i++) {
- $oldpart = "$oldpart/$line[$i]";
- $rinclist .= " --include='$oldpart/'";
- }
- $rinclist .= " --include='$oldpart/finkinfo/'
--include='$oldpart/finkinfo/*/' --include='$oldpart/finkinfo/*'
--include='$oldpart/finkinfo/**/*'";
-
- if (! -d "$basepath/fink/$dist/$tree" ) {
- mkdir_p "$basepath/fink/$dist/$tree";
- }
- }
- $cmd = "rsync -rtz --delete-after --delete $verbosity $nohfs $rinclist
--include='VERSION' --include='DISTRIBUTION' --include='README' --exclude='**'
'$rsynchost' '$basepath/fink/'";
- if ($sb[4] != 0 and $> != $sb[4]) {
- ($username) = getpwuid($sb[4]);
- if ($username) {
- $cmd = "/usr/bin/su $username -c \"$cmd\"";
- chowname $username, "$basepath/fink/$dist";
- }
- }
- &print_breaking($msg);
-
- if (&execute($cmd)) {
- print "Updating using rsync failed. Check the error messages
above.\n";
- goto RSYNCAGAIN;
- } else {
- foreach my $tree (@trees) {
- &execute("/usr/bin/find '$basepath/fink/$dist/$tree'
-name CVS -type d -print0 | xargs -0 /bin/rm -rf");
- }
- }
-
- Fink::SelfUpdate::CVS->clear_metadata();
- Fink::SelfUpdate::rsync->stamp_set();
- Fink::SelfUpdate::CVS->stamp_clear();
-# change the VERSION to reflect rsync
-if (-f "$basepath/fink/$dist/VERSION") {
- open(IN,"$basepath/fink/$dist/VERSION") or die "can't open VERSION: $!";
- open(OUT,">$basepath/fink/$dist/VERSION.tmp") or die "can't write
VERSION.tmp: $!";
- while (<IN>) {
- chomp;
- $_ =~ s/cvs/rsync/;
- print OUT "$_\n";
- }
- close(IN);
- unlink "$basepath/fink/$dist/VERSION";
- rename "$basepath/fink/$dist/VERSION.tmp",
"$basepath/fink/$dist/VERSION";
-}
-
- # cleanup after ourselves and continue with the update.
- unlink("$descdir/TIMESTAMP");
- rename("$descdir/TIMESTAMP.tmp", "$descdir/TIMESTAMP");
-}
-
=back
=cut
Index: ChangeLog
===================================================================
RCS file: /cvsroot/fink/fink/perlmod/Fink/ChangeLog,v
retrieving revision 1.1439.2.4
retrieving revision 1.1439.2.5
diff -u -d -r1.1439.2.4 -r1.1439.2.5
--- ChangeLog 7 Mar 2007 09:23:04 -0000 1.1439.2.4
+++ ChangeLog 7 Mar 2007 09:41:16 -0000 1.1439.2.5
@@ -1,5 +1,15 @@
2007-03-07 Daniel Macks <[EMAIL PROTECTED]>
+ * SelfUpdate/Base.pm: add do_direct to public API
+ * SelfUpdate.pm, SelfUpdate/rsync.pm: migrate &SU::do_direct_rsync
+ to SU::rsync->do_direct
+ * Selfupdate.pm, SelfUpdate/point.pm: Consolidate all
+ tarball/point stuff related to &SU::do_tarball, migrate it to
+ SU::tarball->do_direct
+ * SelfUpdate.pm: Misc cleanups
+
+2007-03-07 Daniel Macks <[EMAIL PROTECTED]>
+
* SelfUpdate/tarball.pm: delete (redundant vs "point" method)
2007-03-06 Daniel Macks <[EMAIL PROTECTED]>
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Fink-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/fink-commits