Author: schubi2 Date: Fri Sep 21 15:50:02 2007 New Revision: 7329 URL: http://svn.opensuse.org/viewcvs/zypp?rev=7329&view=rev Log: Checking the queue if an item will be deleted. If yes, the requirements are not needed anymore. Bug 326384 Modified: trunk/libzypp/zypp/solver/detail/QueueItem.h trunk/libzypp/zypp/solver/detail/QueueItemBranch.cc trunk/libzypp/zypp/solver/detail/QueueItemBranch.h trunk/libzypp/zypp/solver/detail/QueueItemConflict.cc trunk/libzypp/zypp/solver/detail/QueueItemConflict.h trunk/libzypp/zypp/solver/detail/QueueItemEstablish.cc trunk/libzypp/zypp/solver/detail/QueueItemEstablish.h trunk/libzypp/zypp/solver/detail/QueueItemGroup.cc trunk/libzypp/zypp/solver/detail/QueueItemGroup.h trunk/libzypp/zypp/solver/detail/QueueItemInstall.cc trunk/libzypp/zypp/solver/detail/QueueItemInstall.h trunk/libzypp/zypp/solver/detail/QueueItemRequire.cc trunk/libzypp/zypp/solver/detail/QueueItemRequire.h trunk/libzypp/zypp/solver/detail/QueueItemUninstall.cc trunk/libzypp/zypp/solver/detail/QueueItemUninstall.h trunk/libzypp/zypp/solver/detail/ResolverContext.cc trunk/libzypp/zypp/solver/detail/ResolverQueue.cc Modified: trunk/libzypp/zypp/solver/detail/QueueItem.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/solver/detail/QueueItem.h?rev=7329&r1=7328&r2=7329&view=diff ============================================================================== --- trunk/libzypp/zypp/solver/detail/QueueItem.h (original) +++ trunk/libzypp/zypp/solver/detail/QueueItem.h Fri Sep 21 15:50:02 2007 @@ -113,7 +113,7 @@ bool isUninstall (void) const { return _type == QUEUE_ITEM_TYPE_UNINSTALL; } bool isEstablish (void) const { return _type == QUEUE_ITEM_TYPE_ESTABLISH; } - virtual bool process (ResolverContext_Ptr context, QueueItemList & qil) = 0; + virtual bool process (const QueueItemList & mainQueue, ResolverContext_Ptr context, QueueItemList & qil) = 0; virtual QueueItem_Ptr copy (void) const = 0; virtual int cmp (QueueItem_constPtr item) const = 0; int compare (QueueItem_constPtr item) const { return CMP(_type, item->_type); } Modified: trunk/libzypp/zypp/solver/detail/QueueItemBranch.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/solver/detail/QueueItemBranch.cc?rev=7329&r1=7328&r2=7329&view=diff ============================================================================== --- trunk/libzypp/zypp/solver/detail/QueueItemBranch.cc (original) +++ trunk/libzypp/zypp/solver/detail/QueueItemBranch.cc Fri Sep 21 15:50:02 2007 @@ -129,7 +129,7 @@ //--------------------------------------------------------------------------- bool -QueueItemBranch::process (ResolverContext_Ptr context, QueueItemList & qil) +QueueItemBranch::process (const QueueItemList & mainQueue, ResolverContext_Ptr context, QueueItemList & qil) { _XDEBUG("QueueItemBranch::process(" << *this << ")"); @@ -165,7 +165,7 @@ /* If we just have one possible item, process it. */ QueueItem_Ptr item = live_branches.front(); - did_something = item->process (context, qil); + did_something = item->process (mainQueue, context, qil); /* Set the item pointer to NULL inside of our original branch item, since our call to rc_queue_item_process is now Modified: trunk/libzypp/zypp/solver/detail/QueueItemBranch.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/solver/detail/QueueItemBranch.h?rev=7329&r1=7328&r2=7329&view=diff ============================================================================== --- trunk/libzypp/zypp/solver/detail/QueueItemBranch.h (original) +++ trunk/libzypp/zypp/solver/detail/QueueItemBranch.h Fri Sep 21 15:50:02 2007 @@ -73,7 +73,7 @@ // ---------------------------------- methods - virtual bool process (ResolverContext_Ptr context, QueueItemList & qil); + virtual bool process (const QueueItemList & mainQueue, ResolverContext_Ptr context, QueueItemList & qil); virtual QueueItem_Ptr copy (void) const; virtual int cmp (QueueItem_constPtr item) const; virtual bool isRedundant (ResolverContext_Ptr context) const { return false; } Modified: trunk/libzypp/zypp/solver/detail/QueueItemConflict.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/solver/detail/QueueItemConflict.cc?rev=7329&r1=7328&r2=7329&view=diff ============================================================================== --- trunk/libzypp/zypp/solver/detail/QueueItemConflict.cc (original) +++ trunk/libzypp/zypp/solver/detail/QueueItemConflict.cc Fri Sep 21 15:50:02 2007 @@ -325,7 +325,7 @@ bool -QueueItemConflict::process (ResolverContext_Ptr context, QueueItemList & new_items) +QueueItemConflict::process (const QueueItemList & mainQueue, ResolverContext_Ptr context, QueueItemList & new_items) { _XDEBUG("QueueItemConflict::process(" << *this << ")"); Modified: trunk/libzypp/zypp/solver/detail/QueueItemConflict.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/solver/detail/QueueItemConflict.h?rev=7329&r1=7328&r2=7329&view=diff ============================================================================== --- trunk/libzypp/zypp/solver/detail/QueueItemConflict.h (original) +++ trunk/libzypp/zypp/solver/detail/QueueItemConflict.h Fri Sep 21 15:50:02 2007 @@ -78,7 +78,7 @@ // ---------------------------------- methods - virtual bool process (ResolverContext_Ptr context, QueueItemList & qil); + virtual bool process (const QueueItemList & mainQueue, ResolverContext_Ptr context, QueueItemList & qil); virtual QueueItem_Ptr copy (void) const; virtual int cmp (QueueItem_constPtr item) const; virtual bool isRedundant (ResolverContext_Ptr context) const { return false; } Modified: trunk/libzypp/zypp/solver/detail/QueueItemEstablish.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/solver/detail/QueueItemEstablish.cc?rev=7329&r1=7328&r2=7329&view=diff ============================================================================== --- trunk/libzypp/zypp/solver/detail/QueueItemEstablish.cc (original) +++ trunk/libzypp/zypp/solver/detail/QueueItemEstablish.cc Fri Sep 21 15:50:02 2007 @@ -25,6 +25,7 @@ #include "zypp/solver/detail/QueueItemInstall.h" #include "zypp/solver/detail/QueueItemRequire.h" #include "zypp/solver/detail/QueueItemConflict.h" +#include "zypp/solver/detail/QueueItemUninstall.h" #include "zypp/solver/detail/QueueItem.h" #include "zypp/solver/detail/Helper.h" #include "zypp/solver/detail/ResolverContext.h" @@ -95,7 +96,7 @@ bool -QueueItemEstablish::process (ResolverContext_Ptr context, QueueItemList & qil) +QueueItemEstablish::process (const QueueItemList & mainQueue, ResolverContext_Ptr context, QueueItemList & qil) { _XDEBUG("QueueItemEstablish::process(" << *this << ")"); @@ -241,6 +242,30 @@ { _XDEBUG("Atom/Patch/Installed/Establishing " << _item << " has unfulfilled requirement " << *iter << " -> incomplete"); context->incomplete( _item, _other_penalty ); + + // if something installed goes 'incomplete' outside of the establishing call, its always an error + if ( status.staysInstalled() + &&!context->establishing()) { + + // last check if the item will be deleted. + // (check the queue, if there is a delete request) + QueueItemList::const_iterator iterQueue; + for (iterQueue = mainQueue.begin(); iterQueue != mainQueue.end(); iterQueue++) { + QueueItem_Ptr qitem = *iterQueue; + if (qitem->isUninstall()) { + QueueItemUninstall_Ptr uninstall = dynamic_pointer_cast<QueueItemUninstall>(qitem); + if (uninstall->deletedItem() == _item) { + _DEBUG(_item << " will be uninstalled later. So, we do not have to inform the user."); + break; + } + } + } + + if (iterQueue == mainQueue.end()) { + ResolverInfo_Ptr misc_info = new ResolverInfoMisc (RESOLVER_INFO_TYPE_INCOMPLETES, _item, RESOLVER_INFO_PRIORITY_VERBOSE); + context->addError (misc_info); + } + } } else { _XDEBUG("Transacted " << _item << " has unfulfilled requirement " << *iter << " -> leave"); Modified: trunk/libzypp/zypp/solver/detail/QueueItemEstablish.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/solver/detail/QueueItemEstablish.h?rev=7329&r1=7328&r2=7329&view=diff ============================================================================== --- trunk/libzypp/zypp/solver/detail/QueueItemEstablish.h (original) +++ trunk/libzypp/zypp/solver/detail/QueueItemEstablish.h Fri Sep 21 15:50:02 2007 @@ -80,7 +80,7 @@ // ---------------------------------- methods - virtual bool process (ResolverContext_Ptr context, QueueItemList & qil); + virtual bool process (const QueueItemList & mainQueue, ResolverContext_Ptr context, QueueItemList & qil); virtual QueueItem_Ptr copy (void) const; virtual int cmp (QueueItem_constPtr item) const; Modified: trunk/libzypp/zypp/solver/detail/QueueItemGroup.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/solver/detail/QueueItemGroup.cc?rev=7329&r1=7328&r2=7329&view=diff ============================================================================== --- trunk/libzypp/zypp/solver/detail/QueueItemGroup.cc (original) +++ trunk/libzypp/zypp/solver/detail/QueueItemGroup.cc Fri Sep 21 15:50:02 2007 @@ -63,7 +63,7 @@ //--------------------------------------------------------------------------- bool -QueueItemGroup::process (ResolverContext_Ptr context, QueueItemList & new_items) +QueueItemGroup::process (const QueueItemList & mainQueue, ResolverContext_Ptr context, QueueItemList & new_items) { _DEBUG( "QueueItemGroup::process" ); Modified: trunk/libzypp/zypp/solver/detail/QueueItemGroup.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/solver/detail/QueueItemGroup.h?rev=7329&r1=7328&r2=7329&view=diff ============================================================================== --- trunk/libzypp/zypp/solver/detail/QueueItemGroup.h (original) +++ trunk/libzypp/zypp/solver/detail/QueueItemGroup.h Fri Sep 21 15:50:02 2007 @@ -65,7 +65,7 @@ // ---------------------------------- methods - virtual bool process (ResolverContext_Ptr context, QueueItemList & qil); + virtual bool process (const QueueItemList & mainQueue, ResolverContext_Ptr context, QueueItemList & qil); virtual QueueItem_Ptr copy (void) const; virtual int cmp (QueueItem_constPtr item) const; virtual bool isRedundant (ResolverContext_Ptr context) const { return false; } Modified: trunk/libzypp/zypp/solver/detail/QueueItemInstall.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/solver/detail/QueueItemInstall.cc?rev=7329&r1=7328&r2=7329&view=diff ============================================================================== --- trunk/libzypp/zypp/solver/detail/QueueItemInstall.cc (original) +++ trunk/libzypp/zypp/solver/detail/QueueItemInstall.cc Fri Sep 21 15:50:02 2007 @@ -279,7 +279,7 @@ //--------------------------------------------------------------------------------------- bool -QueueItemInstall::process (ResolverContext_Ptr context, QueueItemList & qil) +QueueItemInstall::process (const QueueItemList & mainQueue, ResolverContext_Ptr context, QueueItemList & qil) { ResStatus status = context->getStatus(_item); Modified: trunk/libzypp/zypp/solver/detail/QueueItemInstall.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/solver/detail/QueueItemInstall.h?rev=7329&r1=7328&r2=7329&view=diff ============================================================================== --- trunk/libzypp/zypp/solver/detail/QueueItemInstall.h (original) +++ trunk/libzypp/zypp/solver/detail/QueueItemInstall.h Fri Sep 21 15:50:02 2007 @@ -89,7 +89,7 @@ // ---------------------------------- methods - virtual bool process (ResolverContext_Ptr context, QueueItemList & qil); + virtual bool process (const QueueItemList & mainQueue, ResolverContext_Ptr context, QueueItemList & qil); virtual QueueItem_Ptr copy (void) const; virtual int cmp (QueueItem_constPtr item) const; Modified: trunk/libzypp/zypp/solver/detail/QueueItemRequire.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/solver/detail/QueueItemRequire.cc?rev=7329&r1=7328&r2=7329&view=diff ============================================================================== --- trunk/libzypp/zypp/solver/detail/QueueItemRequire.cc (original) +++ trunk/libzypp/zypp/solver/detail/QueueItemRequire.cc Fri Sep 21 15:50:02 2007 @@ -491,7 +491,8 @@ //---------------------------------------------------------------------------- bool -QueueItemRequire::process (ResolverContext_Ptr context, QueueItemList & new_items) +QueueItemRequire::process (const QueueItemList & mainQueue, + ResolverContext_Ptr context, QueueItemList & new_items) { _XDEBUG("QueueItemRequire::process(" << *this << ")"); Modified: trunk/libzypp/zypp/solver/detail/QueueItemRequire.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/solver/detail/QueueItemRequire.h?rev=7329&r1=7328&r2=7329&view=diff ============================================================================== --- trunk/libzypp/zypp/solver/detail/QueueItemRequire.h (original) +++ trunk/libzypp/zypp/solver/detail/QueueItemRequire.h Fri Sep 21 15:50:02 2007 @@ -87,7 +87,7 @@ // ---------------------------------- methods - virtual bool process (ResolverContext_Ptr context, QueueItemList & qil); + virtual bool process (const QueueItemList & mainQueue, ResolverContext_Ptr context, QueueItemList & qil); virtual QueueItem_Ptr copy (void) const; virtual int cmp (QueueItem_constPtr item) const; virtual bool isRedundant (ResolverContext_Ptr context) const { return false; } Modified: trunk/libzypp/zypp/solver/detail/QueueItemUninstall.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/solver/detail/QueueItemUninstall.cc?rev=7329&r1=7328&r2=7329&view=diff ============================================================================== --- trunk/libzypp/zypp/solver/detail/QueueItemUninstall.cc (original) +++ trunk/libzypp/zypp/solver/detail/QueueItemUninstall.cc Fri Sep 21 15:50:02 2007 @@ -314,7 +314,7 @@ bool -QueueItemUninstall::process (ResolverContext_Ptr context, QueueItemList & qil) +QueueItemUninstall::process (const QueueItemList & mainQueue, ResolverContext_Ptr context, QueueItemList & qil) { ResStatus status = context->getStatus(_item); Modified: trunk/libzypp/zypp/solver/detail/QueueItemUninstall.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/solver/detail/QueueItemUninstall.h?rev=7329&r1=7328&r2=7329&view=diff ============================================================================== --- trunk/libzypp/zypp/solver/detail/QueueItemUninstall.h (original) +++ trunk/libzypp/zypp/solver/detail/QueueItemUninstall.h Fri Sep 21 15:50:02 2007 @@ -94,10 +94,11 @@ void setDueToObsolete (const PoolItem_Ref item) { _due_to_obsolete = true; _obsoletes_item = item; } void setUnlink (void); + PoolItem_Ref deletedItem(void) const { return _item; } // ---------------------------------- methods - virtual bool process (ResolverContext_Ptr context, QueueItemList & qil); + virtual bool process (const QueueItemList & mainQueue, ResolverContext_Ptr context, QueueItemList & qil); virtual QueueItem_Ptr copy (void) const; virtual int cmp (QueueItem_constPtr item) const; virtual bool isRedundant (ResolverContext_Ptr context) const { return false; } Modified: trunk/libzypp/zypp/solver/detail/ResolverContext.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/solver/detail/ResolverContext.cc?rev=7329&r1=7328&r2=7329&view=diff ============================================================================== --- trunk/libzypp/zypp/solver/detail/ResolverContext.cc (original) +++ trunk/libzypp/zypp/solver/detail/ResolverContext.cc Fri Sep 21 15:50:02 2007 @@ -672,16 +672,6 @@ else { setStatus (item, ResStatus::needed); } - - return true; - } - - // if something installed goes 'incomplete' outside of the establishing call, its always an error - - if (status.staysInstalled()) { - ResolverInfo_Ptr misc_info = new ResolverInfoMisc (RESOLVER_INFO_TYPE_INCOMPLETES, item, RESOLVER_INFO_PRIORITY_VERBOSE); - addError (misc_info); - return false; } return true; Modified: trunk/libzypp/zypp/solver/detail/ResolverQueue.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/solver/detail/ResolverQueue.cc?rev=7329&r1=7328&r2=7329&view=diff ============================================================================== --- trunk/libzypp/zypp/solver/detail/ResolverQueue.cc (original) +++ trunk/libzypp/zypp/solver/detail/ResolverQueue.cc Fri Sep 21 15:50:02 2007 @@ -228,7 +228,7 @@ _XDEBUG( "=====> 1st pass: [" << *qitem << "]"); QueueItemList::iterator next = iter; ++next; if (qitem && qitem->priority() == max_priority) { - if (qitem->process (_context, new_qitems)) { + if (qitem->process (_qitems, _context, new_qitems)) { did_something_recently = true; } _qitems.erase (iter); -- To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org For additional commands, e-mail: zypp-commit+help@opensuse.org