
Author: schubi2 Date: Fri Nov 28 11:35:46 2008 New Revision: 11825 URL: http://svn.opensuse.org/viewcvs/zypp?rev=11825&view=rev Log: Taking solutions which based on user requirements/conflict as sulution "by User" Bug 442718 Modified: trunk/libzypp/zypp/ResStatus.h trunk/libzypp/zypp/solver/detail/SATResolver.cc trunk/libzypp/zypp/solver/detail/SATResolver.h Modified: trunk/libzypp/zypp/ResStatus.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/ResStatus.h?rev=1182... ============================================================================== --- trunk/libzypp/zypp/ResStatus.h (original) +++ trunk/libzypp/zypp/ResStatus.h Fri Nov 28 11:35:46 2008 @@ -291,7 +291,16 @@ TransactByValue getTransactByValue() const { return (TransactByValue)_bitfield.value<TransactByField>(); } - + bool setTransactByValue(TransactByValue causer) + { + if ( isLessThan<TransactByField>( causer ) ) { + fieldValueAssign<TransactByField>( causer ); + return true; + } else { + return false; + } + } + bool isToBeUninstalledDueToObsolete () const { return isToBeUninstalled() && fieldValueIs<TransactDetailField>( DUE_TO_OBSOLETE ); } Modified: trunk/libzypp/zypp/solver/detail/SATResolver.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/solver/detail/SATRes... ============================================================================== --- trunk/libzypp/zypp/solver/detail/SATResolver.cc (original) +++ trunk/libzypp/zypp/solver/detail/SATResolver.cc Fri Nov 28 11:35:46 2008 @@ -429,7 +429,8 @@ }; bool -SATResolver::solving() +SATResolver::solving(const CapabilitySet & requires_caps, + const CapabilitySet & conflict_caps) { _solv = solver_create( _SATPool ); _solv->vendorCheckCb = &vendorCheck; @@ -582,6 +583,30 @@ } } + // Solvables which were selected due requirements which have been made by the user will + // be selected by USER. + // FIXME: The request queue should contains the TransactBy field + for (CapabilitySet::const_iterator iter = requires_caps.begin(); iter != requires_caps.end(); iter++) { + sat::WhatProvides rpmProviders(*iter); + for_( iter2, rpmProviders.begin(), rpmProviders.end() ) { + PoolItem poolItem(*iter2); + if (poolItem.status().isToBeInstalled()) { + MIL << "User requirement " << *iter << " sets " << poolItem << endl; + poolItem.status().setTransactByValue (ResStatus::USER); + } + } + } + for (CapabilitySet::const_iterator iter = conflict_caps.begin(); iter != conflict_caps.end(); iter++) { + sat::WhatProvides rpmProviders(*iter); + for_( iter2, rpmProviders.begin(), rpmProviders.end() ) { + PoolItem poolItem(*iter2); + if (poolItem.status().isToBeUninstalled()) { + MIL << "User conflict " << *iter << " sets " << poolItem << endl; + poolItem.status().setTransactByValue (ResStatus::USER); + } + } + } + if (_solv->problems.count > 0 ) { ERR << "Solverrun finished with an ERROR" << endl; @@ -698,7 +723,7 @@ setLocks(); // solving - bool ret = solving(); + bool ret = solving(requires_caps, conflict_caps); // cleanup if (ret) solverEnd(); // remove solver only if no errors happend. Need it for solving problems Modified: trunk/libzypp/zypp/solver/detail/SATResolver.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/solver/detail/SATRes... ============================================================================== --- trunk/libzypp/zypp/solver/detail/SATResolver.h (original) +++ trunk/libzypp/zypp/solver/detail/SATResolver.h Fri Nov 28 11:35:46 2008 @@ -99,7 +99,8 @@ // Create a SAT solver and reset solver selection in the pool (Collecting void solverInit(const PoolItemList & weakItems); // common solver run with the _jobQueue; Save results back to pool - bool solving(); + bool solving(const CapabilitySet & requires_caps = CapabilitySet(), + const CapabilitySet & conflict_caps = CapabilitySet()); // cleanup solver void solverEnd(); // set locks for the solver -- To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org For additional commands, e-mail: zypp-commit+help@opensuse.org