From a698efb76706f47b014f54e52337b88d7f895e88 Mon Sep 17 00:00:00 2001 From: Pascal Rigaux Date: Sat, 6 Jul 2002 12:22:50 +0000 Subject: (as suggested by Alexander Skwar) - in interactive::check_type, check if the package (like jfsprogs) is installed - use interactive::check_type where usefull - cleanup --- perl-install/diskdrake/hd_gtk.pm | 4 ++-- perl-install/diskdrake/interactive.pm | 31 ++++++++++++++++++++++--------- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/perl-install/diskdrake/hd_gtk.pm b/perl-install/diskdrake/hd_gtk.pm index 89dd91deb..0755d9b42 100644 --- a/perl-install/diskdrake/hd_gtk.pm +++ b/perl-install/diskdrake/hd_gtk.pm @@ -110,7 +110,7 @@ sub try_ { fsedit::undo_prepare($all_hds) if $name ne 'Undo'; - my $v = eval { $f->($in, @args, $all_hds); }; + my $v = eval { $f->($in, @args, $all_hds) }; if (my $err = $@) { $err =~ /setstep/ and die ''; $in->ask_warn(_("Error"), formatError($err)); @@ -347,7 +347,7 @@ sub createOrChangeType { return if $type == $part->{type}; isBusy($part) and $in->ask_warn('', _("Use ``Unmount'' first")), return; diskdrake::interactive::ask_alldatawillbelost($in, $part, __("After changing type of partition %s, all data on this partition will be lost")) or return; - fsedit::change_type($type, $hd, $part); + check_type($in, $type, $hd, $part) and fsedit::change_type($type, $hd, $part); } else { $part->{type} = $type; diskdrake::interactive::Create($in, $hd, $part, $all_hds); diff --git a/perl-install/diskdrake/interactive.pm b/perl-install/diskdrake/interactive.pm index 31be03443..fd4bd3af2 100644 --- a/perl-install/diskdrake/interactive.pm +++ b/perl-install/diskdrake/interactive.pm @@ -494,15 +494,17 @@ sub Type { #- for ext2, warn after choosing as ext2->ext3 can be achieved without loosing any data :) isExt2($part) or $warn->() or return; - my $type = type2name($part->{type}); + my $type_name = type2name($part->{type}); $in->ask_from(_("Change partition type"), _("Which filesystem do you want?"), - [ { label => _("Type"), val => \$type, list => [ partition_table::important_types() ], sort => 0, not_edit => !$::expert } ]) or return; + [ { label => _("Type"), val => \$type_name, list => [ partition_table::important_types() ], sort => 0, not_edit => !$::expert } ]) or return; + + my $type = $type_name && name2type($type_name); - if (isExt2($part) && isThisFs('ext3', { type => name2type($type) })) { + if (isExt2($part) && isThisFs('ext3', { type => $type })) { my $w = $in->wait_message('', _("Switching from ext2 to ext3")); if (run_program::run("tune2fs", "-j", devices::make($part->{device}))) { - $part->{type} = name2type($type); + $part->{type} = $type; $part->{isFormatted} = 1; #- assume that if tune2fs works, partition is formatted #- disable the fsck (don't do it together with -j in case -j fails?) @@ -514,8 +516,7 @@ sub Type { !isExt2($part) or $warn->() or return; if (defined $type) { - my $i_type = name2type($type); - fsedit::change_type(name2type($type), $hd, $part); + check_type($in, $type, $hd, $part) and fsedit::change_type($type, $hd, $part); } } @@ -920,9 +921,21 @@ sub partitions_suggestions { sub check_type { my ($in, $type, $hd, $part) = @_; eval { fsedit::check_type($type, $hd, $part) }; - my $err = $@; - $in->ask_warn('', $err) if $err; - !$err; + if (my $err = $@) { + $in->ask_warn('', $err); + return; + } + if ($::isStandalone) { + if (my $pkg = fsedit::package_needed_for_partition_type({ type => $type })) { + my $fs = type2fs({ type => $type }); + if (!-x "/sbin/mkfs.$fs") { + $in->ask_yesorno('', _("The package %s is needed. Install it?", $pkg), 1) or return; + $in->do_pkgs->install($pkg); + } + -x "/sbin/mkfs.$fs" or $in->ask_warn('', "Mandatory package $pkg is missing"), return; + } + } + 1; } sub check_mntpoint { my ($in, $mntpoint, $hd, $part, $all_hds) = @_; -- cgit v1.2.1