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
|
#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 the digested directory at 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;
}
|