enable selections
authorKlaus Kaempf <kkaempf@suse.de>
Fri, 10 Feb 2006 14:38:47 +0000 (14:38 +0000)
committerKlaus Kaempf <kkaempf@suse.de>
Fri, 10 Feb 2006 14:38:47 +0000 (14:38 +0000)
testsuite/solver/src/deptestomatic.cc
testsuite/solver/src/helix/HelixSelectionImpl.cc [new file with mode: 0644]
testsuite/solver/src/helix/HelixSelectionImpl.h [new file with mode: 0644]
testsuite/solver/src/helix/HelixSourceImpl.cc
testsuite/solver/src/helix/HelixSourceImpl.h
testsuite/solver/src/helix/Makefile.am
testsuite/solver/tools/packages_to_xml.rb

index 91778201da6b4e1fd0f64973791bf9e5939eb926..a9ed8c94bc3a441247fc7f7aa0f51c6df42eda8e 100644 (file)
@@ -135,6 +135,9 @@ string2kind (const std::string & str)
        else if (str == "pattern") {
            kind = ResTraits<zypp::Pattern>::kind;
        }
+       else if (str == "selection") {
+           kind = ResTraits<zypp::Selection>::kind;
+       }
        else if (str == "script") {
            kind = ResTraits<zypp::Script>::kind;
        }
