backup
authorMichael Andres <ma@suse.de>
Wed, 12 Nov 2008 12:45:41 +0000 (12:45 +0000)
committerMichael Andres <ma@suse.de>
Wed, 12 Nov 2008 12:45:41 +0000 (12:45 +0000)
devel/devel.ma/CMakeLists.txt
devel/devel.ma/ToolProvideSignedDir.cc [new file with mode: 0644]

index 89ec8b8..425f469 100644 (file)
@@ -34,7 +34,7 @@ FOREACH( loop_var MaTest NewPool DumpSolv Iorder Xml Ex Main FakePool AOUT Parse
 ENDFOREACH( loop_var )
 
 
-FOREACH( loop_var ToolScanRepos )
+FOREACH( loop_var ToolScanRepos ToolProvideSignedDir)
    ADD_EXECUTABLE( ${loop_var}
       ${loop_var}.cc
    )
diff --git a/devel/devel.ma/ToolProvideSignedDir.cc b/devel/devel.ma/ToolProvideSignedDir.cc
new file mode 100644 (file)
index 0000000..3b8a3e8
--- /dev/null
@@ -0,0 +1,127 @@
+#include "Tools.h"
+
+#include <zypp/Fetcher.h>
+
+static std::string appname( "ToolProvideSignedDir" );
+
+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 << "  -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[] )
+{
+  INT << "===[START]==========================================" << endl;
+  appname = Pathname::basename( argv[0] );
+  --argc;
+  ++argv;
+
+  if ( ! argc )
+  {
+    return usage();
+  }
+
+  ///////////////////////////////////////////////////////////////////
+  Pathname mtmp( "/tmp" );
+  Pathname mroot( mtmp/appname );
+  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
+    {
+      urls.push_back( argv[0] );
+    }
+    --argc;
+    ++argv;
+  }
+
+  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 );
+
+  KeyRing::setDefaultAccept( KeyRing::ACCEPT_UNKNOWNKEY|KeyRing::TRUST_KEY_TEMPORARILY );
+
+  int ret = 0;
+  for_( it, urls.begin(), urls.end() )
+  {
+    message( "Setup " + *it );
+    try
+    {
+      Url url( *it );
+      Pathname tdir( mroot/url.getHost()/url.getPathName() );
+      filesystem::assert_dir( tdir );
+
+      Fetcher f;
+      f.setOptions( Fetcher::AutoAddIndexes );
+      f.enqueueDigestedDir( Pathname("."), /*recursive*/false );
+      MediaSetAccess ma( url );
+      f.start( tdir, ma );
+    }
+    catch ( const Exception & exp )
+    {
+      message( exp.asString() + "\n" + exp.historyAsString() );
+      ++ret;
+    }
+  }
+
+  INT << "===[END]============================================" << endl << endl;
+  return ret;
+}