Prefer datadir stored as repo attribute, but fallback searching in solvbales.
authorMichael Andres <ma@suse.de>
Fri, 26 Jun 2009 10:41:30 +0000 (12:41 +0200)
committerMichael Andres <ma@suse.de>
Fri, 26 Jun 2009 10:45:55 +0000 (12:45 +0200)
zypp/sat/Solvable.cc

index 4757488..64f6a97 100644 (file)
@@ -198,8 +198,30 @@ namespace zypp
       return CheckSum( std::string(), s ); // try to autodetect
     }
 
+    ///////////////////////////////////////////////////////////////////
+    namespace
+    {
+      inline Pathname lookupDatadirIn( Repository repor_r )
+      {
+        static const sat::SolvAttr susetagsDatadir( "susetags:datadir" );
+        Pathname ret;
+        // First look for repo attribute "susetags:datadir". If not found,
+        // look into the solvables as Code11 satsolver placed it there.
+        sat::LookupRepoAttr datadir( susetagsDatadir, repor_r );
+        if ( ! datadir.empty() )
+          ret = datadir.begin().asString();
+        else
+        {
+          sat::LookupAttr datadir( susetagsDatadir, repor_r );
+          if ( ! datadir.empty() )
+            ret = datadir.begin().asString();
+        }
+        return ret;
+      }
+    }
+    ///////////////////////////////////////////////////////////////////
+
     OnMediaLocation Solvable::lookupLocation() const
-    //std::string Solvable::lookupLocation( unsigned & medianr ) const
     {
       NO_SOLVABLE_RETURN( OnMediaLocation() );
       // medianumber and path
@@ -211,27 +233,23 @@ namespace zypp
       OnMediaLocation ret;
 
       Pathname path;
-      static const sat::SolvAttr susetagsDatadir( "susetags:datadir" );
       switch ( repository().info().type().toEnum() )
       {
         case repo::RepoType::NONE_e:
-          {
-            sat::LookupAttr datadir( susetagsDatadir, repository() );
-            if ( ! datadir.empty() )
-            {
-              repository().info().setProbedType( repo::RepoType::YAST2_e );
-              path = datadir.begin().asString();
-            }
-            path = datadir.empty() ? "suse" : datadir.begin().c_str();
-          }
-          break;
+        {
+          path = lookupDatadirIn( repository() );
+          if ( ! path.empty() )
+            repository().info().setProbedType( repo::RepoType::YAST2_e );
+        }
+        break;
 
         case repo::RepoType::YAST2_e:
-          {
-            sat::LookupAttr datadir( susetagsDatadir, repository() );
-            path = datadir.empty() ? "suse" : datadir.begin().c_str();
-          }
-          break;
+        {
+          path = lookupDatadirIn( repository() );
+          if ( path.empty() )
+            path = "suse";
+        }
+        break;
 
         default:
           break;