File: ToolScanRepos.cc

package info (click to toggle)
libzypp 17.38.1-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 27,716 kB
  • sloc: cpp: 132,661; xml: 2,587; sh: 518; python: 266; makefile: 27
file content (136 lines) | stat: -rw-r--r-- 3,308 bytes parent folder | download | duplicates (2)
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;
}