Autodetect path/url in TestSetup::loadRepo
authorMichael Andres <ma@suse.de>
Fri, 7 Nov 2008 14:50:08 +0000 (14:50 +0000)
committerMichael Andres <ma@suse.de>
Fri, 7 Nov 2008 14:50:08 +0000 (14:50 +0000)
devel/devel.ma/Test.cc
devel/devel.ma/ToolScanRepos.cc
tests/lib/TestSetup.h

index 12e2951..f79f1b8 100644 (file)
@@ -11,7 +11,7 @@ int main( int argc, char * argv[] )
   INT << "===[START]==========================================" << endl;
 
   // https://bugzilla.novell.com/show_bug.cgi?id=442200
-  Pathname mroot( "/tmp/ToolScanRepos" );
+  Pathname mroot( "/tmp/Bb" );
   TestSetup test( mroot, Arch_x86_64 );
   test.loadRepos();
 
index d1e785b..e2f88db 100644 (file)
 #include "Tools.h"
 
+static std::string appname( "ToolScanRepos" );
+
+void message( const std::string & msg_r )
+{
+  cerr << "*** " << msg_r << endl;
+}
+
+int usage( const std::string & msg_r = std::string(), int exit_r = 100 )
+{
+  if ( ! msg_r.empty() )
+  {
+    cerr << endl;
+    message( msg_r );
+    cerr << endl;
+  }
+  cerr << "Usage: " << appname << "[OPTIONS] URL..." << endl;
+  cerr << "  Load repos from URL to test system below /tmp/" << appname << "." << endl;
+  cerr << "  -r ROOT  Use /tmp/ROOT as location of test system (default: " << appname << ")." << endl;
+  cerr << "  -a ARCH  Use ARCH as test system architecture (default: x86_64)." << endl;
+  cerr << "  -c       Clear an existing test system (default)." << endl;
+  cerr << "  -n       Do not clear an existing test system but reuse it." << endl;
+  return exit_r;
+}
+
 /******************************************************************
 **
 **      FUNCTION NAME : main
 **      FUNCTION TYPE : int
 */
 int main( int argc, char * argv[] )
-try {
+{
   INT << "===[START]==========================================" << endl;
-  std::string appname( Pathname::basename( argv[0] ) );
+  appname = Pathname::basename( argv[0] );
   --argc;
   ++argv;
 
   if ( ! argc )
   {
-    cerr << "Usage: " << appname << "[OPTIONS] URL..." << endl;
-    cerr << "  Load repos from URL to test system below /tmp/" << appname << "." << endl;
-    cerr << "  --nc Do not clear an existing test system but reuse it." << endl;
-    return 0;
+    return usage();
   }
 
-  Pathname mroot( "/tmp/"+appname );
-  if ( argc && argv[0] == std::string("--nc") )
+  ///////////////////////////////////////////////////////////////////
+  Pathname mtmp( "/tmp" );
+  Pathname mroot( mtmp/appname );
+  Arch     march( Arch_x86_64 );
+  bool     oClearRoot = true;
+
+  std::vector<std::string> urls;
+
+  while ( argc )
   {
+    if ( argv[0] == std::string("-c") )
+    {
+      oClearRoot = true;
+    }
+    else if ( argv[0] == std::string("-n") )
+    {
+      oClearRoot = false;
+    }
+    else if ( argv[0] == std::string("-r") )
+    {
+      --argc;
+      ++argv;
+      if ( ! argc )
+        return usage( "Missing arg to -r ROOT", 101 );
+
+      if ( *(argv[0]) ) // empty
+        mroot = mtmp/argv[0];
+      else
+        mroot = mtmp/appname;
+    }
+     else if ( argv[0] == std::string("-a") )
+    {
+      --argc;
+      ++argv;
+      if ( ! argc )
+        return usage( "Missing arg to -a ARCH", 101 );
+
+      if ( *(argv[0]) ) // empty
+        march = Arch( argv[0] );
+      else
+        march = Arch_x86_64;
+    }
+   else
+    {
+      urls.push_back( argv[0] );
+    }
     --argc;
     ++argv;
   }
-  else
+
+  if ( urls.empty() )
+  {
+    return usage( "Missing URLs", 102 );
+  }
+
+  ///////////////////////////////////////////////////////////////////
+
+  if ( oClearRoot )
   {
+    message( "Clear test system at " + mroot.asString() );
     filesystem::recursive_rmdir( mroot );
   }
+  else
+  {
+    message( "Use test system at " + mroot.asString() );
+  }
   filesystem::assert_dir( mroot );
-  TestSetup test( mroot, Arch_x86_64 );
 
-  while ( argc )
+  message( "Use archiecture " + march.asString() );
+  TestSetup test( mroot, march );
+
+  int ret = 0;
+  for_( it, urls.begin(), urls.end() )
   {
-    test.loadRepo( Url( argv[0] ) );
-    --argc;
-    ++argv;
+    message( "Setup " + *it );
+    try
+    {
+      test.loadRepo( *it );
+    }
+    catch ( const Exception & exp )
+    {
+      message( exp.asString() + "\n" + exp.historyAsString() );
+      ++ret;
+    }
   }
 
   INT << "===[END]============================================" << endl << endl;
-  return 0;
-}
-catch ( const Exception & exp )
-{
-  INT;
-  cerr << exp << endl << exp.historyAsString();
-  throw;
-}
-catch (...)
-{}
+  return ret;
+}
\ No newline at end of file
index fc07f74..ecae96b 100644 (file)
@@ -115,6 +115,25 @@ class TestSetup
       nrepo.setAlias( alias_r.empty() ? path_r.basename() : alias_r );
       satpool().addRepoSolv( path_r, nrepo );
     }
+    /** Directly load repo from some location (url or absolute(!)path).
+     * An empty alias is guessed.
+    */
+    void loadRepo( const std::string & loc_r, const std::string & alias_r = std::string() )
+    {
+      if ( *loc_r.c_str() == '/' )
+      {
+        loadRepo( Pathname( loc_r ), alias_r );
+      }
+      else
+      {
+        loadRepo( Url( loc_r ), alias_r );
+      }
+    }
+    /** Directly load repo from some location (url or absolute(!)path).
+     * An empty alias is guessed.
+    */
+    void loadRepo( const char * loc_r, const std::string & alias_r = std::string() )
+    { loadRepo( std::string( loc_r ? loc_r : "" ), alias_r ); }
 
   public:
     /** Load all enabled repos in repos.d to pool. */