#include "zypp/base/String.h"
#include "zypp/ZConfig.h"
-
#include "zypp/ZYppCommitPolicy.h"
///////////////////////////////////////////////////////////////////
namespace zypp
{ /////////////////////////////////////////////////////////////////
+ std::ostream & operator<<( std::ostream & str, DownloadMode obj )
+ {
+ switch ( obj )
+ {
+#define OUTS(VAL) case VAL: return str << #VAL; break
+ OUTS( DownloadOnly );
+ OUTS( DownloadInAdvance );
+ OUTS( DownloadInHeaps );
+ OUTS( DownloadAsNeeded );
+#undef OUTS
+ }
+ return str << "DownloadMode(" << int(obj) << ")";
+ }
+
+ ///////////////////////////////////////////////////////////////////
+ //
+ // CLASS NAME : ZYppCommitPolicy::Impl
+ //
+ ///////////////////////////////////////////////////////////////////
+
+ class ZYppCommitPolicy::Impl
+ {
+ public:
+ Impl()
+ : _restrictToMedia ( 0 )
+ , _dryRun ( false )
+ , _downloadMode ( DownloadAsNeeded )
+ , _rpmInstFlags ( ZConfig::instance().rpmInstallFlags() )
+ , _syncPoolAfterCommit ( true )
+ {}
+
+ public:
+ unsigned _restrictToMedia;
+ bool _dryRun;
+ DownloadMode _downloadMode;
+ target::rpm::RpmInstFlags _rpmInstFlags;
+ bool _syncPoolAfterCommit;
+
+ private:
+ friend Impl * rwcowClone<Impl>( const Impl * rhs );
+ /** clone for RWCOW_pointer */
+ Impl * clone() const { return new Impl( *this ); }
+ };
+
+ ///////////////////////////////////////////////////////////////////
+ //
+ // CLASS NAME : ZYppCommitPolicy
+ //
+ ///////////////////////////////////////////////////////////////////
+
ZYppCommitPolicy::ZYppCommitPolicy()
- : _restrictToMedia ( 0 )
- , _dryRun ( false )
- , _rpmInstFlags ( ZConfig::instance().rpmInstallFlags() )
- , _syncPoolAfterCommit( true )
+ : _pimpl( new Impl )
{}
+
+ ZYppCommitPolicy & ZYppCommitPolicy::restrictToMedia( unsigned mediaNr_r )
+ { _pimpl->_restrictToMedia = ( mediaNr_r == 1 ) ? 1 : 0; return *this; }
+
+ unsigned ZYppCommitPolicy::restrictToMedia() const
+ { return _pimpl->_restrictToMedia; }
+
+
+ ZYppCommitPolicy & ZYppCommitPolicy::dryRun( bool yesNo_r )
+ { _pimpl->_dryRun = yesNo_r; return *this; }
+
+ bool ZYppCommitPolicy::dryRun() const
+ { return _pimpl->_dryRun; }
+
+
+ ZYppCommitPolicy & ZYppCommitPolicy::downloadMode( DownloadMode val_r )
+ { _pimpl->_downloadMode = val_r; return *this; }
+
+ DownloadMode ZYppCommitPolicy::downloadMode() const
+ { return _pimpl->_downloadMode; }
+
+
+ ZYppCommitPolicy & ZYppCommitPolicy::rpmInstFlags( target::rpm::RpmInstFlags newFlags_r )
+ { _pimpl->_rpmInstFlags = newFlags_r; return *this; }
+
+ ZYppCommitPolicy & ZYppCommitPolicy::rpmNoSignature( bool yesNo_r )
+ { _pimpl->_rpmInstFlags.setFlag( target::rpm::RPMINST_NOSIGNATURE, yesNo_r ); return *this; }
+
+ ZYppCommitPolicy & ZYppCommitPolicy::rpmExcludeDocs( bool yesNo_r )
+ { _pimpl->_rpmInstFlags.setFlag( target::rpm::RPMINST_EXCLUDEDOCS, yesNo_r ); return *this; }
+
+ target::rpm::RpmInstFlags ZYppCommitPolicy::rpmInstFlags() const
+ { return _pimpl->_rpmInstFlags; }
+
+ bool ZYppCommitPolicy::rpmNoSignature() const
+ { return _pimpl->_rpmInstFlags.testFlag( target::rpm::RPMINST_NOSIGNATURE ); }
+
+ bool ZYppCommitPolicy::rpmExcludeDocs() const
+ { return _pimpl->_rpmInstFlags.testFlag( target::rpm::RPMINST_EXCLUDEDOCS ); }
+
+
+ ZYppCommitPolicy & ZYppCommitPolicy::syncPoolAfterCommit( bool yesNo_r )
+ { _pimpl->_syncPoolAfterCommit = yesNo_r; return *this; }
+
+ bool ZYppCommitPolicy::syncPoolAfterCommit() const
+ { return _pimpl->_syncPoolAfterCommit; }
+
+
std::ostream & operator<<( std::ostream & str, const ZYppCommitPolicy & obj )
{
str << "CommitPolicy(";
str << " restrictToMedia:" << obj.restrictToMedia();
if ( obj.dryRun() )
str << " dryRun";
+ str << " " << obj.downloadMode();
if ( obj.syncPoolAfterCommit() )
str << " syncPoolAfterCommit";
if ( obj.rpmInstFlags() )
#include <iosfwd>
+#include "zypp/base/PtrTypes.h"
+
#include "zypp/target/rpm/RpmFlags.h"
///////////////////////////////////////////////////////////////////
namespace zypp
{ /////////////////////////////////////////////////////////////////
+ /** Supported commit download policies. */
+ enum DownloadMode
+ {
+ DownloadOnly, //!< Just download all packages to the local cache.
+ //!< Do not install. Implies a dry-run.
+ DownloadInAdvance, //!< First download all packages to the local cache.
+ //!< Then start to install.
+ DownloadInHeaps, //!< Similar to DownloadInAdvance, but try to split
+ //!< the transaction into heaps, where at the end of
+ //!< each heap a consistent system state is reached.
+ DownloadAsNeeded //!< Alternating download and install. Packages are
+ //!< cached just to avid CD/DVD hopping. This is the
+ //!< traditional behaviour.
+ };
+
+ /** \relates DownloadMode Stream output. */
+ std::ostream & operator<<( std::ostream & str, DownloadMode obj );
+
///////////////////////////////////////////////////////////////////
//
// CLASS NAME : ZYppCommitPolicy
/** */
class ZYppCommitPolicy
{
- public:
- ZYppCommitPolicy();
+ public:
+
+ ZYppCommitPolicy();
+
+ public:
+ /** Restrict commit to media 1.
+ * Fake outstanding YCP fix: Honour restriction to media 1
+ * at installation, but install all remaining packages if
+ * post-boot (called with <tt>mediaNr_r > 1</tt>).
+ */
+ ZYppCommitPolicy & restrictToMedia( unsigned mediaNr_r );
+
+ /** Process all media (default) */
+ ZYppCommitPolicy & allMedia()
+ { return restrictToMedia( 0 ); }
+
+ unsigned restrictToMedia() const;
+
+
+ /** Set dry run (default: false).
+ * Dry-run should not change anything on the system, unless
+ * the \ref downloadMode is set to \ref DownloadOnly. In that
+ * case packages are downloaded to the local cache.
+ */
+ ZYppCommitPolicy & dryRun( bool yesNo_r );
- public:
- unsigned restrictToMedia() const
- { return _restrictToMedia; }
+ bool dryRun() const;
- bool dryRun() const
- { return _dryRun; }
- target::rpm::RpmInstFlags rpmInstFlags() const
- { return _rpmInstFlags; }
+ /** Commit download policy to use. (default: \ref DownloadAsNeeded)
+ * \note \ref DownloadOnly also implies a \ref dryRun.
+ */
+ ZYppCommitPolicy & downloadMode( DownloadMode val_r );
- bool rpmNoSignature() const
- { return _rpmInstFlags.testFlag( target::rpm::RPMINST_NOSIGNATURE ); }
+ DownloadMode downloadMode() const;
- bool rpmExcludeDocs() const
- { return _rpmInstFlags.testFlag( target::rpm::RPMINST_EXCLUDEDOCS ); }
+ /** The default \ref target::rpm::RpmInstFlags. (default: none)*/
+ ZYppCommitPolicy & rpmInstFlags( target::rpm::RpmInstFlags newFlags_r );
- bool syncPoolAfterCommit() const
- { return _syncPoolAfterCommit; }
+ /** Use rpm option --nosignature (default: false) */
+ ZYppCommitPolicy & rpmNoSignature( bool yesNo_r );
- public:
- /** Restrict commit to media 1.
- * Fake outstanding YCP fix: Honour restriction to media 1
- * at installation, but install all remaining packages if
- * post-boot (called with <tt>mediaNr_r > 1</tt>).
- */
- ZYppCommitPolicy & restrictToMedia( unsigned mediaNr_r )
- { _restrictToMedia = ( mediaNr_r == 1 ) ? 1 : 0; return *this; }
+ /** Use rpm option --excludedocs (default: false) */
+ ZYppCommitPolicy & rpmExcludeDocs( bool yesNo_r );
- /** Process all media (default) */
- ZYppCommitPolicy & allMedia()
- { return restrictToMedia( 0 ); }
+ target::rpm::RpmInstFlags rpmInstFlags() const;
- /** Set dry run (default: false) */
- ZYppCommitPolicy & dryRun( bool yesNo_r )
- { _dryRun = yesNo_r; return *this; }
+ bool rpmNoSignature() const;
- /** The default \ref target::rpm::RpmInstFlags. (default: none)*/
- ZYppCommitPolicy & rpmInstFlags( target::rpm::RpmInstFlags newFlags_r )
- { _rpmInstFlags = newFlags_r; return *this; }
+ bool rpmExcludeDocs() const;
- /** Use rpm option --nosignature (default: false) */
- ZYppCommitPolicy & rpmNoSignature( bool yesNo_r )
- { _rpmInstFlags.setFlag( target::rpm::RPMINST_NOSIGNATURE, yesNo_r ); return *this; }
- /** Use rpm option --excludedocs (default: false) */
- ZYppCommitPolicy & rpmExcludeDocs( bool yesNo_r )
- { _rpmInstFlags.setFlag( target::rpm::RPMINST_EXCLUDEDOCS, yesNo_r ); return *this; }
+ /** Kepp pool in sync with the Target databases after commit (default: true) */
+ ZYppCommitPolicy & syncPoolAfterCommit( bool yesNo_r );
- /** Kepp pool in sync with the Target databases after commit (default: true) */
- ZYppCommitPolicy & syncPoolAfterCommit( bool yesNo_r )
- { _syncPoolAfterCommit = yesNo_r; return *this; }
+ bool syncPoolAfterCommit() const;
- private:
- unsigned _restrictToMedia;
- bool _dryRun;
- target::rpm::RpmInstFlags _rpmInstFlags;
- bool _syncPoolAfterCommit;
+ public:
+ /** Implementation */
+ class Impl;
+ private:
+ /** Pointer to data. */
+ RWCOW_pointer<Impl> _pimpl;
};
///////////////////////////////////////////////////////////////////