Obsoletes: yast2-packagemanager
Recommends: logrotate
BuildRequires: cmake
-BuildRequires: libsatsolver-devel >= 0.14.5
+BuildRequires: libsatsolver-devel >= 0.14.9
BuildRequires: openssl-devel
BuildRequires: boost-devel curl-devel dejagnu doxygen gcc-c++ gettext-devel graphviz hal-devel libxml2-devel
--- /dev/null
+<channel><subchannel>
+<product>
+ <name>Product</name>
+ <vendor>openSUSE</vendor>
+ <history><update>
+ <arch>i586</arch>
+ <version>1</version>
+ <release>1</release>
+ </update></history>
+</product>
+<package>
+ <name>release-package</name>
+ <vendor>openSUSE</vendor>
+ <history><update>
+ <arch>i586</arch>
+ <version>1</version>
+ <release>1</release>
+ </update></history>
+ <provides>
+ <dep name='product()'/>
+ <dep name='product(Product)' op='==' version='1' release='1' />
+ </provides>
+</package>
+
+<package>
+ <name>glibc</name>
+ <vendor>openSUSE</vendor>
+ <history><update>
+ <arch>i586</arch>
+ <version>1</version>
+ <release>1</release>
+ </update></history>
+ <requires>
+ <dep name='dropped_required'/>
+ </requires>
+</package>
+<package>
+ <name>dropped_required</name>
+ <vendor>openSUSE</vendor>
+ <history><update>
+ <arch>i586</arch>
+ <version>1</version>
+ <release>1</release>
+ </update></history>
+</package>
+<package>
+ <name>dropped</name>
+ <vendor>openSUSE</vendor>
+ <history><update>
+ <arch>i586</arch>
+ <version>1</version>
+ <release>1</release>
+ </update></history>
+</package>
+</subchannel></channel>
--- /dev/null
+<?xml version="1.0"?>
+<test>
+<setup arch="x86_64">
+ <system file="solver-system.xml"/>
+ <!--
+ - alias : update
+ - url : http://foo.org/distribution/update
+ -->
+ <channel file="update.xml" name="update" priority="10" />
+ <locale name="en_US" />
+ <locale name="de" />
+</setup>
+</test>
--- /dev/null
+<channel><subchannel>
+<product>
+ <name>Product</name>
+ <vendor>openSUSE</vendor>
+ <history><update>
+ <arch>i586</arch>
+ <version>2</version>
+ <release>1</release>
+ </update></history>
+</product>
+<package>
+ <name>release-package</name>
+ <vendor>openSUSE</vendor>
+ <history><update>
+ <arch>i586</arch>
+ <version>2</version>
+ <release>1</release>
+ </update></history>
+ <provides>
+ <dep name='product()'/>
+ <dep name='product(Product)' op='==' version='2' release='1' />
+ <dep name='weakremover(dropped_required)'/>
+ <dep name='weakremover(dropped)'/>
+ </provides>
+</package>
+
+<package>
+ <name>package</name>
+ <vendor>openSUSE</vendor>
+ <history><update>
+ <arch>i586</arch>
+ <version>2</version>
+ <release>1</release>
+ </update></history>
+</package>
+</subchannel></channel>
Capabilities
CheckSum
Date
+ Dup
Digest
Deltarpm
Edition
--- /dev/null
+#include "TestSetup.h"
+#include "zypp/ResPool.h"
+#include "zypp/ResPoolProxy.h"
+#include "zypp/pool/PoolStats.h"
+#include "zypp/ui/Selectable.h"
+
+#define BOOST_TEST_MODULE Dup
+
+/////////////////////////////////////////////////////////////////////////////
+
+static TestSetup test;
+
+template <class _Iterator>
+std::ostream & vdumpPoolStats( std::ostream & str, _Iterator begin_r, _Iterator end_r )
+{
+ pool::PoolStats stats;
+ for_( it, begin_r, end_r )
+ {
+ str << *it << endl;
+ stats( *it );
+ }
+ return str << stats;
+}
+
+bool upgrade()
+{
+ bool rres = false;
+ {
+ rres = getZYpp()->resolver()->doUpgrade();
+ }
+ if ( ! rres )
+ {
+ ERR << "upgrade " << rres << endl;
+ getZYpp()->resolver()->problems();
+ return false;
+ }
+ MIL << "upgrade " << rres << endl;
+ vdumpPoolStats( USR << "Transacting:"<< endl,
+ make_filter_begin<resfilter::ByTransact>(test.pool()),
+ make_filter_end<resfilter::ByTransact>(test.pool()) ) << endl;
+ return true;
+}
+
+
+BOOST_AUTO_TEST_CASE(testcase_init)
+{
+ //zypp::base::LogControl::instance().logToStdErr();
+ test.loadTestcaseRepos( TESTS_SRC_DIR"/data/TCdup" );
+ dumpRange( USR, test.pool().knownRepositoriesBegin(),
+ test.pool().knownRepositoriesEnd() ) << endl;
+ USR << "pool: " << test.pool() << endl;
+ BOOST_REQUIRE( upgrade() );
+}
+/////////////////////////////////////////////////////////////////////////////
+
+BOOST_AUTO_TEST_CASE(orphaned)
+{
+ ResPoolProxy proxy( test.poolProxy() );
+ BOOST_CHECK_EQUAL( proxy.lookup( ResKind::package, "glibc" )->status(), ui::S_KeepInstalled );
+ BOOST_CHECK_EQUAL( proxy.lookup( ResKind::package, "release-package" )->status(), ui::S_AutoUpdate );
+ BOOST_CHECK_EQUAL( proxy.lookup( ResKind::package, "dropped_required" )->status(), ui::S_KeepInstalled );
+ BOOST_CHECK_EQUAL( proxy.lookup( ResKind::package, "dropped" )->status(), ui::S_AutoDel );
+}
#include "zypp/solver/detail/Helper.h"
#include "zypp/base/String.h"
+#include "zypp/Product.h"
#include "zypp/Capability.h"
#include "zypp/ResStatus.h"
#include "zypp/VendorAttr.h"
-#include "zypp/base/Logger.h"
+#include "zypp/base/LogTools.h"
#include "zypp/base/String.h"
#include "zypp/base/Gettext.h"
#include "zypp/base/Algorithm.h"
queue_push( &(_jobQueue), SOLVER_NOOBSOLETES_SOLVABLE_NAME );
queue_push( &(_jobQueue), it->id() );
}
+
+ if ( _distupgrade )
+ {
+ if ( ZConfig::instance().solverUpgradeRemoveDropedPackages() )
+ {
+ MIL << "Checking droplists ..." << endl;
+ // Dropped packages: look for 'weakremover()' provides
+ // in dup candidates of installed products.
+ ResPoolProxy proxy( ResPool::instance().proxy() );
+ for_( it, proxy.byKindBegin<Product>(), proxy.byKindEnd<Product>() )
+ {
+ if ( (*it)->onSystem() ) // (to install) or (not to delete)
+ {
+ CapabilitySet droplist( (*it)->candidateAsKind<Product>()->droplist() );
+ dumpRangeLine( MIL << "Droplist for " << (*it)->candidateObj() << ": " << droplist.size() << " ", droplist.begin(), droplist.end() ) << endl;
+ for_( cap, droplist.begin(), droplist.end() )
+ {
+ queue_push( &_jobQueue, SOLVER_DROP_ORPHANED|SOLVER_SOLVABLE_NAME );
+ queue_push( &_jobQueue, cap->id() );
+ }
+ }
+ }
+ }
+ else
+ {
+ MIL << "Droplist processing is disabled." << endl;
+ }
+ }
}
void