@@ -382,6 +385,7 @@ struct FindPackage : public resfilter::ResObjectFilterFunctor
 
     bool operator()( PoolItem_Ref p)
     {
+MIL << p << " ?" << endl;
        Source_Ref s = p->source();
 
        if (s.alias() != source.alias()) {
@@ -399,20 +403,24 @@ get_poolItem (const string & source_alias, const string & package_name, const st
 {
     PoolItem_Ref poolItem;
     Resolvable::Kind kind = string2kind (kind_name);
+    Source_Ref source;
 
     try {
-       Source_Ref source = manager->findSource (source_alias);
-       if (!source) {
-           cerr << "Can't find source '" << source_alias << "'" << endl;
-           return poolItem;
-       }
+       source = manager->findSource (source_alias);
+    }
+    catch (Exception & excpt_r) {
+       ZYPP_CAUGHT (excpt_r);
+       cerr << "Can't find source '" << source_alias << "'" << endl;
+       return poolItem;
+    }
 
+    try {
        FindPackage info (source, kind);
 
        invokeOnEach( God->pool().byNameBegin( package_name ),
                      God->pool().byNameEnd( package_name ),
-//                   functor::chain( resfilter::BySource(source), resfilter::ByKind (kind) ),
-                     resfilter::ByKind (kind),
+                     functor::chain( resfilter::BySource(source), resfilter::ByKind (kind) ),
+//                   resfilter::ByKind (kind),
                      functor::functorRef<bool,PoolItem> (info) );
 
        poolItem = info.poolItem;
@@ -590,7 +598,7 @@ load_source (const string & alias, const string & filename, const string & type,
        count = src.resolvables().size();
        cout << "Added source '" << alias << "' as #" << snum  << ":[" << src.alias() << "] with " << count << " resolvables" << endl;
        God->addResolvables( src.resolvables(), (alias == "@system") );
-       print_pool ();
+//     print_pool ();
 
        cout << "Loaded " << count << " package(s) from " << pathname << endl;
     }
@@ -981,40 +989,44 @@ parse_xml_trial (XmlNode_Ptr node, const ResPool & pool)
        } else if (node->equals ("install")) {
 
            string source_alias = node->getProp ("channel");
-           string package_name = node->getProp ("package");
+           string name = node->getProp ("name");
+           if (name.empty())
+               name = node->getProp ("package");
            string kind_name = node->getProp ("kind");
            string soft = node->getProp ("soft");
 
            PoolItem_Ref poolItem;
 
-           poolItem = get_poolItem (source_alias, package_name, kind_name);
+           poolItem = get_poolItem (source_alias, name, kind_name);
            if (poolItem) {
-               RESULT << "Installing " << package_name << " from channel " << source_alias << endl;;
+               RESULT << "Installing " << name << " from channel " << source_alias << endl;;
                poolItem.status().setToBeInstalled(ResStatus::USER);
                if (!soft.empty())
                    poolItem.status().setSoftInstall(true);
 //             resolver->addPoolItemToInstall (poolItem);
            } else {
-               cerr << "Unknown package " << source_alias << "::" << package_name << endl;
+               cerr << "Unknown item " << source_alias << "::" << name << endl;
            }
 
        } else if (node->equals ("uninstall")) {
 
-           string package_name = node->getProp ("package");
+           string name = node->getProp ("name");
+           if (name.empty())
+               name = node->getProp ("package");
            string kind_name = node->getProp ("kind");
            string soft = node->getProp ("soft");
 
            PoolItem_Ref poolItem;
 
-           poolItem = get_poolItem ("@system", package_name, kind_name);
+           poolItem = get_poolItem ("@system", name, kind_name);
            if (poolItem) {
-               RESULT << "Uninstalling " << package_name << endl;
+               RESULT << "Uninstalling " << name << endl;
                poolItem.status().setToBeUninstalled(ResStatus::USER);
                if (!soft.empty())
                    poolItem.status().setSoftUninstall(true);
 //             resolver->addPoolItemToRemove (poolItem);
            } else {
-               cerr << "Unknown system package " << package_name << endl;
+               cerr << "Unknown system item " << name << endl;
            }
 
        } else if (node->equals ("upgrade")) {
diff --git a/testsuite/solver/src/helix/HelixSelectionImpl.cc b/testsuite/solver/src/helix/HelixSelectionImpl.cc
new file mode 100644 (file)
index 0000000..9275384
--- /dev/null
@@ -0,0 +1,54 @@
+/*---------------------------------------------------------------------\
+|                          ____ _   __ __ ___                          |
+|                         |__  / \ / / . \ . \                         |
+|                           / / \ V /|  _/  _/                         |
+|                          / /__ | | | | | |                           |
+|                         /_____||_| |_| |_|                           |
+|                                                                      |
+\---------------------------------------------------------------------*/
+/** \file zypp/solver/temporary/HelixSelectionImpl.cc
+ *
+*/
+
+#include "HelixSelectionImpl.h"
+#include "zypp/source/SourceImpl.h"
+#include "zypp/base/String.h"
+#include "zypp/base/Logger.h"
+
+using namespace std;
+using namespace zypp::detail;
+
+///////////////////////////////////////////////////////////////////
+namespace zypp
+{ /////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+//
+//        CLASS NAME : HelixSelectionImpl
+//
+///////////////////////////////////////////////////////////////////
+
+/** Default ctor
+*/
+HelixSelectionImpl::HelixSelectionImpl (Source_Ref source_r, const zypp::HelixParser & parsed)
+    : _source (source_r)
+    , _summary(parsed.summary)
+    , _description(parsed.description)
+{
+}
+
+Source_Ref
+HelixSelectionImpl::source() const
+{ return _source; }
+
+/** Selection summary */
+TranslatedText HelixSelectionImpl::summary() const
+{ return _summary; }
+
+/** Selection description */
+TranslatedText HelixSelectionImpl::description() const
+{ return _description; }
+
+
+  /////////////////////////////////////////////////////////////////
+} // namespace zypp
+///////////////////////////////////////////////////////////////////
diff --git a/testsuite/solver/src/helix/HelixSelectionImpl.h b/testsuite/solver/src/helix/HelixSelectionImpl.h
new file mode 100644 (file)
index 0000000..cfb77b8
--- /dev/null
@@ -0,0 +1,53 @@
+/*---------------------------------------------------------------------\
+|                          ____ _   __ __ ___                          |
+|                         |__  / \ / / . \ . \                         |
+|                           / / \ V /|  _/  _/                         |
+|                          / /__ | | | | | |                           |
+|                         /_____||_| |_| |_|                           |
+|                                                                      |
+\---------------------------------------------------------------------*/
+/** \file zypp/solver/temporary/HelixSelectionImpl.h
+ *
+*/
+#ifndef ZYPP_SOLVER_TEMPORARY_HELIXSELECTIONIMPL_H
+#define ZYPP_SOLVER_TEMPORARY_HELIXSELECTIONIMPL_H
+
+#include "zypp/detail/SelectionImpl.h"
+#include "HelixParser.h"
+
+///////////////////////////////////////////////////////////////////
+namespace zypp
+{ /////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////
+//
+//        CLASS NAME : HelixSelectionImpl
+//
+/** Class representing a package
+*/
+class HelixSelectionImpl : public detail::SelectionImplIf
+{
+public:
+
+       class HelixParser;
+       /** Default ctor
+       */
+       HelixSelectionImpl( Source_Ref source_r, const zypp::HelixParser & data );
+
+       /** Selection summary */
+       virtual TranslatedText summary() const;
+       /** Selection description */
+       virtual TranslatedText description() const;
+
+       /** */
+       virtual Source_Ref source() const;
+protected:
+       Source_Ref _source;
+       TranslatedText _summary;
+       TranslatedText _description;
+
+ };
+  /////////////////////////////////////////////////////////////////
+} // namespace zypp
+///////////////////////////////////////////////////////////////////
+#endif // ZYPP_SOLVER_TEMPORARY_HELIXSELECTIONIMPL_H
index 506e5a63b5f2866d878d424277b2d0fc8028ab46..836bddef994ffe6996d4a6ffaf29ce412e775b12 100644 (file)
@@ -25,6 +25,7 @@
 #include "HelixScriptImpl.h"
 #include "HelixMessageImpl.h"
 #include "HelixPatchImpl.h"
+#include "HelixSelectionImpl.h"
 #include "HelixPatternImpl.h"
 #include "HelixProductImpl.h"
 
@@ -204,6 +205,30 @@ HelixSourceImpl::createPatch (const HelixParser & parsed)
 }
 
 
+Selection::Ptr
+HelixSourceImpl::createSelection (const HelixParser & parsed)
+{
+    try
+    {
+       shared_ptr<HelixSelectionImpl> impl(new HelixSelectionImpl(_source, parsed));
+
+       // Collect basic Resolvable data
+       NVRAD dataCollect( parsed.name,
+                       Edition( parsed.version, parsed.release, parsed.epoch ),
+                       Arch( parsed.arch ),
+                       createDependencies (parsed));
+       Selection::Ptr pattern = detail::makeResolvableFromImpl(dataCollect, impl);
+       return pattern;
+    }
+    catch (const Exception & excpt_r)
+    {
+       ERR << excpt_r << endl;
+       throw "Cannot create selection object";
+    }
+    return NULL;
+}
+
+
 Pattern::Ptr
 HelixSourceImpl::createPattern (const HelixParser & parsed)
 {
@@ -273,6 +298,10 @@ HelixSourceImpl::parserCallback (const HelixParser & parsed)
        Patch::Ptr p = createPatch (parsed);
        _store.insert (p);
     }
+    else if (parsed.kind == ResTraits<Selection>::kind) {
+       Selection::Ptr s = createSelection(parsed);
+       _store.insert (s);
+    }
     else if (parsed.kind == ResTraits<Pattern>::kind) {
        Pattern::Ptr p = createPattern (parsed);
        _store.insert (p);
index b80825470b9eb332b1ba6d7ec5b67321bcbe8dff..796de1267bf1c231fdf55f13de61cb03da7b118d 100644 (file)
@@ -72,6 +72,7 @@ class HelixSourceImpl : public zypp::source::SourceImpl {
     Script::Ptr  createScript (const HelixParser & data);
     Patch::Ptr   createPatch (const HelixParser & data);
     Pattern::Ptr createPattern (const HelixParser & data);
+    Selection::Ptr createSelection (const HelixParser & data);
     Product::Ptr createProduct (const HelixParser & data);
 
     Dependencies createDependencies (const HelixParser & data);
index f621c493e7e2a064182a31c7f08c9fa357122cb7..440c66757ae3e564f1a308a344f2d5e8a4cda750 100644 (file)
@@ -20,6 +20,7 @@ noinst_HEADERS = \
        HelixScriptImpl.h                       \
        HelixMessageImpl.h                      \
        HelixPatchImpl.h                        \
+       HelixSelectionImpl.h                    \
        HelixPatternImpl.h                      \
        HelixProductImpl.h
 
@@ -35,6 +36,7 @@ lib@PACKAGE@_helix_la_SOURCES =                       \
        HelixScriptImpl.cc                      \
        HelixMessageImpl.cc                     \
        HelixPatchImpl.cc                       \
+       HelixSelectionImpl.cc                   \
        HelixPatternImpl.cc                     \
        HelixProductImpl.cc
 
index 847460076750e84611801e3d934911dd28054512..1e36e01c68b6a35b0544a45c4337a511679e5221 100755 (executable)
@@ -75,7 +75,7 @@ end
 class Package
        attr_accessor :name, :epoch, :version, :release, :architecture
        attr_accessor :summary, :description, :group, :rpmsize, :installsize
-       attr_accessor :requires, :prerequires, :provides, :conflicts, :obsoletes
+       attr_accessor :requires, :prerequires, :provides, :conflicts, :obsoletes, :suggests, :enhances
        attr_accessor :location
        attr_accessor :skip
 
@@ -124,6 +124,8 @@ class Package
                add_dependencies "provides", provides
                add_dependencies "conflicts", conflicts
                add_dependencies "obsoletes", obsoletes
+               add_dependencies "suggests", suggests
+               add_dependencies "enhances", enhances
 
                @channel.puts "</package>"
        end
@@ -263,6 +265,10 @@ class Parser
                                                        package.conflicts = parse_dependencies f, "-Con"
                                                when "+Obs"
                                                        package.obsoletes = parse_dependencies f, "-Obs"
+                                               when "+Sug"
+                                                       package.suggests = parse_dependencies f, "-Sug"
+                                               when "+Enh"
+                                                       package.enhances = parse_dependencies f, "-Enh"
                                                else
                                                        STDERR.puts "Unknown '#{key}'"