From 01804f2206605f5fb167534e04cf448d20943059 Mon Sep 17 00:00:00 2001 From: Stefan Schubert Date: Tue, 7 Nov 2006 15:44:09 +0000 Subject: [PATCH] added new parameter -keep- --- testsuite/solver/src/deptestomatic.cc | 72 ++++++++++++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) diff --git a/testsuite/solver/src/deptestomatic.cc b/testsuite/solver/src/deptestomatic.cc index 0d82b38..853d82e 100644 --- a/testsuite/solver/src/deptestomatic.cc +++ b/testsuite/solver/src/deptestomatic.cc @@ -1673,6 +1673,42 @@ parse_xml_trial (XmlNode_Ptr node, const ResPool & pool) } } + + } else if (node->equals ("keep")) { + + string name = node->getProp ("name"); + if (name.empty()) + name = node->getProp ("package"); + + string source_alias = node->getProp ("channel"); + if (source_alias.empty()) + source_alias = "@system"; + + if (name.empty()) + { + cerr << "transact need 'name' parameter" << endl; + return; + } + + PoolItem_Ref poolItem; + + poolItem = get_poolItem( source_alias, name, "" ); + + if (poolItem) { + // first: set anything + if (source_alias == "@system") { + poolItem.status().setToBeUninstalled( ResStatus::USER ); + } + else { + poolItem.status().setToBeInstalled( ResStatus::USER ); + } + // second: keep old state + poolItem.status().setTransact( false, ResStatus::USER ); + resolver->transactResObject( poolItem, false ); + } + else { + cerr << "Unknown item " << source_alias << "::" << name << endl; + } } else if (node->equals ("createTestcase")) { string path = node->getProp ("path"); if (path.empty()) @@ -2148,8 +2184,42 @@ parse_xml_transact (XmlNode_Ptr node, const ResPool & pool) else { cerr << "Unknown item " << source_alias << "::" << name << endl; } + } + } else if (node->equals ("keep")) { - } + string name = node->getProp ("name"); + if (name.empty()) + name = node->getProp ("package"); + + string source_alias = node->getProp ("channel"); + if (source_alias.empty()) + source_alias = "@system"; + + if (name.empty()) + { + cerr << "transact need 'name' parameter" << endl; + return; + } + + PoolItem_Ref poolItem; + + poolItem = get_poolItem( source_alias, name, "" ); + + if (poolItem) { + // first: set anything + if (source_alias == "@system") { + poolItem.status().setToBeUninstalled( ResStatus::USER ); + } + else { + poolItem.status().setToBeInstalled( ResStatus::USER ); + } + // second: keep old state + poolItem.status().setTransact( false, ResStatus::USER ); + resolver->transactResObject( poolItem, false ); + } + else { + cerr << "Unknown item " << source_alias << "::" << name << endl; + } } else { cerr << "Unknown tag '" << node->name() << "' in transact" << endl; -- 2.7.4