home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / root / usr / share / YaST2 / clients / inst_backup.ycp < prev    next >
Text File  |  2006-11-29  |  5KB  |  187 lines

  1. /**
  2.  * Module:     inst_backup.ycp
  3.  *
  4.  * Authors:    Stefan Schubert <schubi@suse.de>
  5.  *        Arvin Schnell <arvin@suse.de>
  6.  *
  7.  * Purpose:    Ask the user for backups during the update.
  8.  *
  9.  * $Id: inst_backup.ycp 33392 2006-10-13 11:39:53Z locilka $
  10.  */
  11.  
  12. {
  13.     textdomain "update";
  14.  
  15.     import "Mode";
  16.     import "Update";
  17.     import "SpaceCalculation";
  18.     import "Wizard";
  19.     import "Popup";
  20.  
  21.  
  22.     //
  23.     // Check, if the backup fits to disk
  24.     //
  25.  
  26.     define boolean check_backup_path (list<map> part_info)
  27.     {
  28.     string backup_path = Update::backup_path;
  29.     integer min_space = 50;
  30.  
  31.     boolean found = false;
  32.     integer free_space = 0;
  33.  
  34.     if ( size ( backup_path ) <= 1 ||
  35.          substring(backup_path,0,1) != "/" )
  36.     {
  37.         // error popup, user did not enter a valid directory specification
  38.         Popup::Message( _("Invalid backup path.") );
  39.         return false;
  40.     }
  41.  
  42.     foreach( map part, part_info, {
  43.  
  44.         string part_name = part["name"]:"";
  45.  
  46.         if ( part_name == "/" && !found )
  47.         {
  48.         free_space = part["free"]:0;
  49.         y2milestone("Partition :%1", part_name);
  50.         y2milestone("free:%1", free_space );
  51.         }
  52.  
  53.         if ( size ( backup_path ) >= 2 && part_name != "/")
  54.         {
  55.         string compare_string = substring ( backup_path, 0 , size ( part_name ) );
  56.         if (compare_string == part_name && !found)
  57.         {
  58.             free_space   = part["free"]:0;
  59.             y2milestone("Partition :%1", part_name );
  60.             y2milestone("free:%1", free_space );
  61.             found = true;
  62.         }
  63.         else
  64.         {
  65.             y2milestone("Partition :%1<->%2", part_name, compare_string);
  66.         }
  67.         }
  68.     } );
  69.  
  70.     if (free_space >= min_space || Mode::test ())
  71.     {
  72.         return true;
  73.     }
  74.     else
  75.     {
  76.         // there is not enough space for the backup during update
  77.         // inform the user about this (MB==megabytes)
  78.         string message = sformat ( _("Minimum disk space of %1 MB required."), min_space);
  79.         Popup::Message (message);
  80.         return false;
  81.     }
  82.     };
  83.  
  84.  
  85.     // Get information about available partitions
  86.     list<map> partition = (list<map>)SpaceCalculation::GetPartitionInfo();
  87.     y2milestone("evaluate partitions: %1", partition);
  88.  
  89.     // screen title for software selection
  90.     string title = _("Backup System Before Update");
  91.  
  92.     // Build and show dialog
  93.  
  94.     Wizard::OpenAcceptDialog();
  95.  
  96.     term contents = `HVSquash(
  97.                   `VBox(
  98.                     `Left(`CheckBox(`id(`modified),`opt(`notify),
  99.                             // checkbox label if user wants to backup modified files
  100.                             _("Create &Backup of Modified Files"))),
  101.                     `Left(`CheckBox(`id(`sysconfig),`opt(`notify),
  102.                             // checkbox label if user wants to backup /etc/sysconfig
  103.                             _("Create a &Complete Backup of /etc/sysconfig"))),
  104.                     `VSpacing (1),
  105.                     `Left(`CheckBox(`id(`remove),`opt(`notify),
  106.                             // checkbox label if user wants remove old backup stuff
  107.                             _("Remove &Old Backups from the Backup Directory")))
  108.                     )
  109.                   );
  110.  
  111.     // help text for backup dialog during update 1/7
  112.     string help_text = _("<p>To avoid any loss of information during update,
  113. it is possible to create a <b>backup</b> prior to updating.</p>
  114. ");
  115.  
  116.     // help text for backup dialog during update 2/7
  117.     help_text = help_text + _("<p><b>Warning:</b> This will not be a complete
  118. backup. Only modified files will be saved.</p>
  119. ");
  120.  
  121.     // help text for backup dialog during update 3/7
  122.     help_text = help_text + _("<p>Select the desired options.</p>
  123. ");
  124.  
  125.     // help text for backup dialog during update 4/7
  126.     help_text = help_text + _("<p><b>Create a Backup of Modified Files:</b>
  127. Stores those modified files that are replaced during update.</p>
  128. ");
  129.  
  130.     // help text for backup dialog during update 5/7
  131.     help_text = help_text + _("<p><b>Create a Complete Backup of
  132. /etc/sysconfig:</b> This covers all configuration files that are part of the
  133. sysconfig mechanism, even those that are not replaced.</p>
  134. ");
  135.  
  136.     // help text for backup dialog during update 6/7
  137.     help_text = help_text + _("<p><b>Remove Old Backups from the Backup
  138. Directory:</b> If your current system already is the result of an earlier
  139. update, there may be old configuration file backups. Select this option to
  140. remove them.</p>
  141. ");
  142.  
  143.     // help text for backup dialog during update 7/7
  144.     help_text = help_text + sformat (_("<p>All backups are placed in %1.</p>"),
  145.                      Update::backup_path);
  146.  
  147.  
  148.     Wizard::SetContents (title, contents, help_text, (boolean) WFM::Args(0), (boolean) WFM::Args(1));
  149.  
  150.     UI::ChangeWidget (`id(`modified), `Value, Update::backup_modified);
  151.     UI::ChangeWidget (`id(`sysconfig), `Value, Update::backup_sysconfig);
  152.     UI::ChangeWidget (`id(`remove), `Value, Update::remove_old_backups);
  153.  
  154.     any ret = nil;
  155.  
  156.     while (true)
  157.     {
  158.     ret = Wizard::UserInput();
  159.  
  160.     if (ret == `abort && Popup::ConfirmAbort (`painless))
  161.         break;
  162.  
  163.     if (ret == `cancel || ret == `back)
  164.         break;
  165.  
  166.     // any backup wanted?
  167.     boolean tmp = (boolean) UI::QueryWidget (`id(`modified), `Value) ||
  168.         (boolean) UI::QueryWidget (`id(`sysconfig), `Value);
  169.  
  170.     if (ret == `next)
  171.     {
  172.         if (tmp && !check_backup_path (partition))
  173.         continue;
  174.  
  175.         Update::backup_modified = (boolean) UI::QueryWidget (`id(`modified), `Value);
  176.         Update::backup_sysconfig = (boolean) UI::QueryWidget (`id(`sysconfig), `Value);
  177.         Update::remove_old_backups = (boolean) UI::QueryWidget (`id(`remove), `Value);
  178.  
  179.         break;
  180.     }
  181.     }
  182.  
  183.     Wizard::CloseDialog ();
  184.  
  185.     return ret;
  186. }
  187.