- Add ZConfig::overrideSystemArchitecture() to override zypp arch
authorKlaus Kaempf <kkaempf@suse.de>
Mon, 27 Aug 2007 15:12:22 +0000 (15:12 +0000)
committerKlaus Kaempf <kkaempf@suse.de>
Mon, 27 Aug 2007 15:12:22 +0000 (15:12 +0000)
  from external, e.g. for the testcases
- Honor ZYPP_CONF environment variable to override the buit-in
  /etc/zypp/zypp.conf
- Part of Bug 301286

package/libzypp.changes
tests/cache/CacheInitializer_test.cc
tests/cache/CacheQuery_test.cc
tests/cache/CacheStore_test.cc
zypp/ZConfig.cc
zypp/ZConfig.h

index d850a26..b197c2a 100644 (file)
@@ -1,4 +1,14 @@
 -------------------------------------------------------------------
+Mon Aug 27 17:08:41 CEST 2007 - kkaempf@suse.de
+
+- Add ZConfig::overrideSystemArchitecture() to override zypp arch
+  from external, e.g. for the testcases
+- Honor ZYPP_CONF environment variable to override the buit-in
+  /etc/zypp/zypp.conf
+- Part of Bug 301286
+- rev 6905
+
+-------------------------------------------------------------------
 Mon Aug 27 15:53:52 CEST 2007 - schubi@suse.de
 
 -The solver generate an establish call for all
@@ -8,7 +18,7 @@ Mon Aug 27 15:53:52 CEST 2007 - schubi@suse.de
  * Changing of filesystem whithin a workflow, cause the solver results will
    be reset if the filesystem dependencies have been changed
  Bug 271912
-- r 695
+- r 690
 
 -------------------------------------------------------------------
 Sun Aug 26 15:49:27 CEST 2007 - kkaempf@suse.de
index 87e7257..c085b47 100644 (file)
@@ -6,6 +6,7 @@
 #include "zypp/base/Logger.h"
 #include "zypp/Arch.h"
 #include "zypp/TmpPath.h"
+#include "zypp/ZConfig.h"
 #include "zypp/cache/CacheInitializer.h"
 #include "zypp/cache/sqlite3x/sqlite3x.hpp"
 
@@ -59,6 +60,7 @@ void cacheinit_test()
 test_suite*
 init_unit_test_suite( int, char* [] )
 {
+    ZConfig::instance().overrideSystemArchitecture( Arch( "i686" ) );
     test_suite* test= BOOST_TEST_SUITE( "CacheInit" );
     test->add( BOOST_TEST_CASE( &cacheinit_test ), 0 /* expected zero error */ );
     return test;
index baaeacf..c82872e 100644 (file)
@@ -12,6 +12,7 @@
 #include "zypp/ZYpp.h"
 #include "zypp/ZYppFactory.h"
 #include "zypp/TmpPath.h"
+#include "zypp/ZConfig.h"
 
 #include "zypp/cache/CacheStore.h"
 #include "zypp/data/ResolvableData.h"
@@ -70,6 +71,8 @@ init_unit_test_suite( int argc, char *argv[] )
   {
     datadir = argv[1];
   }
+
+  ZConfig::instance().overrideSystemArchitecture( Arch( "i686" ) );
   
   test_suite* test= BOOST_TEST_SUITE("CacheStore");
   
index 41d0a34..de34f89 100644 (file)
@@ -27,8 +27,7 @@
 #include "zypp/Pattern.h"
 #include "zypp/Product.h"
 #include "zypp/Patch.h"
-
-#include "zypp/ZYppFactory.h"
+#include "zypp/ZConfig.h"
 
 #include "zypp/detail/ImplConnect.h"
 
@@ -409,6 +408,8 @@ init_unit_test_suite( int argc, char *argv[] )
     datadir = argv[1];
   }
 
+  ZConfig::instance().overrideSystemArchitecture( Arch( "i686" ) );
+
   test_suite* test= BOOST_TEST_SUITE("CacheStore");
 
   std::string const params[] = { datadir };
@@ -422,7 +423,6 @@ init_unit_test_suite( int argc, char *argv[] )
   mounts.insert( DiskUsageCounter::MountPoint("/foo") );
   mounts.insert( DiskUsageCounter::MountPoint("/bar") );
   getZYpp()->setPartitions(mounts);
-  getZYpp()->setArchitecture(Arch("i686"));
 
   test->add(BOOST_PARAM_TEST_CASE(&cache_write_susetags_normal_test,
                                  (std::string const*)params, params+1));
index 717cccd..1e4e091 100644 (file)
@@ -41,7 +41,11 @@ namespace zypp
           autolock_untrustedvendor(false)
       {
         MIL << "ZConfig singleton created." << endl;
-        Pathname confpath("/etc/zypp/zypp.conf");
+
+       // ZYPP_CONF might override /etc/zypp/zypp.conf
+
+        const char *env_confpath = getenv( "ZYPP_CONF" );
+        Pathname confpath( env_confpath ? env_confpath : "/etc/zypp/zypp.conf" );
         if ( PathInfo(confpath).isExist())
         {
           InputStream is(confpath);
@@ -49,7 +53,7 @@ namespace zypp
         }
         else
         {
-          MIL << "No /etc/zypp/zypp.conf" << endl;
+          MIL << confpath << " not found, using defaults instead." << endl;
         }
         
         for ( IniDict::section_const_iterator sit = dict.sectionsBegin(); 
@@ -163,12 +167,26 @@ namespace zypp
   //
   Arch ZConfig::systemArchitecture() const
   {
+    // get architecture from ZYpp() if not overriden,
+    //  ZYpp() knows how to retrieve the client arch and check cpu flags
     return ( (_pimpl->cfg_arch == Arch()) ?
         getZYpp()->architecture() : _pimpl->cfg_arch );
   }
 
   ///////////////////////////////////////////////////////////////////
   //
+  //   METHOD NAME : ZConfig::overrideSystemArchitecture
+  //   METHOD TYPE : void
+  //
+  void ZConfig::overrideSystemArchitecture(const Arch & arch)
+  {
+     WAR << "Overriding system architecture with " << arch << endl;
+     _pimpl->cfg_arch = arch;
+     getZYpp()->setArchitecture( arch );
+  }
+
+  ///////////////////////////////////////////////////////////////////
+  //
   //   METHOD NAME : ZConfig::defaultTextLocale
   //   METHOD TYPE : Locale
   //
index 98cd3f5..38c4201 100644 (file)
@@ -33,6 +33,9 @@ namespace zypp
    * Use it to avoid hardcoded values and calls to getZYpp() just
    * to retrieve some value like architecture, languages or tmppath.
    *
+   * It reads /etc/zypp/zypp.conf, the filename can be overridden by
+   * setting the ZYPP_CONF environment variable to a different file.
+   *
    * \ingroup Singleton
   */
   class ZConfig : private base::NonCopyable
@@ -42,9 +45,15 @@ namespace zypp
       static ZConfig & instance();
 
     public:
-      /** The system architecture. */
+      /** The zypp system architecture. */
       Arch systemArchitecture() const;
 
+      /** Override the zypp system architecture, useful for test scenarious.
+         This should be used for testing/debugging only since the Target backend
+         won't be able to install incompatible packages !!
+          DONT use for normal application unless you know what you're doing. */
+      void overrideSystemArchitecture( const Arch & );
+
       /** The prefered locale for translated labels, descriptions,
        *  descriptions, etc. passed to the UI.
        */