#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
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. */