YUMScriptImpl.cc

Go to the documentation of this file.
00001 /*---------------------------------------------------------------------\
00002 |                          ____ _   __ __ ___                          |
00003 |                         |__  / \ / / . \ . \                         |
00004 |                           / / \ V /|  _/  _/                         |
00005 |                          / /__ | | | | | |                           |
00006 |                         /_____||_| |_| |_|                           |
00007 |                                                                      |
00008 \---------------------------------------------------------------------*/
00012 #include "zypp/source/yum/YUMScriptImpl.h"
00013 #include "zypp/Arch.h"
00014 #include "zypp/Edition.h"
00015 #include "zypp/base/Gettext.h"
00016 
00017 #include "zypp/source/yum/YUMSourceImpl.h"
00018 
00019 #include <fstream>
00020 
00021 
00022 using namespace std;
00023 using namespace zypp::detail;
00024 
00026 namespace zypp
00027 { 
00028 
00029   namespace source
00030   { 
00031     namespace yum
00032     {
00033 
00035       //
00036       //        CLASS NAME : YUMScriptImpl
00037       //
00039 
00042       YUMScriptImpl::YUMScriptImpl(
00043         Source_Ref source_r,
00044         const zypp::parser::yum::YUMPatchScript & parsed
00045       )
00046       : _do_script(parsed.do_script)
00047       , _undo_script(parsed.undo_script)
00048       , _do_location(parsed.do_location)
00049       , _undo_location(parsed.undo_location)
00050       , _do_media(1)
00051       , _undo_media(1)
00052       , _do_checksum(parsed.do_checksum_type, parsed.do_checksum)
00053       , _undo_checksum(parsed.undo_checksum_type, parsed.undo_checksum)
00054       , _source(source_r)
00055       {
00056         unsigned do_media = strtol(parsed.do_media.c_str(), 0, 10);
00057         if (do_media > 0)
00058           _do_media = do_media;
00059         unsigned undo_media = strtol(parsed.undo_media.c_str(), 0, 10);
00060         if (undo_media > 0)
00061           _undo_media = undo_media;
00062       }
00063 
00064       Pathname YUMScriptImpl::do_script() const {
00065         if (_do_script != "")
00066         {
00067           _tmp_file = filesystem::TmpFile();
00068           Pathname pth = _tmp_file.path();
00069           ofstream st(pth.asString().c_str());
00070           st << _do_script << endl;
00071           return pth;
00072         }
00073         else if (_do_location != "" && _do_location != "/")
00074         {
00075           Pathname script = source().provideFile(_do_location, _do_media);
00076           if (! YUMSourceImpl::checkCheckSum(script, _do_checksum.type(), _do_checksum.checksum()))
00077           {
00078             ZYPP_THROW(Exception(N_("Failed check for the script file check sum")));
00079           }
00080           return script;
00081         }
00082         else
00083         {
00084           return Pathname();
00085         }
00086       }
00088      Pathname YUMScriptImpl::undo_script() const {
00089         if (_undo_script != "")
00090         {
00091           _tmp_file = filesystem::TmpFile();
00092           Pathname pth = _tmp_file.path();
00093           ofstream st(pth.asString().c_str());
00094           st << _undo_script << endl;
00095           return pth;
00096         }
00097         else if (_undo_location != "" && _undo_location != "/")
00098         {
00099           Pathname script = source().provideFile(_undo_location, _undo_media);
00100           if (! YUMSourceImpl::checkCheckSum(script, _undo_checksum.type(), _undo_checksum.checksum()))
00101           {
00102             ZYPP_THROW(Exception(N_("Failed check for the script file check sum")));
00103           }
00104           return script;
00105         }
00106         else return Pathname();
00107       }
00109       bool YUMScriptImpl::undo_available() const {
00110         return _undo_script != ""
00111           || (_undo_location != "" && _undo_location != "/");
00112       }
00113 
00114       Source_Ref YUMScriptImpl::source() const
00115       { return _source; }
00116 
00117 
00118 
00119     } // namespace yum
00121   } // namespace source
00124 } // namespace zypp

Generated on Thu Jul 6 00:07:25 2006 for zypp by  doxygen 1.4.6