summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--NEWS2
-rwxr-xr-xmgaapplet16
-rwxr-xr-xmgaapplet-upgrade-helper40
-rw-r--r--mgaonline.pm2
4 files changed, 51 insertions, 9 deletions
diff --git a/NEWS b/NEWS
index 41e0a83a..d02682c4 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,5 @@
+- add support for a 'mageia-prepare-upgrade' package when performing distro
+ upgrades
- do not define the $root variable in mgaapplet-upgrade-helper as it's exported
from mgaonline.pm
- exit early from mgaapplet-upgrade-helper if we don't pass expected/required
diff --git a/mgaapplet b/mgaapplet
index 81be6260..cecaa68b 100755
--- a/mgaapplet
+++ b/mgaapplet
@@ -53,10 +53,16 @@ if (!find { $_ eq '--auto-update' } @ARGV) {
my $online_site = "http://www.mageia.org/";
my ($menu, $timeout, $network_timeout, $state_global, $sub_state);
+my ($download_dir);
+{
+ my $temp_urpm = Rpmdrake::open_db::fast_open_urpmi_db();
+ $root = $temp_urpm->{root};
+ $download_dir = $temp_urpm->{cachedir};
+}
read_sys_config();
$config{UPDATE_FREQUENCY} ||= 3*60*60; # default to 3hours
-if ($::testing) {
+if ($::testing || -f "$root/var/lib/mageia-prepare-upgrade/state") {
$config{FIRST_CHECK_DELAY} = 1 * 1000; # 1 second
} else {
$config{FIRST_CHECK_DELAY} ||= 5 * 60 * 1000; # default to 5 minutes
@@ -226,13 +232,7 @@ foreach my $opt (@ARGV) {
}
}
-my ($download_dir, $download_all);
-{
- my $temp_urpm = Rpmdrake::open_db::fast_open_urpmi_db();
- $root = $temp_urpm->{root};
- $download_dir = $temp_urpm->{cachedir};
-}
-
+my ($download_all);
my ($new_distro, $no_more_supported);
my ($current_apimdv_distro);
diff --git a/mgaapplet-upgrade-helper b/mgaapplet-upgrade-helper
index 02cc37dd..d5c32a71 100755
--- a/mgaapplet-upgrade-helper
+++ b/mgaapplet-upgrade-helper
@@ -33,6 +33,8 @@ BEGIN { unshift @::textdomains, 'mgaonline' }
use mygtk2 qw(gtknew); #- do not import gtkadd which conflicts with ugtk2 version
use ugtk2 qw(:all);
+use interactive;
+use do_pkgs;
use lib qw(/usr/lib/libDrakX/drakfirsttime);
use mgaonline;
use Rpmdrake::open_db;
@@ -57,8 +59,46 @@ die("Usage: mgaapplet-upgrade-helper --new_distro_version=n [--rpm-root-dir] [--
$root = Rpmdrake::open_db::fast_open_urpmi_db()->{root};
+read_sys_config();
my $product_id = get_product_id();
+# Find the matching new_distro_version
+my @distros = get_distro_list();
+if (!@distros) {
+ ugtk2::ask_warn(N("Error"), N("Unable to download distro list"));
+ die("unable to retrieve distro list\n");
+}
+
+my $new_distro = find { $_->{version} eq $new_distro_version } @distros;
+if (!$new_distro) {
+ ugtk2::ask_warn(N("Error"), N("Distribution version %s was not found in the update list", $new_distro_version));
+ die("could not find version '$new_distro_version' in the distro update list\n");
+}
+
+if ($new_distro->{needs_preparation}) {
+ my $statefile = "$root/var/lib/mageia-prepare-upgrade/state";
+ my $prepared = (cat_($statefile) =~ /ready/) if ( -f $statefile );
+
+ if (!$prepared) {
+ ugtk2::ask_yesorno(N("Preparation Required"), N("In order to upgrade, your current installation needs to be prepared.\n\nDo you wish to do this preparation now?")) or exit(0);
+
+ my $in = interactive->vnew;
+ my $do_pkgs = do_pkgs::do_pkgs($in);
+ $do_pkgs->ensure_is_installed("mageia-prepare-upgrade") or exit(0);
+
+ # Check to see if installation alone is enough to ensure things are in the right state?
+ $prepared = (cat_($statefile) =~ /ready/) if ( -f $statefile );
+ if (!$prepared) {
+ my $infofile = "$root/usr/share/doc/mageia-prepare-upgrade/README.prepare";
+ my $info = ugtk2::escape_text_for_TextView_markup_format(join '', cat_($infofile)) if ( -f $infofile );
+ $info = N("Further action is required before you can continue.\n\nPlease see %s for more information.", $new_distro->{url}) if !$info;
+ ugtk2::ask_warn(N("Next Steps"), $info);
+ exit(0) if !$::testing;
+ log::l("I would validate /var/lib/mageia-prepare-upgrade/state == 'ready'");
+ }
+ }
+}
+
if (!$ENV{URPMI_IGNORESIZE}) {
check_available_free_space('/usr', 800) &&
check_available_free_space('/var', 800)
diff --git a/mgaonline.pm b/mgaonline.pm
index ff64b624..9288db11 100644
--- a/mgaonline.pm
+++ b/mgaonline.pm
@@ -92,7 +92,7 @@ sub get_distro_list_() {
my $extra_path = $::testing || uc($config{TEST_DISTRO_UPGRADE}) eq 'YES' ? 'testing-' : '';
my $list =
join('&',
- "https://releases.mageia.org/api/a/$extra_path$product_id->{arch}?product=$product_id->{product}",
+ "https://releases.mageia.org/api/b/$extra_path$product_id->{arch}?product=$product_id->{product}",
"version=$product_id->{version}",
"mgaonline_version=$mgaonline::version",
);