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 / modules / Hooks.ycp < prev    next >
Text File  |  2006-11-29  |  4KB  |  123 lines

  1. /**
  2.  * File:    modules/Hooks.ycp
  3.  * Package:    yast2
  4.  * Summary:    Provide debug hooks during installation
  5.  * Authors:    Klaus Kaempf <kkaempf@suse.de>
  6.  *
  7.  * $Id: Hooks.ycp 21418 2005-02-08 15:13:42Z nashif $
  8.  */
  9.  
  10. {
  11.     module "Hooks";
  12.  
  13.     import "Popup";
  14.     import "Directory";
  15.  
  16.     string tmp_dir = (string)WFM::Read(.local.tmpdir, []);
  17.     string log_dir = Directory::logdir;
  18.  
  19.     // script types, ycp does not make  sense, it can be added directly
  20.     // to the workflow.
  21.     list supported_types = ["sh", "pl"];
  22.  
  23.     /**
  24.      * called whenever an inst_*.ycp file is called during
  25.      * installation.
  26.      * checks if /tmp/<filename> exists and pops up a "Entry: <filename>"
  27.      * or "Exit: <filename>" box
  28.      *
  29.      * @param string  filename == name of .ycp file
  30.      * @param string at_entry == true before call of file == false after call of file
  31.      * @return void
  32.      */
  33.  
  34.     global define void Checkpoint (string filename, boolean at_entry)
  35.     {
  36.     if (WFM::Read (.local.size, "/tmp/"+filename) >= 0)
  37.     {
  38.         if (at_entry)
  39.         {
  40.         Popup::Message (sformat ("Entry: %1", filename));
  41.         }
  42.         else
  43.         {
  44.         Popup::Message (sformat ("Exit: %1", filename));
  45.         }
  46.     }
  47.         return;
  48.     }
  49.  
  50.  
  51.     /**
  52.      * Execute Script
  53.      * @param string script name
  54.      * @param string type
  55.      */
  56.     void ExecuteScript (string script, string type)
  57.     {
  58.  
  59.         y2milestone("Executing script: %1", script);
  60.         // string message =  sformat(_("Executing user supplied script: %1"), scriptName);
  61.         string executionString = "";
  62.         string scriptPath = sformat("%1/%2", tmp_dir, script);
  63.         if (type == "shell")
  64.         {
  65.             executionString = sformat("/bin/sh -x %1 2&> %2/%3.log",
  66.                     scriptPath, log_dir, script);
  67.             WFM::Execute (.local.bash, executionString);
  68.         }
  69.         else if (type == "perl")
  70.         {
  71.             executionString = sformat("/usr/bin/perl %1 2&> %2/%3.log",
  72.                     scriptPath, log_dir, script);
  73.             WFM::Execute (.local.bash,executionString);
  74.         }
  75.         else
  76.         {
  77.             y2error("Unknown interpreter: %1", type);
  78.         }
  79.         y2milestone("Script Execution command: %1", executionString );
  80.     }
  81.  
  82.     /**
  83.      * Run Script
  84.      * @param string  filename == name of .ycp file
  85.      * @param string at_entry == true before call of file == false after call of file
  86.      */
  87.     global define void Run(string filename, boolean at_entry) 
  88.     {
  89.         y2debug("Running Hook: %1" , filename);
  90.         // do not run scripts twice
  91.         if (at_entry)
  92.         {
  93.         if (WFM::Read (.local.size, sformat("%1/%2_pre.sh", tmp_dir, filename)) > 0)
  94.             {
  95.                 ExecuteScript(sformat("%1_pre.sh", filename), "shell");
  96.             }
  97.             else if (WFM::Read (.local.size, sformat("%1/%2_pre.pl", tmp_dir, filename)) > 0)
  98.             {
  99.                 ExecuteScript(sformat("%1_pre.pl", filename), "perl");
  100.             }
  101.             else
  102.             {
  103.                 y2debug("Hook not found: %1/%2_pre.{sh,pl}" , tmp_dir, filename);
  104.             }
  105.         } else {
  106.         if (WFM::Read (.local.size, sformat("%1/%2_post.sh", tmp_dir, filename)) > 0)
  107.             {
  108.                 ExecuteScript(sformat("%1_post.sh",  filename), "shell");
  109.             }
  110.             else if (WFM::Read (.local.size, sformat("%1/%2_post.pl", tmp_dir, filename)) > 0)
  111.             {
  112.                 ExecuteScript(sformat("%1_post.pl", filename), "perl");
  113.             }
  114.             else
  115.             {
  116.                 y2debug("Hook not found: %1/%2_post.{sh,pl}" , tmp_dir, filename);
  117.             }
  118.         }
  119.         return;
  120.     }
  121.  
  122. }
  123.