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 / dirinstall.ycp < prev    next >
Text File  |  2006-11-29  |  3KB  |  109 lines

  1. /**
  2.  * File:    packager/inst_dir/instintodir.ycp
  3.  * Module:    System installation
  4.  * Summary:    Installation into  a directory
  5.  * Authors:    Anas Nashif <nashif@suse.de>
  6.  *
  7.  */
  8.  
  9. {
  10.     textdomain "packager";
  11.  
  12.     import "DirInstall";
  13.     import "PackageLock";
  14.     import "Product";
  15.     import "Report";
  16.  
  17.     include "dirinstall/ui.ycp";
  18.  
  19.     // check whether having the packager for ourselves
  20.     if (! PackageLock::Check ())
  21.     return `abort;
  22.  
  23.     // install package callbacks
  24.     import "PackageCallbacksInit";
  25.     PackageCallbacksInit::InitPackageCallbacks();
  26.  
  27.     // initializa the package manager
  28.     integer old_src = -1;
  29.     integer new_src = -1;
  30.     boolean using_patterns = false;
  31.     Pkg::TargetFinish ();
  32.     Pkg::SourceStartManager(true);
  33.     boolean have_patterns
  34.     = size (Pkg::ResolvableProperties ("", `pattern, "")) > 0;
  35.     boolean have_selections
  36.     = size (Pkg::GetSelections (`available, "base")) > 0;
  37.     have_patterns = have_patterns && ! have_selections;
  38.     if (have_patterns)
  39.     {
  40.     y2milestone ("Host system is using patterns");
  41.     Pkg::TargetInit ("/", false);
  42.     list<map<string,any> > prods = Pkg::ResolvableProperties ("", `product, "");
  43.     list<map<string,any> > base_l = filter (map<string,any> p, prods, {
  44.         return p["category"]:"" == "base";
  45.     });
  46.      map<string,any> base = base_l[0]:$[];
  47.     if (size (base_l) == 0)
  48.     {
  49.         y2warning ("No base product found, using first found product");
  50.         base = prods[0]:$[];
  51.     }
  52.     y2milestone ("Found base product: %1", base);
  53.     prods = Pkg::ResolvableProperties (base["name"]:"", `product, "");
  54.     y2milestone ("Found appropriate base products in sources: %1", prods);
  55.     if (size (prods) == 0)
  56.     {
  57.         // error report
  58.         Report::Error (_("Could not read package information."));
  59.         return `abort;
  60.     }
  61.     map<string,any> prod = prods[0]:$[];
  62.     integer source = prod["source"]:-1;
  63.     map src_data = Pkg::SourceGeneralData (source);
  64.     Pkg::SourceSetEnabled (source, false);
  65.     string url = src_data["url"]:"";
  66.     string dir = src_data["product_dir"]:"/";
  67.     if (substring (url, 0, 3) == "cd:" || substring (url, 0, 4) == "dvd:")
  68.     {
  69.         if (! Popup::ContinueCancel (sformat (_("Insert %1 CD 1"), base["summary"]:"")))
  70.         return `back;
  71.     }
  72.     new_src = Pkg::SourceCreateBase (url, dir);
  73.     old_src = source;
  74.     using_patterns = true;
  75.  
  76.     string content_file = Pkg::SourceProvideFile (new_src, 1, "/content");
  77.     SCR::RegisterAgent (.media.content, `ag_ini(
  78.         `IniAgent( content_file,
  79.         $[
  80.         "options" : [ "read_only", "global_values", "flat" ],
  81.         "comments" : [ "^#.*", "^[ \t]*$", ],
  82.         "params" : [
  83.             $[ "match" : [ "^[ \t]*([a-zA-Z0-9_\.]+)[ \t]*(.*)[ \t]*$", "%s %s" ] ]
  84.         ]
  85.         ]
  86.     )));
  87.     any tmp1 = SCR::Read (.media.content.PATTERNS);
  88.     if (tmp1 != nil)
  89.         Product::patterns = splitstring ((string)tmp1, " ");
  90.     y2milestone ("***Patterns: %1", Product::patterns);
  91.     Pkg::TargetFinish ();
  92.     }
  93.     else
  94.     {
  95.     y2milestone ("Host system is using selections");
  96.     }
  97.  
  98.     symbol ret = Run ();
  99.     y2milestone ("Sequence returned %1", ret);
  100.     DirInstall::UmountFilesystems ();
  101.     if (using_patterns)
  102.     {
  103.     Pkg::SourceDelete (new_src);
  104.     Pkg::SourceSetEnabled (old_src, true);
  105.     }
  106.     DirInstall::FinishPackageManager ();
  107.     return ret;
  108. }
  109.