Imported Upstream version 16.3.2
[platform/upstream/libzypp.git] / zypp / Capability.cc
index dc75eaa..3147c8a 100644 (file)
@@ -134,7 +134,7 @@ namespace zypp
 
     /** Build \ref Capability from data. No parsing required.
     */
-    sat::detail::IdType relFromStr( ::_Pool * pool_r,
+    sat::detail::IdType relFromStr( sat::detail::CPool * pool_r,
                                     const Arch & arch_r,
                                     const std::string & name_r,
                                     Rel op_r,
@@ -170,7 +170,7 @@ namespace zypp
    /** Build \ref Capability from data, just parsing name for '[.arch]' and detect
     * 'kind srcpackage' (will be mapped to arch \c src).
     */
-    sat::detail::IdType relFromStr( ::_Pool * pool_r,
+    sat::detail::IdType relFromStr( sat::detail::CPool * pool_r,
                                     const std::string & name_r, Rel op_r, const Edition & ed_r,
                                     const ResKind & kind_r )
     {
@@ -202,7 +202,7 @@ namespace zypp
 
     /** Full parse from string, unless Capability::PARSED.
     */
-    sat::detail::IdType relFromStr( ::_Pool * pool_r,
+    sat::detail::IdType relFromStr( sat::detail::CPool * pool_r,
                                     const Arch & arch_r, // parse from name if empty
                                     const std::string & str_r, const ResKind & kind_r,
                                     Capability::CtorFlag flag_r )
@@ -299,6 +299,15 @@ namespace zypp
   : _id( relFromStr( myPool().getPool(), arch_r, name_r, op_r, ed_r, prefix_r ) )
   {}
 
+  ///////////////////////////////////////////////////////////////////
+  // Ctor creating a namespace: capability.
+  ///////////////////////////////////////////////////////////////////
+
+  Capability::Capability( ResolverNamespace namespace_r, IdString value_r )
+  : _id( ::pool_rel2id( myPool().getPool(), asIdString(namespace_r).id(), (value_r.empty() ? STRID_NULL : value_r.id() ), REL_NAMESPACE, /*create*/true ) )
+  {}
+
+
   const char * Capability::c_str() const
   { return( _id ? ::pool_dep2str( myPool().getPool(), _id ) : "" ); }
 
@@ -372,7 +381,9 @@ namespace zypp
 
     // str_r might be the form "libzypp-1.2.3-4.5(.arch)'
     // correctly parsed as name capability by the ctor.
-    if ( detail.isNamed() && ::strrchr( detail.name().c_str(), '-' ) && sat::WhatProvides( cap ).empty() )
+    // TODO: Think about allowing glob char in name - for now don't process
+    if ( detail.isNamed() && !::strpbrk( detail.name().c_str(), "*?[{" )
+      && ::strrchr( detail.name().c_str(), '-' ) && sat::WhatProvides( cap ).empty() )
     {
       Arch origArch( detail.arch() ); // to support a trailing .arch