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_mediacopy.ycp < prev    next >
Text File  |  2006-11-29  |  4KB  |  131 lines

  1. /**
  2.  * Module:    inst_mediacopy.ycp
  3.  *
  4.  * Authors:    Anas Nashif <nashif@suse.de>
  5.  *
  6.  * Purpose:    Copy Media to local disk
  7.  */
  8. {
  9.     textdomain "packager";
  10.  
  11.     import "Label";
  12.     import "Popup";
  13.     import "Wizard";
  14.     import "Packages";
  15.     import "PackageCallbacks";
  16.     import "PackageCallbacksInit";
  17.     import "Installation";
  18.     import "GetInstArgs";
  19.  
  20.     list source_list = [];
  21.  
  22.     Packages::Init(false);
  23.     integer num = size (Packages::theSources);
  24.     if (num <= 0)
  25.     {
  26.     y2error ("Screwed source");
  27.     }
  28.     else
  29.     {
  30.     foreach (integer i, Packages::theSources, {
  31.         map new_product = Pkg::SourceProductData (i);
  32.         source_list = add (source_list,
  33.                    `item (`id (i), new_product["productname"]:"?",
  34.                       new_product["productversion"]:"?"));
  35.     });
  36.     }
  37.  
  38.     // dialog heading
  39.     string heading_text = _("Copy Installation Media");
  40.     // help text
  41.     string help_text = _("<p>The installation CDs will be copied into the system
  42. to create an installation source that can be used to install
  43. other systems.</p>
  44. ");
  45.     // label for showing installation sources
  46.     string label = _("Registered Catalogs");
  47.  
  48.     term contents =
  49.     `VBox (
  50.            `HCenter (
  51.              `HSquash (
  52.                    `VBox (
  53.                       `HSpacing( 40 ),    // force minimum width
  54.                       `Left (`Label (label)),
  55.                       `Table (`id (`sources),
  56.                           `header (_("Name"),
  57.                                _("Version")),
  58.                           source_list)
  59.                       )
  60.                    )
  61.              ),
  62.            `VSpacing (2)
  63.            );
  64.  
  65.     Wizard::SetContents( heading_text, contents, help_text, 
  66.             GetInstArgs::enable_back(), GetInstArgs::enable_next());
  67.  
  68.     string dest = "";
  69.     if (SCR::Read(.target.dir, Installation::destdir + "/export")==nil)
  70.     {
  71.         SCR::Execute(.target.mkdir , Installation::destdir + "/export");
  72.     }
  73.     dest = Installation::destdir + "/export"; 
  74.  
  75.     PackageCallbacksInit::SetMediaCallbacks();
  76.  
  77.     list<integer> s = Pkg::SourceGetCurrent(false);
  78.     y2milestone("%1", s );
  79.  
  80.     foreach(integer source , s , {
  81.             map md = Pkg::SourceMediaData(source);
  82.             map pd = Pkg::SourceProductData(source);
  83.             string distprod = pd["label"]:"";
  84.             list<string> l = splitstring(distprod, " ");
  85.             distprod = mergestring(l, "-");
  86.             string updir = (string)SCR::Read (.etc.install_inf.UpdateDir);
  87.             string _export = "";
  88.             if (updir==nil)
  89.             {
  90.                 _export = dest+"/dist";
  91.             } else {
  92.                 _export = dest+updir;
  93.             }
  94.  
  95.             boolean changed_url = false;
  96.  
  97.             integer i = 1;
  98.             while (i <= md["media_count"]:0)
  99.             {
  100.                 string tgt = sformat("%1/%2/CD%3", _export, distprod, i );
  101.                 y2debug("tgt: %1", tgt );
  102.                 //Popup::Message(sformat(_("Before... %1"), i ));
  103.                 any dir =  Pkg::SourceProvideDir(source, i , ".");
  104.                 //Popup::Message(sformat(_("After... %1"), i ));
  105.                 if (dir!=nil)
  106.                 {
  107.             // feedback popup 1/2
  108.                     Popup::ShowFeedback(_("Copying CD contents to a local directory..."),
  109.             // feedback popup 2/2
  110.             _("Please wait..."));
  111.                     SCR::Execute(.target.mkdir, tgt);
  112.                     //string cmd = sformat("cd %1 && tar cf - . | (cd %2  && tar xBf -)", dir,  tgt);
  113.                     string cmd = sformat("cp %1/content %2", dir, tgt);
  114.                     SCR::Execute(.target.bash, cmd);
  115.  
  116.                     if (!changed_url)
  117.                     {
  118.                         Pkg::SourceChangeUrl (source, "dir://"+tgt);
  119.                         changed_url = true;
  120.                     }
  121.  
  122.                     Popup::ClearFeedback();
  123.                 
  124.                 }
  125.                 i = i + 1;
  126.             }
  127.      });
  128.  
  129.     return `next;
  130. }
  131.