kdenonbeta/kdedebian/kapture
CVS commit by mornfall:
Use problem resolver for keep operation, should avoid broken packages on
partial upgrade. Few fixes to upgrade-tree, so it actually works as
expected. Fix PkgStatusFilter to report only installed packages in
'upgradable' mode. TODO ++.
M +5 -0 TODO 1.47
M +22 -7 libcapture/filters.cpp 1.22
M +1 -0 libcapture/filters.h 1.22
M +1 -1 libcapture/groupermanager.cpp 1.5
M +4 -0 libcapture/pkgmanager.cpp 1.35
--- kdenonbeta/kdedebian/kapture/TODO #1.46:1.47
@@ -176,4 +176,9 @@
their stuff into the embedded konsole.
+ MAKE CHANGES MORE ROBUST [done: 15%]
+ - make use of apt-pkg's problem resolver
+ - check for various error conditions
+ - add broken-fixing (-f) mode
+
PROGRESS/DPKG EMBEDDED INTO KAPTURE WINDOW [done: 40%]
Embed acqprogress, dpkg and stuff into main kapture window and create
--- kdenonbeta/kdedebian/kapture/libcapture/filters.cpp #1.21:1.22
@@ -203,4 +203,5 @@ GROUPER_CONSTR_B (PkgStatusFilter, Filte
{
string s = ParamStr::value (Param::get (a, "string"));
+ cerr << "PkgStatusFilter (" << s << ");" << endl;
if (s == "inst" || s == "install")
m_status = PkgCache::PkgInstall;
@@ -221,8 +222,13 @@ bool PkgStatusFilter::filterCondition (T
PkgCElemPtr e = pkgCElem (**n);
if (! e) return false;
- if (m_string == "upgradable")
- return (PkgManager::cache() -> GetCandidateVer (*e))
- != *(e -> CurrentVer ());
int s = PkgManager::cache () -> packageState (*e);
+ if (m_string == "upgradable") {
+ bool r = s == PkgCache::PkgKeepI &&
+ (PkgManager::cache() -> GetCandidateVer (*e))
+ != *(e -> CurrentVer ());
+ if (r)
+ std::cerr << "upgradable: " << e -> Name () << std::endl;
+ return r;
+ }
return s == m_status;
}
@@ -242,9 +248,11 @@ GROUPER_CONSTR_B (FilterOrGroup, FilterG
_a << std::endl;
string t = ParamStr::value (Param::get (a, _t));
- std::cerr << "type: " << t << std::endl;
+ Param::Map submap = ParamT<Param::Map>::value (Param::get (a, _a),
+ Param::Map ());
+ std::cerr << "type: " << t << ", submap: " << Param::mapToString
+ (submap) << std::endl;
m_vec . push_back (
- dynamic_cast <FilterGrouper *> (GrouperFactory (t,
- ParamT<Param::Map>::value (Param::get (a, _a),
- Param::Map ())) . instantiate ()));
+ dynamic_cast <FilterGrouper *> (GrouperFactory (t, submap)
+ . instantiate ()));
}
}
@@ -259,2 +267,9 @@ bool FilterOrGroup::filterCondition (Tre
}
/* }}} */
+bool FilterOrGroup::affected (long f)
+{
+ bool a = 0;
+ for (t_FiltVec::iterator i = m_vec . begin (); i != m_vec . end (); i ++)
+ a |= (* i) -> affected (f);
+ return a;
+}
--- kdenonbeta/kdedebian/kapture/libcapture/filters.h #1.21:1.22
@@ -62,4 +62,5 @@ namespace capture {
FILT_CLASS (FilterOrGroup, "OR Group");
FILT_FLAGS (IsSystem);
+ bool affected (long c);
};
/* }}} */
--- kdenonbeta/kdedebian/kapture/libcapture/groupermanager.cpp #1.4:1.5
@@ -86,5 +86,5 @@ void GrouperManager::setupDefault (void)
Param::Map upgr;
Param::set (upgr, "string", ParamStr::create ("upgradable"));
- Param::set (uoc, "change-a", ParamT<Param::Map>::create (upgr));
+ Param::set (uoc, "upgrade-a", ParamT<Param::Map>::create (upgr));
c = new GrouperChain ("upgrade-tree");
--- kdenonbeta/kdedebian/kapture/libcapture/pkgmanager.cpp #1.34:1.35
@@ -352,6 +352,10 @@ bool PkgManager::_install (pkgCache::Pkg
bool PkgManager::_keep (pkgCache::PkgIterator i)
{
+ pkgProblemResolver fix (cache ());
+ /* fix . Clear (i);
+ fix . Protect (i); */
cache () -> MarkKeep (i, true);
m_changes |= InstallChange;
+ fix . ResolveByKeep ();
_notifyRefresh ();
return true;
Reply to: