ref: refs/heads/ma-misc
commit fad0c47e501311dfe37c7eca852795b9adc75ece
Author: Michael Andres
Date: Fri Jul 17 13:28:49 2009 +0200
backup
---
devel/devel.ma/Main.cc | 46 ++++++++++++++++---
devel/devel.ma/NewPool.cc | 56 +++++++++--------------
zypp/ZYppCommitPolicy.cc | 105 +++++++++++++++++++++++++++++++++++++++++--
zypp/ZYppCommitPolicy.h | 108 ++++++++++++++++++++++++++-------------------
4 files changed, 223 insertions(+), 92 deletions(-)
diff --git a/devel/devel.ma/Main.cc b/devel/devel.ma/Main.cc
index 55c0f42..5742dd1 100644
--- a/devel/devel.ma/Main.cc
+++ b/devel/devel.ma/Main.cc
@@ -1,11 +1,13 @@
#include "Tools.h"
#include
+#include
///////////////////////////////////////////////////////////////////
//static const Pathname sysRoot( getenv("SYSROOT") ? getenv("SYSROOT") : "/Local/ROOT" );
static const Pathname sysRoot( "/tmp/Local/ma/DNL-test" );
+//static const Pathname sysRoot( "/" );
///////////////////////////////////////////////////////////////////
@@ -14,17 +16,45 @@ bool solve()
bool rres = false;
{
//zypp::base::LogControl::TmpLineWriter shutUp;
- //rres = test.resolver().resolvePool();
+ rres = getZYpp()->resolver()->resolvePool();
}
if ( ! rres )
{
ERR << "resolve " << rres << endl;
+ getZYpp()->resolver()->problems();
return false;
}
MIL << "resolve " << rres << endl;
return true;
}
+bool upgrade()
+{
+ bool rres = false;
+ {
+ //zypp::base::LogControl::TmpLineWriter shutUp;
+ Measure x( "Upgrade" );
+ rres = getZYpp()->resolver()->doUpgrade();
+ }
+ if ( ! rres )
+ {
+ Measure x( "Upgrade Error" );
+ ERR << "upgrade " << rres << endl;
+ getZYpp()->resolver()->problems();
+ return false;
+ }
+ MIL << "upgrade " << rres << endl;
+ return true;
+}
+
+namespace zypp
+{
+ namespace target
+ {
+ void writeUpgradeTestcase();
+ }
+}
+
int main( int argc, char * argv[] )
try {
--argc;
@@ -41,12 +71,14 @@ try {
USR << "pool: " << pool << endl;
///////////////////////////////////////////////////////////////////
-
- getZYpp()->resolver()->addRequire( Capability("xteddy") );
- solve();
- vdumpPoolStats( USR << "Transacting:"<< endl,
- make_filter_beginresfilter::ByTransact(pool),
- make_filter_endresfilter::ByTransact(pool) ) << endl;
+ if ( 1 /*upgrade()*/ )
+ {
+ getZYpp()->resolver()->addRequire( Capability("emacs") );
+ solve();
+ vdumpPoolStats( USR << "Transacting:"<< endl,
+ make_filter_beginresfilter::ByTransact(pool),
+ make_filter_endresfilter::ByTransact(pool) ) << endl;
+ }
///////////////////////////////////////////////////////////////////
diff --git a/devel/devel.ma/NewPool.cc b/devel/devel.ma/NewPool.cc
index 260195b..6e2cee8 100644
--- a/devel/devel.ma/NewPool.cc
+++ b/devel/devel.ma/NewPool.cc
@@ -486,10 +486,6 @@ try {
INT << "===[START]==========================================" << endl;
ZConfig::instance();
- USR << ZConfig::instance().rpmInstallFlags() << endl;
-
- return 0;
-
ResPool pool( ResPool::instance() );
sat::Pool satpool( sat::Pool::instance() );
@@ -601,13 +597,29 @@ try {
PoolQuery q;
q.setCaseSensitive( false );
q.setMatchSubstring();
- q.addString( "xteddy" );
- q.addDependency( sat::SolvAttr::provides, "libzypp", Rel::EQ, Edition("4.2.6") );
- q.addDependency( sat::SolvAttr::name, "zypper", Rel::LE, Edition("4.2.6") );
- //q.addDependency( sat::SolvAttr::name, Capability("kernel-default") );
- q.addKind( ResKind::package );
- querycompare( q );
+ q.addAttribute(sat::SolvAttr::updateReferenceType, "bugzilla");
+
+ // Iterate the result:
+ for_( solvIter, q.begin(), q.end() )
+ {
+ sat::Solvable solvable( *solvIter );
+ MIL << "Found matches in " << solvable << endl;
+ MIL << " " << solvIter.base() << endl;
+
+ for_( attrIter, solvIter.matchesBegin(), solvIter.matchesEnd() )
+ {
+ sat::LookupAttr::iterator attr( *attrIter );
+ DBG << " " << attr.inSolvAttr() << "\t\"" << attr.asString() << "\"" << endl;
+ for_( s, attrIter->subBegin(), attrIter->subEnd() )
+ {
+ DBG << " -" << s.inSolvAttr() << "\t\"" << s.asString() << "\"" << endl;
+ }
+ }
+ }
+
+
}
+
//////////////////////////////////////////////////////////////////
INT << "===[END]============================================" << endl << endl;
zypp::base::LogControl::instance().logNothing();
@@ -637,30 +649,6 @@ try {
querycompare( q, false );
}
- {
- PoolQuery q;
- q.setCaseSensitive( false );
- q.setMatchSubstring();
- q.addDependency( sat::SolvAttr::provides, "libzypp" );
- q.addKind( ResKind::package );
- querycompare( q, false );
-
- q.setMatchExact();
- querycompare( q, false );
-
- q.addString( "xteddy" );
- querycompare( q, false );
- }
- {
- PoolQuery q;
- q.setCaseSensitive( false );
- q.setMatchExact();
- q.addKind( ResKind::package );
-
- q.addDependency( sat::SolvAttr::provides, "xteddy" );
- querycompare( q, false );
- }
-
#if 0
getZYpp()->resolver()->addRequire( Capability("amarok") );
diff --git a/zypp/ZYppCommitPolicy.cc b/zypp/ZYppCommitPolicy.cc
index 05c2c6d..c39c25c 100644
--- a/zypp/ZYppCommitPolicy.cc
+++ b/zypp/ZYppCommitPolicy.cc
@@ -15,20 +15,114 @@
#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( DownloadImHeaps );
+ 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(";
@@ -36,6 +130,7 @@ namespace zypp
str << " restrictToMedia:" << obj.restrictToMedia();
if ( obj.dryRun() )
str << " dryRun";
+ str << " " << obj.downloadMode();
if ( obj.syncPoolAfterCommit() )
str << " syncPoolAfterCommit";
if ( obj.rpmInstFlags() )
diff --git a/zypp/ZYppCommitPolicy.h b/zypp/ZYppCommitPolicy.h
index 90b79d3..7d5f8d7 100644
--- a/zypp/ZYppCommitPolicy.h
+++ b/zypp/ZYppCommitPolicy.h
@@ -14,12 +14,32 @@
#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.
+ DownloadInAdvance, //!< First download all packages to the local cache.
+ //!< Then start to install.
+ DownloadImHeaps, //!< 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
@@ -27,67 +47,63 @@ namespace zypp
/** */
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) */
+ 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) */
+ 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;
};
///////////////////////////////////////////////////////////////////
--
To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org
For additional commands, e-mail: zypp-commit+help@opensuse.org