Author: mlandres Date: Wed Aug 1 18:44:56 2007 New Revision: 6373 URL: http://svn.opensuse.org/viewcvs/zypp?rev=6373&view=rev Log: - Fixed ScriptProvider and SrcPackageProvider to take just the RepoMediaAccess on construction. This way one provider can retrieve multiple items. - Finished TargetImpl::installSrcPackage. Added: trunk/libzypp/zypp/repo/SrcPackageProvider.cc trunk/libzypp/zypp/repo/SrcPackageProvider.h Modified: trunk/libzypp/zypp/CMakeLists.txt trunk/libzypp/zypp/ZYpp.cc trunk/libzypp/zypp/ZYpp.h trunk/libzypp/zypp/repo/ScriptProvider.cc trunk/libzypp/zypp/repo/ScriptProvider.h trunk/libzypp/zypp/target/TargetImpl.cc trunk/libzypp/zypp/target/TargetImpl.h trunk/libzypp/zypp/target/store/serialize.cc trunk/libzypp/zypp/zypp_detail/ZYppImpl.cc trunk/libzypp/zypp/zypp_detail/ZYppImpl.h Modified: trunk/libzypp/zypp/CMakeLists.txt URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/CMakeLists.txt?rev=6373&r1=6372&r2=6373&view=diff ============================================================================== --- trunk/libzypp/zypp/CMakeLists.txt (original) +++ trunk/libzypp/zypp/CMakeLists.txt Wed Aug 1 18:44:56 2007 @@ -920,6 +920,7 @@ repo/RepoException.cc repo/RepoType.cc repo/PackageProvider.cc + repo/SrcPackageProvider.cc repo/ScriptProvider.cc repo/RepoProvideFile.cc repo/DeltaCandidates.cc @@ -936,6 +937,7 @@ repo/RepoException.h repo/RepoType.h repo/PackageProvider.h + repo/SrcPackageProvider.h repo/ScriptProvider.h repo/RepoProvideFile.h repo/DeltaCandidates.h Modified: trunk/libzypp/zypp/ZYpp.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/ZYpp.cc?rev=6373&r1=6372&r2=6373&view=diff ============================================================================== --- trunk/libzypp/zypp/ZYpp.cc (original) +++ trunk/libzypp/zypp/ZYpp.cc Wed Aug 1 18:44:56 2007 @@ -108,7 +108,7 @@ ZYppCommitResult ZYpp::commit( const ZYppCommitPolicy & policy_r ) { return _pimpl->commit( policy_r ); } - void ZYpp::installSrcPackage( const ResTraits<SrcPackage>::constPtrType & srcPackage_r ) + void ZYpp::installSrcPackage( const SrcPackage_constPtr & srcPackage_r ) { _pimpl->installSrcPackage( srcPackage_r ); } /////////////////////////////////////////////////////////////////// Modified: trunk/libzypp/zypp/ZYpp.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/ZYpp.h?rev=6373&r1=6372&r2=6373&view=diff ============================================================================== --- trunk/libzypp/zypp/ZYpp.h (original) +++ trunk/libzypp/zypp/ZYpp.h Wed Aug 1 18:44:56 2007 @@ -119,7 +119,7 @@ /** Install a source package on the Target. * \throws Exception */ - void installSrcPackage( const ResTraits<SrcPackage>::constPtrType & srcPackage_r ); + void installSrcPackage( const SrcPackage_constPtr & srcPackage_r ); public: /** */ Modified: trunk/libzypp/zypp/repo/ScriptProvider.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/repo/ScriptProvider.cc?rev=6373&r1=6372&r2=6373&view=diff ============================================================================== --- trunk/libzypp/zypp/repo/ScriptProvider.cc (original) +++ trunk/libzypp/zypp/repo/ScriptProvider.cc Wed Aug 1 18:44:56 2007 @@ -15,6 +15,7 @@ #include "zypp/repo/ScriptProvider.h" #include "zypp/PathInfo.h" #include "zypp/TmpPath.h" +#include "zypp/Script.h" using std::endl; @@ -80,10 +81,8 @@ // METHOD NAME : ScriptProvider::ScriptProvider // METHOD TYPE : Ctor // - ScriptProvider::ScriptProvider( repo::RepoMediaAccess & access_r, - const Script::constPtr & script_r ) + ScriptProvider::ScriptProvider( repo::RepoMediaAccess & access_r ) : _access( access_r ) - , _script( script_r ) {} /////////////////////////////////////////////////////////////////// @@ -94,24 +93,24 @@ ScriptProvider::~ScriptProvider() {} - ManagedFile ScriptProvider::provideDoScript() const + ManagedFile ScriptProvider::provideDoScript( const Script_constPtr & script_r ) const { ManagedFile ret; - if ( _script ) + if ( script_r ) { - return doProvideScript( _access, *_script, + return doProvideScript( _access, *script_r, &Script::doScriptInlined, &Script::doScriptLocation ); } return ret; } - ManagedFile ScriptProvider::provideUndoScript() const + ManagedFile ScriptProvider::provideUndoScript( const Script_constPtr & script_r ) const { ManagedFile ret; - if ( _script ) + if ( script_r ) { - return doProvideScript( _access, *_script, + return doProvideScript( _access, *script_r, &Script::undoScriptInlined, &Script::undoScriptLocation ); } Modified: trunk/libzypp/zypp/repo/ScriptProvider.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/repo/ScriptProvider.h?rev=6373&r1=6372&r2=6373&view=diff ============================================================================== --- trunk/libzypp/zypp/repo/ScriptProvider.h (original) +++ trunk/libzypp/zypp/repo/ScriptProvider.h Wed Aug 1 18:44:56 2007 @@ -19,7 +19,7 @@ #include "zypp/repo/RepoProvideFile.h" #include "zypp/ManagedFile.h" -#include "zypp/Script.h" +#include "zypp/ResTraits.h" /////////////////////////////////////////////////////////////////// namespace zypp @@ -39,29 +39,27 @@ { public: /** Ctor */ - ScriptProvider( repo::RepoMediaAccess & access_r, - const Script::constPtr & script_r ); + ScriptProvider( repo::RepoMediaAccess & access_r ); /** Dtor */ ~ScriptProvider(); public: /** Provide a script in a local file.*/ - ManagedFile provideScript( bool do_r ) const - { return( do_r ? provideDoScript() : provideUndoScript() ); } + ManagedFile provideScript( const Script_constPtr & script_r, bool do_r ) const + { return( do_r ? provideDoScript( script_r ) : provideUndoScript( script_r ) ); } /** Provide the do-script in a local file. * Returns an empty path if no script is available. */ - ManagedFile provideDoScript() const; + ManagedFile provideDoScript( const Script_constPtr & script_r ) const; /** Provide the do-script in a local file. * Returns an empty path if no script is available. */ - ManagedFile provideUndoScript() const; + ManagedFile provideUndoScript( const Script_constPtr & script_r ) const; private: RepoMediaAccess & _access; - Script::constPtr _script; }; /////////////////////////////////////////////////////////////////// Added: trunk/libzypp/zypp/repo/SrcPackageProvider.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/repo/SrcPackageProvider.cc?rev=6373&view=auto ============================================================================== --- trunk/libzypp/zypp/repo/SrcPackageProvider.cc (added) +++ trunk/libzypp/zypp/repo/SrcPackageProvider.cc Wed Aug 1 18:44:56 2007 @@ -0,0 +1,106 @@ +/*---------------------------------------------------------------------\ +| ____ _ __ __ ___ | +| |__ / \ / / . \ . \ | +| / / \ V /| _/ _/ | +| / /__ | | | | | | | +| /_____||_| |_| |_| | +| | +\---------------------------------------------------------------------*/ +/** \file zypp/repo/SrcPackageProvider.cc + * +*/ +#include <iostream> +#include <fstream> + +#include "zypp/repo/SrcPackageProvider.h" +#include "zypp/PathInfo.h" +#include "zypp/TmpPath.h" +#include "zypp/SrcPackage.h" + +using std::endl; + +/////////////////////////////////////////////////////////////////// +namespace zypp +{ ///////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////// + namespace repo + { ///////////////////////////////////////////////////////////////// + + /////////////////////////////////////////////////////////////////// + namespace + { ///////////////////////////////////////////////////////////////// + + typedef std::string (SrcPackage::*inlined)() const; + typedef OnMediaLocation (SrcPackage::*location)() const; + + /** Provide a SrcPackage in a local file. */ + ManagedFile doProvideSrcPackage( repo::RepoMediaAccess & access_r, + const SrcPackage & script_r, + inlined inlined_r, location location_r ) + { + ManagedFile ret; + + // 1st try inlined + std::string inlined( (script_r.*inlined_r)() ); + if ( ! inlined.empty() ) + { + // Take care the TmpFile goes out of scope BEFORE the + // ofstream opens the file again. + ret = ManagedFile( filesystem::TmpFile( filesystem::TmpPath::defaultLocation(), + "zypp-script-"+script_r.name() ), + filesystem::unlink ); + std::ofstream str( ret.value().c_str() ); + str << inlined << endl; + } + else + { + // otherwise try download + OnMediaLocation location( (script_r.*location_r)() ); + if ( ! location.filename().empty() ) + { + ret = access_r.provideFile( script_r.repository(), location ); + } + else + { + // no script + return ManagedFile(); + } + } + + // HERE: got the script + filesystem::chmod( ret, 0700 ); + return ret; + } + + ///////////////////////////////////////////////////////////////// + } // namespace + /////////////////////////////////////////////////////////////////// + + /////////////////////////////////////////////////////////////////// + // + // METHOD NAME : SrcPackageProvider::SrcPackageProvider + // METHOD TYPE : Ctor + // + SrcPackageProvider::SrcPackageProvider( repo::RepoMediaAccess & access_r ) + : _access( access_r ) + {} + + /////////////////////////////////////////////////////////////////// + // + // METHOD NAME : SrcPackageProvider::~SrcPackageProvider + // METHOD TYPE : Dtor + // + SrcPackageProvider::~SrcPackageProvider() + {} + + ManagedFile SrcPackageProvider::provideSrcPackage( const SrcPackage_constPtr & srcPackage_r ) const + { + return _access.provideFile( srcPackage_r->repository(), srcPackage_r->location() ); + } + + ///////////////////////////////////////////////////////////////// + } // namespace repo + /////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////// +} // namespace zypp +/////////////////////////////////////////////////////////////////// Added: trunk/libzypp/zypp/repo/SrcPackageProvider.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/repo/SrcPackageProvider.h?rev=6373&view=auto ============================================================================== --- trunk/libzypp/zypp/repo/SrcPackageProvider.h (added) +++ trunk/libzypp/zypp/repo/SrcPackageProvider.h Wed Aug 1 18:44:56 2007 @@ -0,0 +1,61 @@ +/*---------------------------------------------------------------------\ +| ____ _ __ __ ___ | +| |__ / \ / / . \ . \ | +| / / \ V /| _/ _/ | +| / /__ | | | | | | | +| /_____||_| |_| |_| | +| | +\---------------------------------------------------------------------*/ +/** \file zypp/repo/SrcPackageProvider.h + * +*/ +#ifndef ZYPP_REPO_SRCPACKAGEPROVIDER_H +#define ZYPP_REPO_SRCPACKAGEPROVIDER_H + +#include <iosfwd> + +#include "zypp/base/NonCopyable.h" +#include "zypp/base/PtrTypes.h" + +#include "zypp/repo/RepoProvideFile.h" +#include "zypp/ManagedFile.h" +#include "zypp/ResTraits.h" + +/////////////////////////////////////////////////////////////////// +namespace zypp +{ ///////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////// + namespace repo + { ///////////////////////////////////////////////////////////////// + + class RepoMediaAccess; + + /////////////////////////////////////////////////////////////////// + // + // CLASS NAME : SrcPackageProvider + // + /** */ + class SrcPackageProvider : private base::NonCopyable + { + public: + /** Ctor */ + SrcPackageProvider( repo::RepoMediaAccess & access_r ); + /** Dtor */ + ~SrcPackageProvider(); + + public: + /** Provide SrcPackage in a local file. */ + ManagedFile provideSrcPackage( const SrcPackage_constPtr & srcPackage_r ) const; + + private: + RepoMediaAccess & _access; + }; + /////////////////////////////////////////////////////////////////// + + ///////////////////////////////////////////////////////////////// + } // namespace repo + /////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////// +} // namespace zypp +/////////////////////////////////////////////////////////////////// +#endif // ZYPP_REPO_SRCPACKAGEPROVIDER_H Modified: trunk/libzypp/zypp/target/TargetImpl.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/target/TargetImpl.cc?rev=6373&r1=6372&r2=6373&view=diff ============================================================================== --- trunk/libzypp/zypp/target/TargetImpl.cc (original) +++ trunk/libzypp/zypp/target/TargetImpl.cc Wed Aug 1 18:44:56 2007 @@ -46,6 +46,7 @@ #include "zypp/repo/DeltaCandidates.h" #include "zypp/repo/PackageProvider.h" #include "zypp/repo/ScriptProvider.h" +#include "zypp/repo/SrcPackageProvider.h" using namespace std; using namespace zypp; @@ -73,8 +74,8 @@ return; } - repo::ScriptProvider prov( access_r, script_r ); - ManagedFile localfile = prov.provideScript( do_r ); + repo::ScriptProvider prov( access_r ); + ManagedFile localfile = prov.provideScript( script_r, do_r ); if ( localfile->empty() ) { @@ -794,15 +795,16 @@ } } - void TargetImpl::installSrcPackage( const SrcPackage::constPtr & srcPackage_r ) + void TargetImpl::installSrcPackage( const SrcPackage_constPtr & srcPackage_r ) { - ZYPP_THROW( Exception("srcPackage install not yet implemented") ); -#warning IMPLEMENT IT - // Provide srcPackage_r on the local disk and install it using - // _rpm.installPackage( localfile ); + // provide on local disk + repo::RepoMediaAccess access_r; + repo::SrcPackageProvider prov( access_r ); + ManagedFile localfile = prov.provideSrcPackage( srcPackage_r ); + // install it + rpm().installPackage ( localfile ); } - ///////////////////////////////////////////////////////////////// } // namespace target /////////////////////////////////////////////////////////////////// Modified: trunk/libzypp/zypp/target/TargetImpl.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/target/TargetImpl.h?rev=6373&r1=6372&r2=6373&view=diff ============================================================================== --- trunk/libzypp/zypp/target/TargetImpl.h (original) +++ trunk/libzypp/zypp/target/TargetImpl.h Wed Aug 1 18:44:56 2007 @@ -114,7 +114,7 @@ PoolItemList commit( const PoolItemList & items_r, const ZYppCommitPolicy & policy_r, const ResPool & pool_r ); /** Install a source package on the Target. */ - void installSrcPackage( const ResTraits<SrcPackage>::constPtrType & srcPackage_r ); + void installSrcPackage( const SrcPackage_constPtr & srcPackage_r ); /** Overload to realize stream output. */ virtual std::ostream & dumpOn( std::ostream & str ) const Modified: trunk/libzypp/zypp/target/store/serialize.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/target/store/serialize.cc?rev=6373&r1=6372&r2=6373&view=diff ============================================================================== --- trunk/libzypp/zypp/target/store/serialize.cc (original) +++ trunk/libzypp/zypp/target/store/serialize.cc Wed Aug 1 18:44:56 2007 @@ -233,11 +233,11 @@ out << toXML(static_castResObject::constPtr(obj)); repo::RepoMediaAccess access; - repo::ScriptProvider prov( access, obj ); + repo::ScriptProvider prov( access ); out << " <do>" << endl; out << " <![CDATA[" << endl; - copyFileToStream( prov.provideDoScript(), out ); + copyFileToStream( prov.provideDoScript( obj ), out ); out << " ]]>" << endl; out << " </do>" << endl; @@ -245,7 +245,7 @@ { out << " <undo>" << endl; out << " <![CDATA[" << endl; - copyFileToStream( prov.provideUndoScript(), out ); + copyFileToStream( prov.provideUndoScript( obj ), out ); out << " ]]>" << endl; out << " </undo>" << endl; Modified: trunk/libzypp/zypp/zypp_detail/ZYppImpl.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/zypp_detail/ZYppImpl.cc?rev=6373&r1=6372&r2=6373&view=diff ============================================================================== --- trunk/libzypp/zypp/zypp_detail/ZYppImpl.cc (original) +++ trunk/libzypp/zypp/zypp_detail/ZYppImpl.cc Wed Aug 1 18:44:56 2007 @@ -273,7 +273,7 @@ return res; } - void ZYppImpl::installSrcPackage( const ResTraits<SrcPackage>::constPtrType & srcPackage_r ) + void ZYppImpl::installSrcPackage( const SrcPackage_constPtr & srcPackage_r ) { if (! _target) ZYPP_THROW( Exception("Target not initialized.") ); Modified: trunk/libzypp/zypp/zypp_detail/ZYppImpl.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/zypp_detail/ZYppImpl.h?rev=6373&r1=6372&r2=6373&view=diff ============================================================================== --- trunk/libzypp/zypp/zypp_detail/ZYppImpl.h (original) +++ trunk/libzypp/zypp/zypp_detail/ZYppImpl.h Wed Aug 1 18:44:56 2007 @@ -99,7 +99,7 @@ ZYppCommitResult commit( const ZYppCommitPolicy & policy_r ); /** Install a source package on the Target. */ - void installSrcPackage( const ResTraits<SrcPackage>::constPtrType & srcPackage_r ); + void installSrcPackage( const SrcPackage_constPtr & srcPackage_r ); public: /** \todo Signal locale change. */ -- To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org For additional commands, e-mail: zypp-commit+help@opensuse.org