1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
#define INCLUDE_TESTSETUP_WITHOUT_BOOST
#include <tests/lib/TestSetup.h>
#undef INCLUDE_TESTSETUP_WITHOUT_BOOST
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[] )
{
INT << "===[START]==========================================" << endl;
appname = Pathname::basename( argv[0] );
--argc;
++argv;
if ( ! argc )
{
return usage();
}
///////////////////////////////////////////////////////////////////
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") || argv[0] == std::string("--root"))
{
--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;
}
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 );
base::LogControl::instance().logfile( mroot/"ToolScanRepos.log" );
message( "Use logfile " + (mroot/"ToolScanRepos.log").asString() );
message( "Use archiecture " + march.asString() );
TestSetup test( mroot, march );
int ret = 0;
for_( it, urls.begin(), urls.end() )
{
message( "Setup " + *it );
try
{
test.loadRepo( *it );
}
catch ( const Exception & exp )
{
message( exp.asString() + "\n" + exp.historyAsString() );
++ret;
}
}
INT << "===[END]============================================" << endl << endl;
return ret;
}
|