home *** CD-ROM | disk | FTP | other *** search
Text File | 2006-11-29 | 45.5 KB | 1,704 lines |
- /*
- *************************************************************
- *
- * YaST2 SuSE Labs -o)
- * -------------------- /\\
- * _\_v
- * www.suse.de / www.suse.com
- * ----------------------------------------------------------
- *
- * Author: Michael Hager <mike@suse.de>
- * Johannes Buchhold <jbuch@suse.de>
- *
- *
- * Description: Partitioner for experts.
- * include for dialogs
- *
- *************************************************************
-
- $Id: custom_part_dialogs.ycp 33576 2006-10-23 13:25:11Z fehr $
-
- */
- {
- textdomain "storage";
-
- import "Storage";
- import "Partitions";
- import "FileSystems";
- import "Mode";
- import "Arch";
- import "Label";
-
- //////////////////////////////////////////////////////////////////////////////
- // Dialog Password for Crypted FS
- //////////////////////////////////////////////////////////////////////////////
-
- include "partitioning/partition_defines.ycp";
- include "partitioning/custom_part_helptexts.ycp";
-
- include "partitioning/signatures.ycp";
-
-
- define string DlgCreateCryptFs( string device, integer minpwlen, boolean format )
- ``{
- string helptext = GetCreateCryptFsHelptext(minpwlen, format);
- y2milestone( "DlgCreateCryptFs minpwlen:%1 format:%2", minpwlen, format );
-
- // heading text
- string h = _("Enter your password for the encrypted file system");
-
- if( size(device)>0 )
- // heading text, %1 is replaced by device name (e.g. /dev/hda1)
- h = sformat( _("Password for Encrypted File System on %1"), device );
-
- UI::OpenDialog(
- `opt(`decorated ),
- `HBox(
- `HWeight(3, `RichText( helptext ) ),
- `HWeight(6, `VBox(
- `VSpacing(0.3),
- `HBox(
- `HSpacing(1),
- `Heading(h),
- `HSpacing(1)
- ),
- `VSpacing(4),
- `HBox(
- `HSpacing(4),
- `VBox(
- // label text
- `Label(_("Don't forget what you enter here!")),
- `VSpacing(),
-
- `HBox(
- `Password(`id("pw1"),
- // Label: get password for user root
- // Please use newline if label is longer than 40 characters
- _("&Enter a password for your file system:"), ""),
- `HSpacing(15)),
-
- `VSpacing(0.5),
-
- `HBox(
- `Password(`id("pw2"),
- // Label: get same password again for verification
- // Please use newline if label is longer than 40 characters
- _("Reenter the password for &verification:"), ""),
- `HSpacing(15))
- ),
- `HSpacing(4)
- ),
- `VSpacing(3),
- `HBox(
- // Ok button
- `PushButton(`id("ok"), `opt(`default), Label::OKButton()),
- // Cancel button
- `PushButton(`id("cancel"), Label::CancelButton())
- ),
- `VSpacing(0.5)
- )
- )
- ));
-
- string ret = "";
- boolean input_is_ok = false;
- string pw1 = "";
- string pw2 = "";
-
- repeat
- {
- // Clear password fields on every round.
- UI::ChangeWidget(`id("pw1"), `Value, "");
- UI::ChangeWidget(`id("pw2"), `Value, "");
-
- UI::SetFocus(`id("pw1"));
-
- ret = (string) UI::UserInput();
-
-
- if (ret != "cancel")
- {
- pw1 = (string)UI::QueryWidget(`id("pw1"), `Value);
- pw2 = (string)UI::QueryWidget(`id("pw2"), `Value);
-
- if ( pw1 != pw2 )
- {
- // popup text
- Popup::Message(_("The first and the second version\nof the password do not match!\nPlease try again."));
- }
- else if (pw1 == "")
- {
- // popup text
- Popup::Message(_("You did not enter a password.
- Try again.
- "));
- }
- else if (size (pw1) < minpwlen)
- {
- // popup text
- Popup::Message(sformat(_("The password must have at least %1 characters.
- Try again.
- "),minpwlen));
- }
- else if ( size(pw1) >= minpwlen )
- {
- any ret2 = findfirstnotof( pw1, "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ#* ,.;:._-+!$%&/|\?{[()]}@" );
-
- if ( ret2 != nil )
- {
- // popup text
- Popup::Message(_("The password may only contain the following characters:
- 0..9, a..z, A..Z, and any of \"@#* ,.;:._-+!$%&/|\?{[()]}\".
- Try again."));
- }
- else
- {
- input_is_ok = true;
- }
- }
- }
-
- } until ( input_is_ok || ret == "cancel" );
-
- UI::CloseDialog();
-
- if (ret == "cancel")
- {
- pw1 = "";
- }
- y2milestone( "DlgCreateCryptFs size(ret):%1", size(pw1) );
- return( pw1 );
- }
-
-
- //////////////////////////////////////////////////////////////////////////////
- // Dialog Password for Crypted FS Update
- //////////////////////////////////////////////////////////////////////////////
-
-
- define string DlgUpdateCryptFs( string device, string mount )
- ``{
- string helptext = GetUpdateCryptFsHelptext();
-
- // translator comment: %1 is the device name, %2 is a directory
- // example: "...password for device /dev/hda6 mounted on /var"
- string enter = sformat(_("Enter your crypt password for
- device %1 mounted on %2.
- "),device,mount);
-
- UI::OpenDialog(
- `opt(`decorated ),
- `HBox(
- `HWeight(3, `RichText( helptext ) ),
- `HWeight(6, `VBox(
- `VSpacing(0.3),
- `HBox(
- `HSpacing(1),
- // heading text
- `Heading(_("Enter your password for the encrypted file system")),
- `HSpacing(1)
- ),
- `VSpacing(2),
- `HBox(
- `HSpacing(4),
- `VBox(
- // advise user to remember his new password
- `Label(enter),
- `VSpacing(),
-
- `HBox(
- `Password(`id("pw1"),
- // Label: get password for user root
- // Please use newline if label is longer than 40 characters
- _("&Enter a password for your file system:"), ""),
- `HSpacing(15)),
- `VSpacing(0.5),
-
- `HBox(
- `Password(`id("pw2"),
- // Label: get same password again for verification
- // Please use newline if label is longer than 40 characters
- _("Reenter the password for &verification:"), ""),
- `HSpacing(15))
- ),
- `HSpacing(4)
- ),
- `VSpacing(2),
- `HBox(
- // Ok button
- `PushButton(`id("ok"), `opt(`default), Label::OKButton()),
- // Cancel button
- `PushButton(`id("cancel"), _("&Skip") )
- ),
- `VSpacing(0.5)
- )
- )
- ));
-
- string ret = "";
- boolean input_is_ok = false;
- string pw1 = "";
- string pw2 = "";
-
- repeat
- {
- // Clear password fields on every round.
- UI::ChangeWidget(`id("pw1"), `Value, "");
- UI::ChangeWidget(`id("pw2"), `Value, "");
-
- UI::SetFocus(`id("pw1"));
-
- ret = (string)UI::UserInput();
-
-
- if (ret != "cancel")
- {
- pw1 = (string)UI::QueryWidget(`id("pw1"), `Value);
- pw2 = (string)UI::QueryWidget(`id("pw2"), `Value);
-
- if ( pw1 != pw2 )
- {
- // popup text
- Popup::Message(_("The first and the second version\nof the password do not match!\nPlease try again."));
- }
- else if (pw1 == "")
- {
- // popup text
- Popup::Message(_("You did not enter a password.
- Try again.
- "));
- }
- else if ( size(pw1) >= 5 )
- {
- input_is_ok = true;
- }
- else
- {
- // popup text
- Popup::Message(sformat(_("The password must have at least %1 characters.
- Try again.
- "),5));
- }
- }
-
- } until ( input_is_ok || ret == "cancel" );
-
- UI::CloseDialog();
-
- if (ret != "cancel")
- {
- return( pw1 );
- }
- else
- {
- return( "" );
- }
-
- }
-
- define symbol DoInputChecks( map entry, string query )
- ``{
- symbol ret = `ok;
- list between = entry[`between]:[];
- string valid_chars = entry[`valid_chars]:"";
- integer str_length = entry[`str_length]:0;
-
- if( between != [] && (size(query)>0 || !entry[`empty_allowed]:false))
- {
- y2milestone( "DoInputChecks entry:%1 query:\"%2\"", entry, query );
- if( between[0]:0 > tointeger(query) ||
- ( (between[1]:0 != -1) && (between[1]:0 < tointeger(query) ) ) )
- {
- Popup::Error(entry[`error_text]:"");
- ret = `error;
- }
- }
-
- if( valid_chars != "" && size(query)>0 && ret != `error )
- {
- if( nil != findfirstnotof( query, valid_chars ))
- {
- Popup::Error(entry[`error_text]:"");
- ret = `error;
- }
- }
-
- if( str_length != 0 && size(query) > str_length && ret != `error )
- {
- Popup::Error(entry[`error_text]:"");
- ret = `error;
- }
- y2milestone( "DoInputChecks value %1 ret %2", query, ret );
- return( ret );
- }
-
- /**
- * Dialog: Filesystem options
- * @parm new_val map that contains a partition
- * @parm file_systems filesystem definitions
- */
- define map FileSystemOptions( map< any, map<string,any> > org_fs_options,
- map fs_define )
- ``{
- y2milestone( "FileSystemOptions org_fs_options %1", org_fs_options );
- map<any, map<string,any> > fs_options = org_fs_options;
- term contents = `VBox(`VSpacing (1));
- string helptext = "";
-
- foreach( map option, fs_define[`options]:[],
- ``{
- term emptyterm = `Empty();
- contents = add( contents, option[`widget]:emptyterm);
- string add_help = option[`help_text]:"";
- if( add_help != "")
- helptext = helptext + add_help ;
- });
-
- UI::OpenDialog( `opt(`decorated),
- `HBox(
- `HWeight(4, `RichText( helptext )),
- `HWeight(7,
- `VBox(
- `HSpacing(50),
- // heading text
- `Left(`Heading(_("File system options:"))),
- `VStretch(),
- `VSpacing(1),
- `HBox(
- `HStretch(),
- `HSpacing(1),
- contents,
- `HStretch(),
- `HSpacing(1)),
- `VSpacing(1),
- `VStretch(),
- `HBox(
- `Bottom(`PushButton(`id(`ok),
- `opt(`default),
- Label::OKButton())),
- `Bottom(
- `PushButton(`id(`cancel),
- Label::CancelButton())))
- ))));
-
- foreach(any query_key, map<string, any> option_map, fs_options,
- ``{
- UI::ChangeWidget( `id(query_key), `Value,
- option_map["option_value"]:(any)"" );
- });
-
- list<any> iglist = ["auto", "none", "default"];
- symbol ret = `ok;
- repeat
- {
- ret = (symbol)UI::UserInput();
- if( ret == `ok )
- {
- foreach( map entry, fs_define[`options]:[],
- ``{
- y2milestone( "FileSystemOptions entry %1", entry );
- if( ret != `error )
- {
- any query = UI::QueryWidget( `id(entry[`query_key]:nil),
- `Value );
- y2milestone( "FileSystemOptions query %1", query );
- map<string,any> fs_option =
- $[ "option_str" : entry[`option_str]:"",
- "option_value" : query ];
- y2milestone( "FileSystemOptions fs_option %1", fs_option );
-
- if( entry[`option_blank]:false )
- {
- fs_option["option_blank"] = true;
- }
-
- if( is( query, string) && !contains( iglist, query ))
- {
- ret = DoInputChecks( entry, (string)query );
- }
-
- if( ret!=`error )
- {
- if( query!=entry[`default]:nil &&
- !contains( iglist, query ))
- {
- fs_options[entry[`query_key]:nil] = fs_option;
- }
- else if( haskey( fs_options, entry[`query_key]:nil ))
- {
- fs_options = remove( fs_options,
- entry[`query_key]:nil );
- }
- }
- y2milestone( "FileSystemOptions fs_options %1", fs_options );
- }
- });
- }
- } until ( ret == `ok || ret == `cancel );
-
- UI::CloseDialog();
-
- if( ret != `ok )
- fs_options = org_fs_options;
- y2milestone("FileSystemOptions ret %1", fs_options );
- return( fs_options );
- }
-
- void PopupNoSlashLabel()
- {
- // popup text
- Popup::Error( _("The character '/' is no longer permitted in a volume label.
- Change your volume label so that it does not contain this character.
- "));
- }
-
- /**
- * Dialog: Fstab options
- * @parm old map with original partition
- * @parm new map with changes filled in
- */
- define map<string,any> FstabOptions( map<string,any> old, map<string,any> new )
- ``{
- string helptext = "";
- term contents = `VBox();
- term emptyterm = `Empty();
-
- if( new["enc_type"]:`none==`none) // && new["mount"]:"" != "swap" )
- {
- // help text, richtext format
- helptext = helptext + _("<p><b>Mount in /etc/fstab By:</b>
- Normally, a file system to mount is identified in /etc/fstab
- by the device name. This identification can be changed so the file system to mount
- is found by searching for a UUID or a volume label. Not all file systems can be
- mounted by UUID or a volume label. If an option is disabled, it is not possible.
- ");
-
- // help text, richtext format
- helptext = helptext + _("<p><b>Volume Label:</b>
- The name entered in this field is used as the volume label. This normally only
- makes sense when you activate the option for mounting by volume label.
- A volume label cannot contain the / character or spaces.
- ");
-
- contents = add( contents,
- `VBox(
- `RadioButtonGroup(
- `id(`mt_group),
- `VBox(
- // label text
- `Left( `Label(_("Mount in /etc/fstab by"))),
- `HBox(
- `VBox(
- `Left( `RadioButton( `id(`device),
- // label text
- _("&Device name") )),
- `Left( `RadioButton( `id(`label),
- // label text
- _("Volume &label") )),
- `Left( `RadioButton( `id(`uuid),
- // label text
- "U&UID" ))
- ),
- `Top(`VBox(
- `Left( `RadioButton( `id(`id),
- // label text
- _("Device &ID") )),
- `Left( `RadioButton( `id(`path),
- // label text
- _("Device &Path") ))
- ))
- )
- )
- ),
- `TextEntry( `id(`vol_label), `opt(`hstretch),
- // label text
- _("Volume &Label")),
- `VSpacing(1)
- ));
- }
- list<map> opt_list = [];
- if( new["mount"]:"" != "swap" )
- {
- foreach( map entry, FileSystems::GetGeneralFstabOptions(),
- ``{
- opt_list = add( opt_list, entry );
-
- contents = add( contents, entry[`widget]:emptyterm );
- helptext = helptext + entry[`help_text]:"";
- });
- contents = add( contents, `VSpacing(1) );
- }
- foreach( map entry, FileSystems::GetFstabOptWidgets( new["used_fs"]:`ext2 ),
- ``{
- opt_list = add( opt_list, entry );
- contents = add( contents, entry[`widget]:emptyterm );
- helptext = helptext + entry[`help_text]:"";
- });
- contents = add( contents, `VSpacing(1) );
- map entry = FileSystems::GetArbitraryOptionField();
- opt_list = add( opt_list, entry );
- contents = add( contents, entry[`widget]:emptyterm );
- helptext = helptext + entry[`help_text]:"";
-
- string fstopt = deletechars( new["fstopt"]:"", " \t" );
- if( fstopt == "defaults" )
- fstopt = "";
-
- list<string> opt_lstr = splitstring( fstopt, "," );
- map old_state = $[];
- integer pos = 0;
- foreach( map opt, opt_list,
- ``{
- if( opt[`type]:`text == `boolean )
- {
- boolean value = opt[`default]:false;
- pos = 0;
- while( pos < size(opt_lstr) )
- {
- foreach( list list_el, opt[`str_scan]:[],
- ``{
- if( list_el[0]:""==opt_lstr[pos]:"" )
- {
- value = list_el[1]:0 == 1;
- opt_lstr[pos] = "";
- }
- });
- pos = pos + 1;
- }
- old_state[opt[`query_key]:""] = value;
- }
- else
- {
- string value = opt[`default]:"";
- integer pos = 0;
- while( pos < size(opt_lstr) )
- {
- if( size(opt[`str_scan]:"")>0 &&
- regexpmatch( opt_lstr[pos]:"", opt[`str_scan]:"" ))
- {
- value = regexpsub( opt_lstr[pos]:"",
- opt[`str_scan]:"", "\\1" );
- opt_lstr[pos] = "";
- }
- pos = pos + 1;
- }
- old_state[opt[`query_key]:""] = value;
- }
- });
-
- pos = size(opt_lstr)-1;
- while( pos>=0 )
- {
- if( size(opt_lstr[pos]:"")==0 )
- {
- opt_lstr = remove( opt_lstr, pos );
- }
- pos = pos - 1;
- };
- y2milestone( "FstabOptions key=%1 val:%2",
- opt_list[size(opt_list)-1,`query_key]:"",
- mergestring( opt_lstr, "," ) );
- string arb_opt = mergestring( opt_lstr, "," );
- if( !new["noauto"]:false && new["enc_type"]:`none!=`none )
- {
- arb_opt = FileSystems::RemoveCryptOpts( arb_opt );
- }
-
- old_state[opt_list[size(opt_list)-1,`query_key]:""] = arb_opt;
- y2milestone( "FstabOptions old_state=%1", old_state );
-
- UI::OpenDialog( `opt(`decorated),
- `HBox(
- `HWeight(4, `RichText( helptext )),
- `HWeight(7,
- `VBox(
- `HSpacing(50),
- // heading text
- `Left(`Heading(_("Fstab options:"))),
- `VStretch(),
- `VSpacing(1),
- `HBox(`HStretch(),
- `HSpacing(1),
- contents,
- `HStretch(),
- `HSpacing(1)),
- `VSpacing(1),
- `VStretch(),
- `HBox(
- `Bottom(`PushButton(`id(`ok),
- `opt(`default),
- Label::OKButton())),
- `Bottom(`PushButton(`id(`cancel),
- Label::CancelButton()))
- )
- )
- )
- )
- );
- if( UI::WidgetExists( `id(`mt_group) ))
- {
- list no_mountby_type = [ `loop ];
- list mountby_id_path_type = [ `primary, `logical ];
- UI::ChangeWidget( `id(`mt_group), `CurrentButton,
- new["mountby"]:`device );
- UI::ChangeWidget( `id(`label), `Enabled,
- FileSystems::MountLabel( new["used_fs"]:`unknown ) &&
- new["enc_type"]:`none==`none &&
- !contains( no_mountby_type, new["type"]:`primary ) );
- UI::ChangeWidget( `id(`uuid), `Enabled,
- (new["format"]:false || size(new["uuid"]:"")>0) &&
- FileSystems::MountUuid( new["used_fs"]:`unknown ) &&
- !contains( no_mountby_type, new["type"]:`primary ) );
- UI::ChangeWidget( `id(`id), `Enabled, contains(mountby_id_path_type, new["type"]:`none) );
- UI::ChangeWidget( `id(`path), `Enabled, contains(mountby_id_path_type, new["type"]:`none) );
- }
-
- if( UI::WidgetExists( `id(`vol_label) ))
- {
- UI::ChangeWidget( `id(`vol_label), `Enabled,
- FileSystems::MountLabel( new["used_fs"]:`unknown ) &&
- new["enc_type"]:`none==`none );
- UI::ChangeWidget( `id(`vol_label), `ValidChars,
- FileSystems::nchars + "-._:/" );
- UI::ChangeWidget( `id(`vol_label), `Value, new["label"]:"" );
- }
-
- y2milestone( "FstabOptions Exists opt_user %1",
- UI::WidgetExists( `id("opt_user")));
- y2milestone( "FstabOptions new=%1", new );
- if( UI::WidgetExists( `id("opt_user") ))
- {
- UI::ChangeWidget( `id("opt_user"), `Enabled,
- new["enc_type"]:`none==`none || new["noauto"]:false );
- }
- foreach( any key, any value, old_state,
- ``{
- UI::ChangeWidget( `id(key), `Value, value );
- });
-
- any ret = `ok;
- repeat
- {
- ret = UI::UserInput();
- y2milestone( "FstabOptions ret %1", ret );
- if( ret == "opt_noauto" )
- {
- if( UI::WidgetExists( `id("opt_user") ))
- {
- boolean val = (boolean)UI::QueryWidget( `id("opt_noauto" ), `Value );
- UI::ChangeWidget( `id("opt_user"), `Enabled,
- new["enc_type"]:`none==`none || val );
- }
- }
- if( ret == `ok )
- {
- if( UI::WidgetExists( `id(`mt_group) ))
- {
- new["mountby"] = UI::QueryWidget( `id(`mt_group),
- `CurrentButton );
- if( !new["format"]:false && !new["create"]:false &&
- new["mountby"]:`device != old["mountby"]:`device )
- {
- if( !haskey( new, "ori_mountby" ) )
- new["ori_mountby"] = old["mountby"]:`device;
- }
- new["label"] = UI::QueryWidget( `id(`vol_label), `Value );
- if( new["label"]:"" != old["label"]:"" )
- {
- integer max_len =
- FileSystems::LabelLength( new["used_fs"]:`unknown );
- if( size(new["label"]:"") > max_len )
- {
- new["label"] = substring( new["label"]:"", 0, max_len );
- // popup text %1 is a number
- Popup::Error( sformat(_("
- Maximum volume label length for the selected file system
- is %1. Your volume label was truncated to this size.
- "), max_len ));
- }
- if( search(new["label"]:"","/")!=nil )
- {
- PopupNoSlashLabel();
- ret = `again;
- }
- if( !new["format"]:false && !new["create"]:false &&
- !haskey( new, "ori_label" ) )
- {
- new["ori_label"] = old["label"]:"";
- }
- }
- if( new["mountby"]:`device == `label && size(new["label"]:"")==0 )
- {
- ret = `again;
- // popup text
- Popup::Error( _("Provide a volume label to mount by label."));
- continue;
- }
- if( new["mountby"]:`device == `label &&
- !check_unique_label( Storage::GetTargetMap(), new ))
- {
- ret = `again;
- // popup text
- Popup::Error( _("This volume label is already in use. Select a different one."));
- continue;
- }
- if( new["mountby"]:`device == `label &&
- search(new["label"]:"","/")!=nil )
- {
- ret = `again;
- PopupNoSlashLabel();
- continue;
- }
- }
- if( UI::WidgetExists( `id("opt_noauto") ))
- {
- new["noauto"] = UI::QueryWidget( `id("opt_noauto"), `Value );
- }
- map new_state = $[];
- string text = "";
- string new_fstopt = "";
- foreach( map entry, opt_list,
- ``{
- text = "";
- any value = UI::QueryWidget( `id(entry[`query_key]:""),
- `Value );
- new_state[entry[`query_key]:""] = value;
- if( entry[`type]:`text == `boolean )
- {
- text = entry[`str_opt,"default"]:"";
- if( value == true && haskey( entry[`str_opt]:$[], 1 ))
- {
- text = entry[`str_opt,1]:"";
- }
- else if( value == false && haskey( entry[`str_opt]:$[], 0 ))
- {
- text = entry[`str_opt,0]:"";
- }
- }
- else
- {
- if( DoInputChecks( entry, (string)value ) != `ok )
- {
- ret = `again;
- }
- else if( size((string)value)>0 )
- {
- text = sformat( entry[`str_opt]:"%1", value );
- }
- /* this is the default journal mode, no option needed for it */
- if( text == "data=ordered" )
- {
- text = "";
- }
- }
- if( size(text)>0 )
- {
- if( size(new_fstopt)>0 )
- new_fstopt = new_fstopt + ",";
- new_fstopt = new_fstopt + text;
- }
- });
- y2milestone( "FstabOptions new_state=%1", new_state );
- y2milestone( "FstabOptions old_fstopt=%1 new_fstopt=%2",
- old["fstopt"]:"", new_fstopt );
- if( old_state!=new_state && old["fstopt"]:"" != new_fstopt )
- {
- if( !new["format"]:false && !new["create"]:false &&
- !haskey( new, "ori_fstopt" ) )
- {
- new["ori_fstopt"] = old["fstopt"]:"";
- }
- new["fstopt"] = new_fstopt;
- }
- if( !CheckFstabOptions( new ))
- {
- new["fstopt"] = old["fstopt"]:"";
- ret = `again;
- }
- }
- } until ( ret == `ok || ret == `cancel );
-
- UI::CloseDialog();
- y2milestone( "FstabOptions fstopt %1 mountby:%2 label:%3",
- new["fstopt"]:"", new["mountby"]:`device,
- new["label"]:"" );
- return( new );
- };
-
-
- /**
- * Dialogpart: Filesystem
- * @parm new_val map that contains a partition
- * @parm file_systems filesystem definitions
- * @return term the term contains a ComboBox with the different filesystems
- */
- define term FileSystemsComboBox( map new_val, map<symbol,map> file_systems )
- ``{
- map<symbol,map> fs_sel = $[];
- list filesystems = [ ];
- boolean is_swap = new_val["fsid"]:0 == Partitions::fsid_swap;
-
- y2debug( "new=%1 swap=%2", new_val, is_swap );
- foreach( symbol file_system_name, map file_system_map, file_systems,
- ``{
- if( file_system_map[`supports_format]:false )
- {
- fs_sel[file_system_name] = $[];
- fs_sel[file_system_name,"text"] = file_system_map[`name]:"Ext2";
- if( is_swap )
- fs_sel[file_system_name,"selected"] = file_system_name == `swap;
- else
- fs_sel[file_system_name,"selected"] =
- new_val["used_fs"]:Partitions::DefaultFs() == file_system_name;
- }
- });
- y2debug( "fs_sel=%1", fs_sel );
- if( haskey( fs_sel, Partitions::DefaultFs() ) &&
- size(filter( any k, map e, fs_sel, ``(e["selected"]:false) ))==0 )
- {
- fs_sel[Partitions::DefaultFs(),"selected"] = true;
- }
- foreach( symbol fs_type, map entry, fs_sel,
- ``{
- if( fs_type != `swap )
- filesystems = add( filesystems,
- `item(`id(fs_type), entry["text"]:"Ext2", entry["selected"]:false ));
- });
- if( haskey( fs_sel, `swap ))
- {
- filesystems = add( filesystems,
- `item( `id(`swap), fs_sel[`swap,"text"]:"Swap",
- fs_sel[`swap,"selected"]:false ));
- }
-
- term CryptWidget = `Empty();
- if( !Arch::s390 () )
- {
- boolean cr = new_val["enc_type"]:`none != `none;
- CryptWidget = `VBox( `VSpacing(0.7),
- `Left(`CheckBox(`id(`crypt_fs), `opt(`notify),
- // button text
- _("&Encrypt file system"), cr )));
- }
-
- return `VBox(
- `ReplacePoint( `id(`type_dlg_rp),
- `ComboBox(`id(`fs), `opt(`hstretch, `notify),
- // label text
- _("File &system"), filesystems )),
- `PushButton( `id(`fs_options ),`opt(`hstretch),
- // button text
- _("O&ptions") ),
- CryptWidget );
- }
-
- /**
- * Dialogpart: Filesystem ID
- * @parm new_val map that contains a partition
- * @parm file_systems filesystem definitions
- * @return term the term contains a ComboBox that allow the user to edit the filesystem ID
- */
- define term FsidComboBox( map new_val, map<symbol, map> file_systems )
- ``{
- list items = [];
- list added_items = [];
- list added_fsids = [];
- foreach( any fs_name, map fs_map, file_systems,
- ``{
- string fsid_item = fs_map[`fsid_item]:" ";
- if( !contains( added_items, fsid_item ))
- {
- items = add( items,
- `item( `id(fsid_item), fsid_item,
- fs_map[`fsid]:0 == new_val["fsid"]:0));
- added_fsids = add( added_fsids, fs_map[`fsid]:0 );
- added_items = add( added_items, fsid_item );
- }
- });
-
- integer id = new_val["fsid"]:0;
- if( id != 0 && !contains( added_fsids, id ) )
- {
- string part_id = Partitions::ToHexString(id) + " " +
- Partitions::FsIdToString(id);
- items = add( items, `item( `id(part_id), part_id, true ));
- }
-
- return( `ComboBox(`id(`fsid_point), `opt(`notify,`editable, `hstretch),
- // label text
- _("File system &ID:"), items ));
- };
-
-
- /**
- * Dialogpart: Size Dialog
- * @parm new_val map that contains a partition
- *รก@parm edit_size flag
- * @return term the term contains two TextEntries or to Labels with the start and the end cylinder of
- * the partition in new_val
- */
- define term SizeDlg( map new_val, integer cyl_size, boolean edit_size, boolean disk )
- ``{
- string start_cyl = sformat( "%1", new_val["region",0]:0 );
- string end_part = sformat( "%1", (integer)(new_val["region",0]:0) +
- (integer)(new_val["region",1]:1) -1 );
-
- float mb_cyl_size = ( tofloat(cyl_size) /1024.0 /1024.0 );
- string str_cyl_size = substring( sformat( "%1", mb_cyl_size ), 0, 4);
-
-
- if( new_val["create"]:false && edit_size )
- {
- // label text
- return `Frame ( _("Size"),
- `VBox(
- // label text
- `Left(`Label(_("Cylinder size: ")+ str_cyl_size + " M" )),
- `VSpacing(0.5),
- // label text
- `TextEntry(`id(`start_cyl), _("S&tart cylinder:"), start_cyl ),
- `VSpacing(0.5),
- // label text
- `TextEntry(`id(`end_part), _("En&d: (9 or +9M or +3.2GB)"), end_part)
- )
- );
- }
- else if( disk )
- {
- return (
- `HBox(
- // label text
- `Left(`Label( _("Type of partition: ")
- // label text
- + _("\nStart cylinder:")
- // label text
- + _("\nEnd cylinder: ") )),
- `Left(`Label( new_val["fstype"]:""
- + "\n " + start_cyl
- + "\n " + end_part ))
- ));
- }
- else
- return( `Empty() );
- }
-
-
- define term FormatDlg( map new_val, map<symbol, map> file_systems )
- ``{
- y2debug( "FormatDlg val:%1", new_val );
-
- term fsid = `Empty();
-
- if( new_val["type"]:`primary != `lvm &&
- new_val["type"]:`primary != `sw_raid &&
- new_val["type"]:`primary != `evms &&
- new_val["type"]:`primary != `loop && !Partitions::no_fsid_menu )
- {
- fsid = `VBox(
- `HBox( `HSpacing(2),
- `ReplacePoint( `id(`fsid_dlg_rp),
- FsidComboBox( new_val, file_systems ))
- ),
- `VSpacing(0.5),
- `VStretch()
- );
- }
- else
- {
- fsid = `VSpacing(0.5);
- }
-
- // label text
- return `Frame (substring(_("2:Format"),2),
- `RadioButtonGroup(`id(`format),
- `VBox(
- `VSpacing(1),
- // button text
- `Left(`RadioButton(`id(`format_false), `opt(`notify),
- _("Do ¬ format"), !new_val["format"]:false )),
- fsid,
- `Left(`RadioButton(`id(`format_true), `opt(`notify),
- // button text
- _("&Format"), new_val["format"]:false )),
- `HBox(
- `HSpacing(2),
- FileSystemsComboBox( new_val, file_systems )),
- `VSpacing(0.5)
- )));
-
-
- }
-
-
-
- define term RaidOptionsDlg( map new_val, boolean edit_raid_type )
- ``{
- integer chunk_size = new_val["chunk_size"]:0;
- string parity_algorithm = new_val["parity_algorithm"]:"left_asymmetric";
- string raid_type = new_val["raid_type"]:"raid1";
- term editRaid = `VSpacing(1);
-
- // 4KB .. 4096KB
- list chunk_list = [];
- integer i = 4;
- while( i <= 4096 )
- {
- integer chunk_item = i;
- chunk_list = add( chunk_list,
- `item(`id(chunk_item), tostring(chunk_item),
- chunk_size==chunk_item ));
- i = i*2;
- }
-
- if( edit_raid_type )
- {
- editRaid = `VBox(
- `VSpacing(),
- `Left (`ComboBox( `id(`raid_combo),
- `opt(`notify, `hstretch ),
- // button text
- _("RAID T&ype"),
- [ `item(`id("raid0"), "raid0",
- "raid0"==raid_type ),
- `item(`id("raid1"), "raid1",
- "raid1"==raid_type ),
- `item(`id("raid5"), "raid5",
- "raid5"==raid_type ),
- `item(`id("multipath"), "multipath",
- "multipath"==raid_type )
- ])),
- `VSpacing()
- );
- }
-
- return `VSquash(
- `VBox(
- editRaid,
- // Raid combobox description (don't translate to much ..)
- `Left (`ComboBox ( `id(`chunk_size),`opt(`hstretch ), _("Chunk s&ize in KB"), chunk_list )),
- `VSpacing (),
- // Raid combobox description (don't translate to much ..)
- `Left (`ComboBox ( `id(`parity),`opt(`hstretch ), _("Parity &algorithm (only for RAID 5)"),
- [ `item(`id("left_asymmetric"), "left-asymmetric", "left_asymmetric" == parity_algorithm ),
- `item(`id("left_symmetric"), "left-symmetric", "left_symmetric" == parity_algorithm ),
- `item(`id("right_asymmetric"), "right-asymmetric", "right_asymmetric" == parity_algorithm ),
- `item(`id("right_symmetric"), "right-symmetric", "right_symmetric" == parity_algorithm )
- ])),
- `VSpacing ()
- ));
-
- }
-
- define term LoopOptionsDlg( string pb, string cb, string sb )
- ``{
- term widget =
- `VSquash(
- `VBox(
- `VSpacing(),
- `Left( `TextEntry( `id(`loop_path), `opt(`notify), pb )),
- `VSpacing(1),
- `Left( `CheckBox( `id(`loop_create), `opt(`notify), cb )),
- `Left( `TextEntry( `id(`loop_size), `opt(`notify), sb )),
- `VSpacing()
- ));
- return widget;
- }
-
- /**
- * Change the state of all symbol from the list symbols
- * @parm symbols all symbols
- * @parm what true or false
- * @return nil
- */
- define void ChangeExistingSymbolsState( list symbols , boolean what )
- ``{
- foreach( any sym, symbols, ``{
- UI::ChangeWidget(`id(sym), `Enabled, what );
- });
- }
-
-
- /**
- * Return a map with the filesystem definitions for the map new_val
- * @parm new_val map that contains a partition
- * @parm file_systems filesystem definitions
- * @return map
- */
- define map GetFirstFilesystemDefinition( integer fsid, map<symbol,map> file_systems )
- ``{
- map<symbol,map> define_map = filter( symbol key, map val, file_systems,
- ``(fsid == val[`fsid]:Partitions::fsid_native ));
- list<map> define_list = maplist( symbol k, map v , define_map, ``( v ));
- if( size( define_list ) == 0)
- return $[];
- else
- return define_list[0]:$[];
- }
-
-
- /**
- * Dialogpart: Mount part
- * @parm new_val map that contains a partition
- * @parm file_systems filesystem definitions
- * @return term ComboBox with all mountpoints
- */
- define term MountDlg( map new_val, list mountpoints )
- ``{
- if( mountpoints == nil )
- mountpoints = [ "/", "/usr", Partitions::BootMount(), "/var", "/home",
- "/opt" , ""];
-
- if( !contains( mountpoints, "" ) && new_val["enc_type"]:`none==`none )
- mountpoints = add( mountpoints , "");
- string mount = new_val["mount"]:"";
-
- if( !contains( mountpoints, mount ))
- mountpoints = union( [mount], mountpoints);
-
- term dlg = `VBox(
- `PushButton( `id(`fstab_options), `opt(`hstretch),
- // button text
- _("Fs&tab Options")),
- `VSpacing(1),
- `ComboBox(`id(`mount_point), `opt(`editable, `hstretch),
- // label text
- _("&Mount Point"), mountpoints )
- );
- // return term
- return ( dlg );
- }
-
-
-
-
- define boolean UseChangedPartitionContinueCancelPopup()
- ``{
- // popup text
- if( Popup::ContinueCancel(_("You have changed the parameters of a partition currently
- mounted. In some cases, this can damage your Linux installation.
-
- Proceed only if you know what you are doing. If you are unsure,
- press Cancel.
-
- ")))
- return true;
-
- return false;
- };
-
- define boolean ModifyPartitionInSystemWarningPopup( string part, string mount )
- ``{
-
- // popup text %1 is a partition name, %2 a dirctory
- string warning = sformat(_("
- The selected partition (%1) is currently mounted on %2.
- If you change parameters (such as the mount point or the file system type),
- your Linux installation might be damaged.
-
- Unmount the partition if possible. If you are unsure,
- it is recommended to abort. Do not proceed unless you know
- exactly what you are doing.
-
- Continue?
- "), part, mount );
-
- boolean ret = false;
-
- ret = Popup::YesNo( warning );
-
- return( ret );
- };
-
-
- define string AddLvm( boolean lvm, string txt )
- ``{
- txt = sformat( txt, lvm ? _("logical volume") : _("partition") );
- return( txt );
- }
-
- define boolean FsysCannotShrinkPopup( boolean ask, boolean lvm )
- ``{
- boolean ret = true;
- // Popup text
- // %1 is either replaced by "logical volume" or by "partition"
- string txt = AddLvm( lvm, _("
- The file system on the %1 cannot be shrunk by YaST2.
- Only fat, ext2, ext3, and reiser allow shrinking of a file system."));
- if( ask )
- {
- txt = txt + "\n";
- txt = txt + AddLvm( lvm,
- // Popup text
- // %1 is either replaced by "logical volume" or by "partition"
- _("You risk losing data if you shrink this %1."));
- txt = txt + "\n\n";
- txt = txt + _("Continue?");
- }
- if( ask )
- {
- ret = Popup::YesNo( txt );
- }
- else
- {
- Popup::Error( txt );
- ret = false;
- }
- return( ret );
- }
-
- define boolean FsysCannotGrowPopup( boolean ask, boolean lvm )
- ``{
- boolean ret = true;
- // Popup text
- // %1 is either replaced by "logical volume" or by "partition"
- string txt = AddLvm( lvm, _("
- The file system on the selected %1 cannot be extended by YaST2.
- Only fat, ext2, ext3, xfs, and reiser allow extending a file system."));
- if( ask )
- {
- txt = txt + "\n\n";
- // Popup text
- // %1 is either replaced by "logical volume" or by "partition"
- txt = txt + AddLvm( lvm, _("Continue resizing the %1?"));
- }
- if( ask )
- {
- ret = Popup::YesNo( txt );
- }
- else
- {
- Popup::Error( txt );
- ret = false;
- }
- return( ret );
- }
-
- define void FsysCannotResizeMountPopup( boolean lvm, string mount )
- ``{
- // %1 is either replaced by "logical volume" or by "partition"
- string txt = sformat( _("
- The %1 is currently mounted on %2.
- It is not possible to resize the file system while it is mounted.
-
- Unmount the file system and retry resizing.
- "),
- AddLvm( lvm, "%1"), mount );
- Popup::Error( txt );
- }
-
- define boolean FsysShrinkReiserWarning( boolean lvm )
- ``{
- boolean ret = true;
- // Popup text
- // %1 is either replaced by "logical volume" or by "partition"
- ret = Popup::YesNo( AddLvm( lvm, _("
- You decreased a %1 with a reiser file system on it.
- It is possible to shrink a reiser file system, but this feature is not
- very thoroughly tested. A backup of your data is recommended.
-
- Shrink the file system now?")));
- return( ret );
- }
-
-
- /**
- * Scan exiting partitions for fstab files and if one found read the mountpoints
- * from the fstab file and build a new targetMap.
- * Ask the user if he like to use the new or old targetMap
- * (with or without found mountpoints)
- *------------------------------------
- * @parm targetMap all targets
- * @parm installation !!
- * @parm file_systems filesystems definition map
- * @return targetMap new or unmodified targetMap
- *---------------------------------------------------------------------
- */
- define integer FstabAddDialog( list table_input )
- ``{
- y2milestone( "FstabAddDialog start %1", table_input );
- if( table_input == [] || table_input == nil )
- {
- // popup text
- Popup::Message(_("No previous system with mount points was detected."));
- return -1;
- }
-
- // heading text
- term header = `header( _("Device "), _("Mount "));
-
- // help text, richtext format
- string help_text = _("<P><B><BIG>Attention:</BIG></B><BR>YaST2 has scanned your hard disks and found an old Linux system
- with mount points. On the right, see a list with the mount points found. </P>
- ")+
- // help text, richtext format
- _("<P>To use these mount points, <BR>press <B>Yes</B>.</P>")+
- // help text, richtext format
- _("<P>To ignore these mount points, <BR> press <B>No</B>.</P>");
-
- UI::OpenDialog(
- `opt(`decorated ),
- `HBox(
- `VBox( `HSpacing(20), `RichText(help_text)),
- `VBox( `VSpacing(1),
- `ReplacePoint( `id(`heading), `Empty() ),
- `HBox(
- `HSpacing(3.0),
- `VSpacing(8),
- `VBox( `VSpacing(1),
- `Table(`id(`table), header, [] )
- ),
- `HSpacing(3.0)
- ),
-
- `VSpacing(1),
- // popup text
- `Heading(_("Would you like to use these mount points
- for your new installation?")),
- `VSpacing(1),
- `ReplacePoint( `id(`bbox), `Empty() )
- ))
- );
-
- symbol userinput = `none;
- integer idx = 0;
- repeat
- {
- // popup text %1 is replaced by a device name (e.g. /dev/hda1)
- string tmp = sformat(
- _("A previous system with the following mount points was detected:
- /etc/fstab found on %1"), table_input[idx,"root"]:"/dev/emil" );
- UI::ReplaceWidget( `id(`heading), `Heading( tmp ) );
-
- UI::ChangeWidget( `id(`table), `Items, table_input[idx,"tbl"]:[] );
-
- term bbox = `HBox( `PushButton( `id(`ok), `opt(`default),
- Label::YesButton() ),
- `PushButton(`id(`cancel), Label::NoButton())
- );
- if( size(table_input)>0 )
- {
- bbox = add( bbox, `HSpacing(5) );
- if( idx>0 )
- {
- bbox = add( bbox,
- `PushButton( `id(`show_p), _("Show &Previous") ));
- }
- if( idx<size(table_input)-1 )
- {
- bbox = add( bbox,
- `PushButton( `id(`show_n), _("Show &Next") ));
- }
- }
- y2milestone( "userinput UI::ReplaceWidget" );
- UI::ReplaceWidget( `id(`bbox), bbox );
- y2milestone( "after UI::ReplaceWidget" );
-
- userinput = (symbol)UI::UserInput();
- y2milestone( "userinput %1", userinput );
-
- if( userinput == `show_n )
- {
- idx = idx+1;
- }
- else if( userinput == `show_p )
- {
- idx = idx-1;
- }
- y2milestone( "idx %1", idx );
- }
- until( userinput == `ok || userinput == `cancel );
- UI::CloseDialog();
-
- integer ret = userinput == `ok ? idx : -1;
- y2milestone( "ret %1", ret );
- return ret;
- };
-
-
- define term TargetShowBarGraph( map target, string dev )
- ``{
- list partitions_size = [];
- list partitions_text = [];
- integer sum_used = 0;
- integer cyl_size = target["cyl_size"]:1;
- integer cyl_count = target["cyl_count"]:1;
- integer min_size = tointeger( cyl_count / 8 );
-
-
- y2milestone( " target %1" ,target );
- y2milestone( " parts %1", target["partitions"]:[] );
-
- foreach( map part, target["partitions"]:[],
- ``{
- if( part["type"]:`primary != `extended )
- {
- integer part_size = part["region",1]:0;
- string part_size_str = "";
-
- part_size_str = ByteToHumanString(part_size * cyl_size);
-
- sum_used = sum_used + part_size;
- if( part_size < min_size )
- part_size = min_size;
-
- partitions_size = add( partitions_size , part_size);
-
- string part_text = part["mount"]:"";
-
- if( part_text == "" || part_text == nil )
- part_text = dev + sformat("%1", part["nr"]:(any)0);
-
- part_text = part_text + "\n" + part_size_str;
-
- partitions_text = add( partitions_text, part_text );
- }
- });
-
- integer free = cyl_count - sum_used;
-
- if( free > 0 )
- {
- if( free > min_size )
- partitions_size = add( partitions_size, free );
- else partitions_size = add( partitions_size, min_size );
- // label text
- partitions_text = add( partitions_text, _("free"));
- }
-
- if( Mode::test () )
- {
- y2milestone(" partitions_size : %1", partitions_size);
- y2milestone(" partitions_text : %1", partitions_text);
- }
-
- return `BarGraph(`opt(`vstretch), partitions_size , partitions_text );
- };
-
-
-
- define boolean TargetAllocationDlg( map target, string dev)
- ``{
- if( ! UI::HasSpecialWidget(`BarGraph) )
- {
- // %1 is a disk device, example: You have selected the disk /dev/hda, but can only edit a partition like /dev/hda11, /dev/hda2,
- Popup::Warning(sformat(_("\n You have selected the disk %1, but you can \n only edit a partition like %11, %12, ... \n"), dev));
- }
- else
- {
- UI::OpenDialog(`opt(`decorated ),
- `VBox(
- `VSpacing(1),
- `Left( `Heading( dev + ":")),
- `VSpacing(1),
- `VStretch(),
- `HSpacing(80),
- TargetShowBarGraph(target ,dev),
- `VStretch(),
- `VSpacing(1),
- `HBox(
- `PushButton(`id(`close), Label::CloseButton() )
- )
- ));
-
- UI::UserInput();
- UI::CloseDialog();
- }
-
- return true;
- };
-
-
-
-
- define boolean DDZeroPartitionTable( string del_dev )
- ``{
- // popup text
- if( Popup::YesNo(sformat(_("CAUTION
- If you delete the partition table and disk label of
- device %1, data on this device will be lost.
-
- Really do this?
- "), del_dev)))
- {
- Storage::DeletePartitionTable(del_dev);
- return true;
- }
- return false;
- };
-
-
- define symbol ReallyInstPrepdisk( )
- ``{
- map<string,map> targetMap = Storage::GetTargetMap();
- symbol ret = `none;
-
- string doto = Storage::ChangeText();
- y2milestone( "ReallyInstPrepdisk doto:%1", doto );
- term dlg = `Empty();
- if( size(doto) == 0 )
- {
- // popup text
- Popup::Message( _("No changes made so far could be performed."));
- ret = `back;
- }
- else
- {
- dlg = `VBox( `VSpacing(1),
- `HSpacing(60),
- // label text
- `Left(`Heading(_("Changes:"))),
- `RichText( doto ) );
-
- UI::OpenDialog(`opt(`decorated, `warncolor),
- `HBox(
- `HSpacing(1),
- `VBox(
- dlg,
- `VSpacing(1),
- // popup text
- `Heading(_(" Do you really want to execute these changes?")),
- `VSpacing(1),
-
- `HBox(
- // all right, start installation *now*
-
- `PushButton(`id(`back), Label::CancelButton()),
- `HStretch(),
- // button text
- `PushButton(`id(`apply), _("&Apply")),
- `PushButton(`id(`finish), Label::FinishButton() )
- // no, don't go on, i just changed my mind
- ),
- `VSpacing(0.2)
- ),
- `HSpacing(1)
- )
- );
-
- ret = (symbol)UI::UserInput();
- UI::CloseDialog();
- }
-
- y2milestone( "ReallyInstPrepdisk ret=%1", ret );
-
- return ret;
- };
-
-
- /**
- * Delete all partition in targetMap from the device "del_dev" and return
- * a new targetMap.
- * Check if LVM partition exists on the device.
- * Check if at least on partition is mounted.
- * @return map targetMap
- */
- define boolean deleteAllDevPartitions( map<string, any> disk,
- boolean installation, boolean bsd_label )
- ``{
- boolean go_on = true;
- string del_dev = disk["device"]:"";
- y2milestone( "deleteAllDevPartitions disk:%1", remove( disk, "partitions" ));
-
- /////////////////////////////////////////////////////////////////
- // check mount points if not installation
-
- if( !installation )
- {
- list<map> mounts = Storage::mountedPartitionsOnDisk( del_dev );
- if( size( mounts ) != 0 )
- {
- /////////////////////////////////////////////////////////
- // mount points found
-
- string mounted_parts = "";
- foreach( map mount, mounts,
- ``{
- // %1 is replaced by device name, %1 by directory e.g /dev/hdd1 on /usr
- mounted_parts = mounted_parts +
- sformat("%1 on %2", mount["device"]:"",
- mount["mount"]:"") + "\n";
- });
-
- // popup text, %1 is replaced by device name
- string message = sformat(_("The selected device contains partitions that are currently mounted:
- %1
- It is *strongly* recommended to unmount these partitions before deleting the partition table.
- Choose Cancel unless you know exactly what you are doing.
- "), mounted_parts );
-
- if( !Popup::ContinueCancel(message))
- {
- go_on = false;
- }
- }
- }
-
- if( go_on )
- {
- list<map> partitions = disk["partitions"]:[];
-
- symbol used = check_devices_used( partitions );
-
- go_on = used == `UB_NONE;
-
- if( used == `UB_LVM )
- {
- // popup text, Do not translate LVM.
- Popup::Message(_("
- The selected device contains at least one LVM partition
- assigned to a volume group. Remove all
- partitions from their respective volume groups
- before deleting the device.
- "));
- }
- else if( used == `UB_MD )
- {
- // popup text, Do not translate RAID.
- Popup::Message(_("
- The selected device contains at least one partition
- that is part of a RAID system. Unassign the
- partitions from their respective RAID systems before
- before deleting the device.
- "));
- }
- else if( used == `UB_EVMS )
- {
- // popup text, Do not translate EVMS.
- Popup::Message(_("
- The selected device contains at least one partition
- that is used by an EVMS device. Delete the EVMS device
- before deleting the device.
- "));
- }
- else if( used != `UB_NONE )
- {
- // popup text
- Popup::Message(_("
- The selected device contains at least one partition
- that is used by another volume. Delete the volume using it
- before deleting the device.
- "));
- }
-
- if( go_on && disk["type"]:`CT_UNKNONW!=`CT_DMRAID )
- {
- /////////////////////////////////////////////////
- // delete all partitions of disk
- // logical partitions get removed when extended is deleted
- foreach( map part, partitions,
- ``{
- if( part["nr"]:0 <= disk["max_primary"]:4 )
- {
- go_on = go_on &&
- Storage::DeleteDevice( del_dev, part["device"]:"" );
- }
- });
- }
- }
- y2milestone( "deleteAllDevPartitions ret:%1", go_on );
- return(go_on);
- };
-
-
- }
-