Author: dmacvicar
Date: Tue Apr 8 17:40:16 2008
New Revision: 9472
URL: http://svn.opensuse.org/viewcvs/zypp?rev=9472&view=rev
Log:
- Selectable deserves a cleanup, some consistency.
- Having setFoo and set_bar in the same API is worse than killing kittens
- Use PoolItems everywhere
- add multiple installed support
- more coming
Modified:
trunk/libzypp/zypp/ResPoolProxy.cc
trunk/libzypp/zypp/ui/SelFilters.h
trunk/libzypp/zypp/ui/Selectable.cc
trunk/libzypp/zypp/ui/Selectable.h
trunk/libzypp/zypp/ui/SelectableImpl.cc
trunk/libzypp/zypp/ui/SelectableImpl.h
trunk/libzypp/zypp/ui/SelectableTraits.h
trunk/libzypp/zypp/ui/UserWantedPackages.cc
Modified: trunk/libzypp/zypp/ResPoolProxy.cc
URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/ResPoolProxy.cc?rev=9472&r1=9471&r2=9472&view=diff
==============================================================================
--- trunk/libzypp/zypp/ResPoolProxy.cc (original)
+++ trunk/libzypp/zypp/ResPoolProxy.cc Tue Apr 8 17:40:16 2008
@@ -96,12 +96,13 @@
ui::Selectable::Ptr buildSelectable( const ResObject::Kind & kind_r,
const std::string & name_r,
- const PoolItem & installedItem_r,
+ const ItemC & installed,
const ItemC & available )
{
return ui::Selectable::Ptr( new ui::Selectable(
ui::Selectable::Impl_Ptr( new ui::Selectable::Impl( kind_r, name_r,
- installedItem_r,
+ installed.begin(),
+ installed.end(),
available.begin(),
available.end() ) )
) );
@@ -122,20 +123,10 @@
const ItemC & installed( nameIt->second.installed );
const ItemC & available( nameIt->second.available );
- if ( installed.empty() )
- {
- if ( available.empty() )
+ if ( installed.empty() && available.empty() )
continue;
- _selPool[kindIt->first].insert( buildSelectable( kindIt->first, nameIt->first, PoolItem(), available ) );
- }
else
- {
- // ui want's one Selectable per installed item
- for ( ItemC::const_iterator instIt = installed.begin(); instIt != installed.end(); ++instIt )
- {
- _selPool[kindIt->first].insert( buildSelectable( kindIt->first, nameIt->first, *instIt, available ) );
- }
- }
+ _selPool[kindIt->first].insert( buildSelectable( kindIt->first, nameIt->first, installed, available ) );
}
}
}
Modified: trunk/libzypp/zypp/ui/SelFilters.h
URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/ui/SelFilters.h?rev=9472&r1=9471&r2=9472&view=diff
==============================================================================
--- trunk/libzypp/zypp/ui/SelFilters.h (original)
+++ trunk/libzypp/zypp/ui/SelFilters.h Tue Apr 8 17:40:16 2008
@@ -61,7 +61,7 @@
struct ByHasInstalledObj : public SelectableFilterFunctor
{
bool operator()( const ui::Selectable::constPtr & obj ) const
- { return obj && obj->hasInstalledObj(); }
+ { return obj && !obj->installedEmpty(); }
};
/** */
Modified: trunk/libzypp/zypp/ui/Selectable.cc
URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/ui/Selectable.cc?rev=9472&r1=9471&r2=9472&view=diff
==============================================================================
--- trunk/libzypp/zypp/ui/Selectable.cc (original)
+++ trunk/libzypp/zypp/ui/Selectable.cc Tue Apr 8 17:40:16 2008
@@ -55,44 +55,57 @@
Status Selectable::status() const
{ return _pimpl->status(); }
- bool Selectable::set_status( const Status state_r )
- { return _pimpl->set_status( state_r ); }
+ bool Selectable::setStatus( const Status state_r )
+ { return _pimpl->setStatus( state_r ); }
- ResObject::constPtr Selectable::installedObj() const
+ PoolItem Selectable::installedObj() const
{ return _pimpl->installedObj(); }
- PoolItem Selectable::installedPoolItem() const
- { return _pimpl->installedObj(); }
-
- ResObject::constPtr Selectable::candidateObj() const
+ PoolItem Selectable::candidateObj() const
{ return _pimpl->candidateObj(); }
- PoolItem Selectable::candidatePoolItem() const
- { return _pimpl->candidateObj(); }
-
- ResObject::constPtr Selectable::setCandidate( ResObject::constPtr byUser_r )
+ PoolItem Selectable::setCandidate( ResObject::constPtr byUser_r )
{ return _pimpl->setCandidate( byUser_r ); }
- ResObject::constPtr Selectable::theObj() const
+ PoolItem Selectable::theObj() const
{ return _pimpl->theObj(); }
- Selectable::size_type Selectable::availableObjs() const
- { return _pimpl->availableObjs(); }
+ ////////////////////////////////////////////////////////////////////////
- Selectable::available_iterator Selectable::availableBegin() const
- { return make_transform_iterator( _pimpl->availableBegin(),
- SelectableTraits::TransformToResObjectPtr() ); }
+ bool Selectable::availableEmpty() const
+ { return _pimpl->availableEmpty(); }
- Selectable::available_iterator Selectable::availableEnd() const
- { return make_transform_iterator( _pimpl->availableEnd(),
- SelectableTraits::TransformToResObjectPtr() ); }
+ Selectable::available_size_type Selectable::availableSize() const
+ { return _pimpl->availableSize(); }
- Selectable::availablePoolItem_iterator Selectable::availablePoolItemBegin() const
+ Selectable::available_iterator Selectable::availableBegin() const
{ return _pimpl->availableBegin(); }
-
- Selectable::availablePoolItem_iterator Selectable::availablePoolItemEnd() const
+
+ Selectable::available_iterator Selectable::availableEnd() const
{ return _pimpl->availableEnd(); }
+ ////////////////////////////////////////////////////////////////////////
+
+ bool Selectable::installedEmpty() const
+ { return _pimpl->installedEmpty(); }
+
+ Selectable::installed_size_type Selectable::installedSize() const
+ { return _pimpl->installedSize(); }
+
+ Selectable::installed_iterator Selectable::installedBegin() const
+ { return _pimpl->installedBegin(); }
+
+ Selectable::installed_iterator Selectable::installedEnd() const
+ { return _pimpl->installedEnd(); }
+
+
+ ////////////////////////////////////////////////////////////////////////
+
+ bool Selectable::isUnmaintained() const
+ { return _pimpl->isUnmaintained(); }
+
+
+
ResStatus::TransactByValue Selectable::modifiedBy() const
{ return _pimpl->modifiedBy(); }
Modified: trunk/libzypp/zypp/ui/Selectable.h
URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/ui/Selectable.h?rev=9472&r1=9471&r2=9472&view=diff
==============================================================================
--- trunk/libzypp/zypp/ui/Selectable.h (original)
+++ trunk/libzypp/zypp/ui/Selectable.h Tue Apr 8 17:40:16 2008
@@ -53,8 +53,10 @@
/** Iterates over ResObject::constPtr */
typedef SelectableTraits::available_iterator available_iterator;
- typedef SelectableTraits::availableItem_iterator availablePoolItem_iterator;
- typedef SelectableTraits::availableItem_size_type size_type;
+ typedef SelectableTraits::available_size_type available_size_type;
+
+ typedef SelectableTraits::installed_iterator installed_iterator;
+ typedef SelectableTraits::installed_size_type installed_size_type;
public:
/** The ResObjects kind. */
@@ -63,32 +65,56 @@
/** The ResObjects name. */
const std::string & name() const;
- /** Installed object. */
- ResObject::constPtr installedObj() const;
+ /**
+ * return the first Installed object
+ * of available
+ */
+ PoolItem installedObj() const;
- /** PoolItem corresponding to the installed object. */
- PoolItem installedPoolItem() const;
+ /**
+ * \deprecated use installedObj
+ * PoolItem corresponding to the installed object.
+ */
+ ZYPP_DEPRECATED PoolItem installedPoolItem() const
+ { return installedObj(); }
/** Best among available objects.
+ The user selected candiate, or a default.
*/
- ResObject::constPtr candidateObj() const;
+ PoolItem candidateObj() const;
/** PoolItem corresponding to the candidate object. */
- PoolItem candidatePoolItem() const;
+ ZYPP_DEPRECATED PoolItem candidatePoolItem() const
+ { return candidateObj(); }
/** Set a candidate (out of available objects).
* \return The new candidate, or NULL if choice was invalid
* (NULL or not among availableObjs). An invalid choice
* selects the default candidate.
*/
- ResObject::constPtr setCandidate( ResObject::constPtr byUser_r );
+ PoolItem setCandidate( ResObject::constPtr byUser_r );
/** Best among all objects. */
- ResObject::constPtr theObj() const;
+ PoolItem theObj() const;
+
+ ////////////////////////////////////////////////////////////////////////
+
+ /**
+ * Are there available objects?
+ */
+ bool availableEmpty() const;
+
+ /**
+ * Number of available objects.
+ */
+ available_size_type availableSize() const;
- /** Number of available objects. */
- size_type availableObjs() const;
+ /**
+ * Number of available objects.
+ * \deprecated Use availableSize
+ */
+ ZYPP_DEPRECATED available_size_type availableObjs() const
+ { return availableSize(); }
/** */
available_iterator availableBegin() const;
@@ -96,11 +122,29 @@
/** */
available_iterator availableEnd() const;
+ ////////////////////////////////////////////////////////////////////////
+
+ /**
+ * Installed object iterators
+ */
+
+ /**
+ * Are there installed objects?
+ */
+ bool installedEmpty() const;
+
+ /**
+ * Number of available objects.
+ */
+ installed_size_type installedSize() const;
+
/** */
- availablePoolItem_iterator availablePoolItemBegin() const;
+ installed_iterator installedBegin() const;
/** */
- availablePoolItem_iterator availablePoolItemEnd() const;
+ installed_iterator installedEnd() const;
+
+ ////////////////////////////////////////////////////////////////////////
public:
/** \name Query for objects within this Selectable.
@@ -108,11 +152,14 @@
//@{
/** True if either installed or candidate object is present */
bool hasObject() const
- { return installedObj() || candidateObj(); }
+ { return (! installedEmpty()) || candidateObj(); }
- /** True if installed object is present. */
- bool hasInstalledObj() const
- { return installedObj(); }
+ /**
+ * True if installed object is present.
+ * \deprecated Use ! installedEmpty()
+ */
+ ZYPP_DEPRECATED bool hasInstalledObj() const
+ { return ! installedEmpty(); }
/** True if candidate object is present. */
bool hasCandidateObj() const
@@ -120,17 +167,23 @@
/** True if installed and candidate object is present */
bool hasBothObjects() const
- { return installedObj() && candidateObj(); }
+ { return (! installedEmpty()) && candidateObj(); }
/** True if installed object is present but no candidate. */
bool hasInstalledObjOnly() const
- { return installedObj() && ! candidateObj(); }
+ { return (! installedEmpty()) && ! candidateObj(); }
/** True if candidate object is present but no installed. */
bool hasCandidateObjOnly() const
- { return ! installedObj() && candidateObj(); }
+ { return ( installedEmpty() ) && candidateObj(); }
//@}
+ /**
+ * True if this package has no replacement from
+ * the available repositories
+ */
+ bool isUnmaintained() const;
+
public:
/** \name Query objects fate in case of commit.
*/
@@ -161,7 +214,8 @@
//@}
public:
- /** \name Special inteface for Y2UI.
+ /**
+ * \name Special inteface for Y2UI.
* \note This interface acts on \ref ResStatus::USER level.
* The \ref Status enum, and allowed state transitions are
* tightly related to the Y2UI. It might be not verry usefull
@@ -170,10 +224,18 @@
//@{
/** Return the current Status */
Status status() const;
+
+ /**
+ * Try to set a new Status.
+ * Returns \c false if the transitions is not allowed.
+ */
+ bool setStatus( const Status state_r );
+
/** Try to set a new Status.
* Returns \c false if the transitions is not allowed.
*/
- bool set_status( const Status state_r );
+ ZYPP_DEPRECATED bool set_status( const Status state_r )
+ { return setStatus( state_r ); }
/** Return who caused the modification. */
ResStatus::TransactByValue modifiedBy() const;
Modified: trunk/libzypp/zypp/ui/SelectableImpl.cc
URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/ui/SelectableImpl.cc?rev=9472&r1=9471&r2=9472&view=diff
==============================================================================
--- trunk/libzypp/zypp/ui/SelectableImpl.cc (original)
+++ trunk/libzypp/zypp/ui/SelectableImpl.cc Tue Apr 8 17:40:16 2008
@@ -37,8 +37,6 @@
, cand( impl.candidateObj() )
{}
- typedef Selectable::Impl::availableItem_const_iterator availableItem_const_iterator;
-
//
// Queries
//
@@ -62,7 +60,7 @@
//
void resetTransactingCandidates() const
{
- for ( availableItem_const_iterator it = _impl.availableBegin();
+ for ( Selectable::Impl::available_const_iterator it = _impl.availableBegin();
it != _impl.availableEnd(); ++it )
{
(*it).status().setTransact( false, ResStatus::USER );
@@ -70,7 +68,7 @@
}
void unlockCandidates() const
{
- for ( availableItem_const_iterator it = _impl.availableBegin();
+ for ( Selectable::Impl::available_const_iterator it = _impl.availableBegin();
it != _impl.availableEnd(); ++it )
{
(*it).status().setTransact( false, ResStatus::USER );
@@ -79,7 +77,7 @@
}
void lockCandidates() const
{
- for ( availableItem_const_iterator it = _impl.availableBegin();
+ for ( Selectable::Impl::available_const_iterator it = _impl.availableBegin();
it != _impl.availableEnd(); ++it )
{
(*it).status().setTransact( false, ResStatus::USER );
@@ -188,7 +186,7 @@
return( installedObj() ? S_KeepInstalled : S_NoInst );
}
- bool Selectable::Impl::set_status( const Status state_r )
+ bool Selectable::Impl::setStatus( const Status state_r )
{
StatusHelper self( *this );
@@ -235,7 +233,7 @@
if ( byUser_r ) // must be in available list
{
- for ( availableItem_const_iterator it = availableBegin();
+ for ( available_const_iterator it = availableBegin();
it != availableEnd(); ++it )
{
if ( it->resolvable() == byUser_r )
Modified: trunk/libzypp/zypp/ui/SelectableImpl.h
URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/ui/SelectableImpl.h?rev=9472&r1=9471&r2=9472&view=diff
==============================================================================
--- trunk/libzypp/zypp/ui/SelectableImpl.h (original)
+++ trunk/libzypp/zypp/ui/SelectableImpl.h Tue Apr 8 17:40:16 2008
@@ -40,20 +40,27 @@
public:
- typedef SelectableTraits::AvialableItemSet AvialableItemSet;
- typedef SelectableTraits::availableItem_iterator availableItem_iterator;
- typedef SelectableTraits::availableItem_const_iterator availableItem_const_iterator;
- typedef SelectableTraits::availableItem_size_type availableItem_size_type;
+ typedef SelectableTraits::AvailableItemSet AvailableItemSet;
+ typedef SelectableTraits::available_iterator available_iterator;
+ typedef SelectableTraits::available_const_iterator available_const_iterator;
+ typedef SelectableTraits::available_size_type available_size_type;
+
+ typedef SelectableTraits::InstalledItemSet InstalledItemSet;
+ typedef SelectableTraits::installed_iterator installed_iterator;
+ typedef SelectableTraits::installed_const_iterator installed_const_iterator;
+ typedef SelectableTraits::installed_size_type installed_size_type;
+
public:
Impl( const ResObject::Kind & kind_r,
const std::string & name_r,
- const PoolItem & installedItem_r,
- availableItem_const_iterator availableBegin_r,
- availableItem_const_iterator availableEnd_r )
+ installed_const_iterator installedBegin_r,
+ installed_const_iterator installedEnd_r ,
+ available_const_iterator availableBegin_r,
+ available_const_iterator availableEnd_r )
: _kind( kind_r )
, _name( name_r )
- , _installedItem( installedItem_r )
+ , _installedItems( installedBegin_r, installedEnd_r )
, _availableItems( availableBegin_r, availableEnd_r )
{
setCandidate( NULL );
@@ -72,11 +79,15 @@
Status status() const;
/** */
- bool set_status( const Status state_r );
+ bool setStatus( const Status state_r );
/** Installed object. */
PoolItem installedObj() const
- { return _installedItem; }
+ {
+ if (!installedEmpty())
+ return *_installedItems.begin();
+ return PoolItem();
+ }
/** Best among available objects.
* The transacting candidate or the one scheduled to receive
@@ -103,21 +114,49 @@
PoolItem theObj() const
{
PoolItem ret( candidateObj() );
- return( ret ? ret : _installedItem );
+ if (ret)
+ return ret;
+
+ if ( ! _installedItems.empty() )
+ return (*_installedItems.begin());
+
+ return PoolItem();
}
- /** */
- availableItem_size_type availableObjs() const
+ ////////////////////////////////////////////////////////////////////////
+
+ bool availableEmpty() const
+ { return _availableItems.empty(); }
+
+ available_size_type availableSize() const
{ return _availableItems.size(); }
- /** */
- availableItem_const_iterator availableBegin() const
+ available_const_iterator availableBegin() const
{ return _availableItems.begin(); }
- /** */
- availableItem_const_iterator availableEnd() const
+
+ available_const_iterator availableEnd() const
{ return _availableItems.end(); }
+ ////////////////////////////////////////////////////////////////////////
+
+ bool installedEmpty() const
+ { return _installedItems.empty(); }
+
+ installed_size_type installedSize() const
+ { return _installedItems.size(); }
+
+ installed_iterator installedBegin() const
+ { return _installedItems.begin(); }
+
+ installed_iterator installedEnd() const
+ { return _installedItems.end(); }
+
+ ////////////////////////////////////////////////////////////////////////
+
+ bool isUnmaintained() const
+ { return availableEmpty(); }
+
/** Return who caused the modification. */
ResStatus::TransactByValue modifiedBy() const;
@@ -132,7 +171,7 @@
private:
PoolItem transactingCandidate() const
{
- for ( availableItem_const_iterator it = availableBegin();
+ for ( available_const_iterator it = availableBegin();
it != availableEnd(); ++it )
{
if ( (*it).status().transacts() )
@@ -143,28 +182,31 @@
PoolItem defaultCandidate() const
{
- if ( installedObj() )
+ if ( !installedEmpty() )
{
// prefer the installed objects arch.
- for ( availableItem_const_iterator it = availableBegin();
- it != availableEnd(); ++it )
- {
- if ( installedObj()->arch() == (*it)->arch() )
- {
- return (*it);
- }
- }
+ for ( installed_const_iterator iit = installedBegin();
+ iit != installedEnd(); ++iit )
+ {
+ for ( available_const_iterator it = availableBegin();
+ it != availableEnd(); ++it )
+ {
+ if ( (*iit)->arch() == (*it)->arch() )
+ {
+ return (*it);
+ }
+ }
+ }
}
if ( _availableItems.empty() )
- {
return PoolItem();
- }
+
return *_availableItems.begin();
}
bool allCandidatesLocked() const
{
- for ( availableItem_const_iterator it = availableBegin();
+ for ( available_const_iterator it = availableBegin();
it != availableEnd(); ++it )
{
if ( ! (*it).status().isLocked() )
@@ -176,8 +218,8 @@
private:
ResObject::Kind _kind;
std::string _name;
- PoolItem _installedItem;
- AvialableItemSet _availableItems;
+ InstalledItemSet _installedItems;
+ AvailableItemSet _availableItems;
PoolItem _candidate;
};
///////////////////////////////////////////////////////////////////
@@ -186,7 +228,7 @@
inline std::ostream & operator<<( std::ostream & str, const Selectable::Impl & obj )
{
return str << '[' << obj.kind() << ']' << obj.name() << ": " << obj.status()
- << " (I " << obj._installedItem << ")"
+ << " (I " << obj._installedItems.size() << ")"
<< " (A " << obj._availableItems.size() << ")"
<< obj.candidateObj();
}
Modified: trunk/libzypp/zypp/ui/SelectableTraits.h
URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/ui/SelectableTraits.h?rev=9472&r1=9471&r2=9472&view=diff
==============================================================================
--- trunk/libzypp/zypp/ui/SelectableTraits.h (original)
+++ trunk/libzypp/zypp/ui/SelectableTraits.h Tue Apr 8 17:40:16 2008
@@ -32,7 +32,7 @@
/** */
struct SelectableTraits
{
- /** Oder on AvialableItemSet.
+ /** Oder on AvalableItemSet.
* \li best Arch
* \li best Edition
* \li ResObject::constPtr as fallback.
@@ -60,20 +60,15 @@
}
};
- typedef std::set