Boost logo

Boost-Commit :

From: agurtovoy_at_[hidden]
Date: 2007-08-06 00:20:32


Author: agurtovoy
Date: 2007-08-06 00:20:22 EDT (Mon, 06 Aug 2007)
New Revision: 38468
URL: http://svn.boost.org/trac/boost/changeset/38468

Log:
Update regression test scripts to work with Subversion
Added:
   trunk/tools/regression/xsl_reports/runner/instructions2html (contents, props changed)
Properties modified:
   trunk/tools/regression/xsl_reports/runner/regression.py (contents, props changed)
Text files modified:
   trunk/tools/regression/xsl_reports/boost_wide_report.py | 2
   trunk/tools/regression/xsl_reports/make_snapshot.py | 71 ++++++++--------
   trunk/tools/regression/xsl_reports/runner/collect_and_upload_logs.py | 18 ++--
   trunk/tools/regression/xsl_reports/runner/default.css | 6 -
   trunk/tools/regression/xsl_reports/runner/instructions.html | 171 +++++++++++++++++++--------------------
   trunk/tools/regression/xsl_reports/runner/instructions.rst | 38 +++++---
   trunk/tools/regression/xsl_reports/runner/regression.py | 93 +++++++++++----------
   7 files changed, 201 insertions(+), 198 deletions(-)

Modified: trunk/tools/regression/xsl_reports/boost_wide_report.py
==============================================================================
--- trunk/tools/regression/xsl_reports/boost_wide_report.py (original)
+++ trunk/tools/regression/xsl_reports/boost_wide_report.py 2007-08-06 00:20:22 EDT (Mon, 06 Aug 2007)
@@ -798,7 +798,7 @@
     print 'Usage: %s [options]' % os.path.basename( sys.argv[0] )
     print '''
 \t--locate-root the same as --locate-root in compiler_status
-\t--tag the tag for the results (i.e. 'CVS-HEAD')
+\t--tag the tag for the results (i.e. 'trunk')
 \t--expected-results the file with the results to be compared with
 \t the current run
 \t--failures-markup the file with the failures markup

Modified: trunk/tools/regression/xsl_reports/make_snapshot.py
==============================================================================
--- trunk/tools/regression/xsl_reports/make_snapshot.py (original)
+++ trunk/tools/regression/xsl_reports/make_snapshot.py 2007-08-06 00:20:22 EDT (Mon, 06 Aug 2007)
@@ -1,5 +1,5 @@
 
-# Copyright (c) MetaCommunications, Inc. 2003-2005
+# Copyright (c) MetaCommunications, Inc. 2003-2007
 #
 # Distributed under the Boost Software License, Version 1.0.
 # (See accompanying file LICENSE_1_0.txt or copy at
@@ -37,27 +37,24 @@
             os.system( 'rm -f -r "%s"' % path )
 
 
-def cvs_command( user, command ):
- cmd = 'cvs -d:ext:%(user)s_at_[hidden]:/cvsroot/boost -z9 %(command)s' \
- % { 'user': user, 'command': command }
-
- utils.log( 'Executing CVS command "%s"' % cmd )
- rc = os.system( cmd )
+def svn_command( command ):
+ utils.log( 'Executing SVN command "%s"' % command )
+ rc = os.system( command )
     if rc != 0:
- raise Exception( 'CVS command "%s" failed with code %d' % ( cmd, rc ) )
-
+ raise Exception( 'SVN command "%s" failed with code %d' % ( command, rc ) )
 
 
-def cvs_export( working_dir, user, tag ):
- if tag != 'CVS-HEAD':
- command = 'export -r %s boost' % tag
+def svn_export( sources_dir, user, tag ):
+ if user is None or user == 'anonymous':
+ command = 'svn export --force http://svn.boost.org/svn/boost/%s %s' % ( tag, sources_dir )
     else:
- command = 'export -r HEAD boost'
+ command = 'svn export --force --non-interactive --username=%s https://svn.boost.org/svn/boost/%s %s' \
+ % ( tag, sources_dir )
 
- os.chdir( working_dir )
- retry(
- cvs_command
- , ( user, command )
+ os.chdir( os.path.basename( sources_dir ) )
+ retry(
+ svn_command
+ , ( command, )
        )
 
 
@@ -67,46 +64,47 @@
         , user
         , site_dir
         ):
+ timestamp = time.time()
+ timestamp_suffix = time.strftime( '%y-%m-%d-%H%M', time.gmtime( timestamp ) )
+
+ tag_suffix = tag.split( '/' )[-1]
+ sources_dir = os.path.join(
+ working_dir
+ , 'boost-%s-%s' % ( tag_suffix, timestamp_suffix )
+ )
 
- sources_dir = os.path.join( working_dir, 'boost' )
     if os.path.exists( sources_dir ):
         utils.log( 'Directory "%s" already exists, cleaning it up...' % sources_dir )
         rmtree( sources_dir )
 
     try:
         os.mkdir( sources_dir )
- utils.log( 'Exporting files from CVS...' )
- cvs_export( working_dir, user, tag )
+ utils.log( 'Exporting files from SVN...' )
+ svn_export( sources_dir, user, tag )
     except:
         utils.log( 'Cleaning up...' )
         rmtree( sources_dir )
         raise
 
- timestamp = time.time()
- timestamped_dir_name = 'boost-%s-%s' % ( tag, time.strftime( '%y-%m-%d-%H%M', time.gmtime( timestamp ) ) )
- timestamped_dir = os.path.join( working_dir, timestamped_dir_name )
-
- utils.log( 'Renaming "%s" to "%s"...' % ( sources_dir, timestamped_dir ) )
- os.rename( sources_dir, timestamped_dir )
 
- tarball_name = 'boost-%s.tar.bz2' % tag
+ tarball_name = 'boost-%s.tar.bz2' % tag_suffix
     tarball_path = os.path.join( working_dir, tarball_name )
 
- utils.log( 'Archiving "%s" to "%s"...' % ( timestamped_dir, tarball_path ) )
+ utils.log( 'Archiving "%s" to "%s"...' % ( sources_dir, tarball_path ) )
     tar = tarfile.open( tarball_path, 'w|bz2' )
     tar.posix = False # see http://tinyurl.com/4ebd8
 
- tar.add( timestamped_dir, timestamped_dir_name )
+ tar.add( sources_dir, os.path.basename( sources_dir ) )
     tar.close()
 
- tarball_timestamp_path = os.path.join( working_dir, 'boost-%s.timestamp' % tag )
+ tarball_timestamp_path = os.path.join( working_dir, 'boost-%s.timestamp' % tag_suffix )
 
     utils.log( 'Writing timestamp into "%s"...' % tarball_timestamp_path )
     timestamp_file = open( tarball_timestamp_path, 'w' )
     timestamp_file.write( '%f' % timestamp )
     timestamp_file.close()
 
- md5sum_path = os.path.join( working_dir, 'boost-%s.md5' % tag )
+ md5sum_path = os.path.join( working_dir, 'boost-%s.md5' % tag_suffix )
     utils.log( 'Writing md5 checksum into "%s"...' % md5sum_path )
     old_dir = os.getcwd()
     os.chdir( os.path.dirname( tarball_path ) )
@@ -123,8 +121,8 @@
         shutil.move( os.path.join( temp_site_dir, tarball_name ), site_dir )
         shutil.move( tarball_timestamp_path, site_dir )
         shutil.move( md5sum_path, site_dir )
- utils.log( 'Removing "%s"...' % timestamped_dir )
- rmtree( timestamped_dir )
+ utils.log( 'Removing "%s"...' % sources_dir )
+ rmtree( sources_dir )
 
 
 def accept_args( args ):
@@ -138,7 +136,8 @@
         ]
         
     options = {
- '--tag': 'CVS-HEAD'
+ '--tag': 'trunk'
+ , '--user': None
         , '--site-dir': None
         }
     
@@ -156,8 +155,8 @@
     print 'Usage: %s [options]' % os.path.basename( sys.argv[0] )
     print '''
 \t--working-dir working directory
-\t--tag snapshot tag (i.e. 'CVS-HEAD')
-\t--user SourceForge user name for a CVS account
+\t--tag snapshot tag (i.e. 'trunk')
+\t--user Boost SVN user ID (optional)
 \t--site-dir site directory to copy the snapshot to (optional)
 '''
 

Modified: trunk/tools/regression/xsl_reports/runner/collect_and_upload_logs.py
==============================================================================
--- trunk/tools/regression/xsl_reports/runner/collect_and_upload_logs.py (original)
+++ trunk/tools/regression/xsl_reports/runner/collect_and_upload_logs.py 2007-08-06 00:20:22 EDT (Mon, 06 Aug 2007)
@@ -52,8 +52,7 @@
     }
 
 dart_project = {
- 'CVS-HEAD': 'Boost_HEAD',
- 'HEAD': 'Boost_HEAD',
+ 'trunk': 'Boost_HEAD',
     '': 'Boost_HEAD'
     }
 
@@ -178,8 +177,9 @@
     try:
         ftp.cwd( tag )
     except ftplib.error_perm:
- ftp.mkd( tag )
- ftp.cwd( tag )
+ for dir in tag.split( '/' ):
+ ftp.mkd( dir )
+ ftp.cwd( dir )
 
     f = open( results_file, 'rb' )
     ftp.storbinary( 'STOR %s' % os.path.basename( results_file ), f )
@@ -378,12 +378,12 @@
         ]
     
     options = {
- '--tag' : 'CVS-HEAD'
+ '--tag' : 'trunk'
         , '--platform' : sys.platform
         , '--comment' : 'comment.html'
         , '--timestamp' : 'timestamp'
         , '--user' : None
- , '--source' : 'CVS'
+ , '--source' : 'SVN'
         , '--run-type' : 'full'
         , '--ftp-proxy' : None
         , '--debug-level' : 0
@@ -429,10 +429,10 @@
 \t as a timestamp of the run ("timestamp" by default)
 \t--comment an HTML comment file to be inserted in the reports
 \t ("comment.html" by default)
-\t--tag the tag for the results ("CVS-HEAD" by default)
+\t--tag the tag for the results ("trunk" by default)
 \t--user SourceForge user name for a shell account (optional)
-\t--source where Boost sources came from (e.g. "CVS", "tarball",
-\t "anonymous CVS"; "CVS" by default)
+\t--source where Boost sources came from ("SVN" or "tarball";
+\t "SVN" by default)
 \t--run-type "incremental" or "full" ("full" by default)
 \t--send-bjam-log in addition to regular XML results, send in full bjam
 \t log of the regression run

Modified: trunk/tools/regression/xsl_reports/runner/default.css
==============================================================================
--- trunk/tools/regression/xsl_reports/runner/default.css (original)
+++ trunk/tools/regression/xsl_reports/runner/default.css 2007-08-06 00:20:22 EDT (Mon, 06 Aug 2007)
@@ -70,9 +70,6 @@
 div.figure {
   margin-left: 2em }
 
-div.footer, div.header {
- font-size: smaller }
-
 div.sidebar {
   margin-left: 1em ;
   border: medium outset ;
@@ -109,9 +106,6 @@
 h2.subtitle {
   text-align: center }
 
-hr {
- width: 75% }
-
 ol.simple, ul.simple {
   margin-bottom: 1em }
 

Modified: trunk/tools/regression/xsl_reports/runner/instructions.html
==============================================================================
--- trunk/tools/regression/xsl_reports/runner/instructions.html (original)
+++ trunk/tools/regression/xsl_reports/runner/instructions.html 2007-08-06 00:20:22 EDT (Mon, 06 Aug 2007)
@@ -3,7 +3,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.3.6: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
 <title>Running Boost Regression Tests</title>
 <style type="text/css">
 
@@ -79,9 +79,6 @@
 div.figure {
   margin-left: 2em }
 
-div.footer, div.header {
- font-size: smaller }
-
 div.sidebar {
   margin-left: 1em ;
   border: medium outset ;
@@ -118,9 +115,6 @@
 h2.subtitle {
   text-align: center }
 
-hr {
- width: 75% }
-
 ol.simple, ul.simple {
   margin-bottom: 1em }
 
@@ -246,21 +240,22 @@
 </style>
 </head>
 <body>
+<div class="document" id="running-boost-regression-tests">
 <h1 class="title">Running Boost Regression Tests</h1>
-<div class="document" id="running-boost-regression">
+
 <div class="section" id="requirements">
-<h1><a name="requirements">Requirements</a></h1>
+<h2>Requirements</h2>
 <ul class="simple">
 <li>Python 2.3 or higher</li>
 <li>Some spare disk space (~5 Gb per each tested compiler)</li>
 </ul>
-<p>That's it! You don't even need a CVS client installed.</p>
+<p>That's it! You don't even need an SVN client installed.</p>
 </div>
 <div class="section" id="installation">
-<h1><a name="installation">Installation</a></h1>
+<h2>Installation</h2>
 <ul class="simple">
-<li>Download regression driver <tt class="docutils literal"><span class="pre">regression.py</span></tt> from <a class="reference" href="http://boost.cvs.sourceforge.net/*checkout*/boost/boost/tools/regression/xsl_reports/runner/regression.py">here</a> (<a class="reference" href="http://tinyurl.com/uufav">http://tinyurl.com/uufav>)
-and put it in the directory where you want all the regression
+<li>Download regression driver <tt class="docutils literal"><span class="pre">regression.py</span></tt> from <a class="reference external" href="
http://svn.boost.org/svn/boost/trunk/tools/regression/xsl_reports/runner/regression.py">here</a> (<a class="reference external" href="http://tinyurl.com/236tty">http://tinyurl.com/236tty>)
+and put it in the directory where you want all the regression
 test files to be placed.</li>
 </ul>
 <ul>
@@ -275,47 +270,47 @@
 </ul>
 </div>
 <div class="section" id="running-tests">
-<h1><a name="running-tests">Running tests</a></h1>
+<h2>Running tests</h2>
 <p>To start a regression run, simply run <tt class="docutils literal"><span class="pre">regression.py</span></tt> providing it with the following
 two arguments:</p>
 <ul class="simple">
-<li>runner id (something unique of your choice that will identify your
-results in the reports <a class="footnote-reference" href="#runnerid1" id="id2" name="id2">[1]</a>, <a class="footnote-reference" href="#runnerid2" id="id3" name="id3">[2]</a>)</li>
-<li>a particular set of toolsets you want to test with <a class="footnote-reference" href="#toolsets" id="id4" name="id4">[3]</a>.</li>
+<li>runner id (something unique of your choice that will identify your
+results in the reports <a class="footnote-reference" href="#runnerid1" id="id2">[1]</a>, <a class="footnote-reference" href="#runnerid2" id="id3">[2]</a>)</li>
+<li>a particular set of toolsets you want to test with <a class="footnote-reference" href="#toolsets" id="id4">[3]</a>.</li>
 </ul>
 <p>For example:</p>
 <pre class="literal-block">
-python regression.py --runner=Metacomm --toolsets=gcc,vc7
+python regression.py --runner=Metacomm --toolsets=gcc-4.2.1,msvc-8.0
 </pre>
 <p>If you are interested in seeing all available options, run <tt class="docutils literal"><span class="pre">python</span> <span class="pre">regression.py</span></tt>
-or <tt class="docutils literal"><span class="pre">python</span> <span class="pre">regression.py</span> <span class="pre">--help</span></tt>. See also the <a class="reference" href="#advanced-use">Advanced use</a> section below.</p>
-<p><strong>Note</strong>: If you are behind a firewall/proxy server, everything should still &quot;just work&quot;.
-In the rare cases when it doesn't, you can explicitly specify the proxy server
+or <tt class="docutils literal"><span class="pre">python</span> <span class="pre">regression.py</span> <span class="pre">--help</span></tt>. See also the <a class="reference internal" href="#advanced-use">Advanced use</a> section below.</p>
+<p><strong>Note</strong>: If you are behind a firewall/proxy server, everything should still &quot;just work&quot;.
+In the rare cases when it doesn't, you can explicitly specify the proxy server
 parameters through the <tt class="docutils literal"><span class="pre">--proxy</span></tt> option, e.g.:</p>
 <pre class="literal-block">
 python regression.py ... <strong>--proxy=
http://www.someproxy.com:3128>
 </pre>
 </div>
 <div class="section" id="details">
-<h1><a name="details">Details</a></h1>
+<h2>Details</h2>
 <p>The regression run procedure will:</p>
 <ul class="simple">
-<li>Download the most recent tarball from <a class="reference" href="
http://www.meta-comm.com/engineering/boost/snapshot/">http://www.meta-comm.com/engineering/boost/snapshot/>,
+<li>Download the most recent tarball from <a class="reference external" href="
http://www.meta-comm.com/engineering/boost/snapshot/">http://www.meta-comm.com/engineering/boost/snapshot/>,
 unpack it in the subdirectory <tt class="docutils literal"><span class="pre">boost</span></tt>.</li>
 <li>Build <tt class="docutils literal"><span class="pre">bjam</span></tt> and <tt class="docutils literal"><span class="pre">process_jam_log</span></tt> if needed. (<tt class="docutils literal"><span class="pre">process_jam_log</span></tt> is an
-utility, which extracts the test results from the log file produced by
+utility, which extracts the test results from the log file produced by
 Boost.Build).</li>
 <li>Run regression tests, process and collect the results.</li>
-<li>Upload the results to <a class="reference" href="
ftp://fx.meta-comm.com/boost-regression">ftp://fx.meta-comm.com/boost-regression>.</li>
+<li>Upload the results to <a class="reference external" href="
ftp://fx.meta-comm.com/boost-regression">ftp://fx.meta-comm.com/boost-regression>.</li>
 </ul>
-<p>The report merger process running continuously on MetaCommunications site will
-merge all submitted test runs and publish them at
-<a class="reference" href="
http://boost.sourceforge.net/regression-logs/developer">http://boost.sourceforge.net/regression-logs/developer>.</p>
+<p>The report merger process running continuously on MetaCommunications site will
+merge all submitted test runs and publish them at
+<a class="reference external" href="
http://engineering.meta-comm.com/boost-regression/">http://engineering.meta-comm.com/boost-regression/>.</p>
 </div>
 <div class="section" id="advanced-use">
-<h1><a name="advanced-use">Advanced use</a></h1>
-<div class="section" id="providing-detailed">
-<h2><a name="providing-detailed">Providing detailed information about your environment</a></h2>
+<h2>Advanced use</h2>
+<div class="section" id="providing-detailed-information-about-your-environment">
+<h3>Providing detailed information about your environment</h3>
 <p>Once you have your regression results displayed in the Boost-wide
 reports, you may consider providing a bit more information about
 yourself and your test environment. This additional information will
@@ -329,71 +324,74 @@
 developers have questions specific to your particular set of results.</p>
 </div>
 <div class="section" id="incremental-runs">
-<h2><a name="incremental-runs">Incremental runs</a></h2>
-<p>You can run <tt class="docutils literal"><span class="pre">regression.py</span></tt> in incremental mode <a class="footnote-reference" href="#incremental" id="id5" name="id5">[4]</a> by simply passing
+<h3>Incremental runs</h3>
+<p>You can run <tt class="docutils literal"><span class="pre">regression.py</span></tt> in incremental mode <a class="footnote-reference" href="#incremental" id="id5">[4]</a> by simply passing
 it an identically named command-line flag:</p>
 <pre class="literal-block">
 python regression.py ... <strong>--incremental</strong>
 </pre>
 </div>
-<div class="section" id="dealing-with-misbehaved">
-<h2><a name="dealing-with-misbehaved">Dealing with misbehaved tests/compilers</a></h2>
-<p>Depending on the environment/C++ runtime support library the test is compiled with,
+<div class="section" id="dealing-with-misbehaved-tests-compilers">
+<h3>Dealing with misbehaved tests/compilers</h3>
+<p>Depending on the environment/C++ runtime support library the test is compiled with,
 a test failure/termination may cause an appearance of a dialog window, requiring
 human intervention to proceed. Moreover, the test (or even of the compiler itself)
-can fall into infinite loop, or simply run for too long. To allow <tt class="docutils literal"><span class="pre">regression.py</span></tt>
-to take care of these obstacles, add the <tt class="docutils literal"><span class="pre">--monitored</span></tt> flag to the script
+can fall into infinite loop, or simply run for too long. To allow <tt class="docutils literal"><span class="pre">regression.py</span></tt>
+to take care of these obstacles, add the <tt class="docutils literal"><span class="pre">--monitored</span></tt> flag to the script
 invocation:</p>
 <pre class="literal-block">
 python regression.py ... <strong>--monitored</strong>
 </pre>
-<p>That's it. Knowing your intentions, the script will be able to automatically deal
-with the listed issues <a class="footnote-reference" href="#monitored" id="id6" name="id6">[5]</a>.</p>
+<p>That's it. Knowing your intentions, the script will be able to automatically deal
+with the listed issues <a class="footnote-reference" href="#monitored" id="id6">[5]</a>.</p>
 </div>
-<div class="section" id="getting-sources-from-cvs">
-<h2><a name="getting-sources-from-cvs">Getting sources from CVS</a></h2>
-<p>If you already have a CVS client installed and configured, you might prefer to get
-the sources directly from the Boost CVS repository. To communicate this to the
-script, you just need to pass it your SourceForge user ID using the <tt class="docutils literal"><span class="pre">--user</span></tt>
-option; for instance:</p>
+<div class="section" id="getting-sources-from-svn">
+<h3>Getting sources from SVN</h3>
+<p>If you already have an SVN client installed and configured, you might
+prefer to get the sources directly from the <a class="reference external" href="
http://svn.boost.org/trac/boost/wiki/BoostSubversion">Boost Subversion
+Repository</a>. To communicate this to the script, you just need to
+pass it your Boost SVN user ID using the <tt class="docutils literal"><span class="pre">--user</span></tt> option; for
+instance:</p>
 <pre class="literal-block">
 python regression.py ... <strong>--user=agurtovoy</strong>
 </pre>
-<p>You can also specify the user as <tt class="docutils literal"><span class="pre">anonymous</span></tt>, requesting anonymous CVS access.
-Note, though, that the files obtained this way tend to lag behind the actual CVS
-state by several hours, sometimes up to twelve. By contrast, the tarball the script
-downloads by default is at most one hour behind.</p>
-</div>
-<div class="section" id="integration-with-a-custom">
-<h2><a name="integration-with-a-custom">Integration with a custom driver script</a></h2>
-<p>Even if you've already been using a custom driver script, and for some
-reason you don't want <tt class="docutils literal"><span class="pre">regression.py</span></tt> to take over of the entire test cycle,
-getting your regression results into <a class="reference" href="http://www.boost.org/regression-logs/developer/">Boost-wide reports</a> is still easy!</p>
-<p>In fact, it's just a matter of modifying your script to perform two straightforward
+<p>You can also specify the user as <tt class="docutils literal"><span class="pre">anonymous</span></tt>, requesting anonymous
+SVN access.</p>
+<p>The main advantage of obtaining the sources through SVN is an
+immediate availability of the most recent check-ins: the sources
+extracted from a tarball the script downloads by default can be up to
+one hour behind the actual repository state at the time of test run.</p>
+</div>
+<div class="section" id="integration-with-a-custom-driver-script">
+<h3>Integration with a custom driver script</h3>
+<p>Even if you've already been using a custom driver script, and for some
+reason you don't want <tt class="docutils literal"><span class="pre">regression.py</span></tt> to take over of the entire test cycle,
+getting your regression results into <a class="reference external" href="http://www.boost.org/regression-logs/developer/">Boost-wide reports</a> is still easy!</p>
+<p>In fact, it's just a matter of modifying your script to perform two straightforward
 operations:</p>
 <ol class="arabic">
-<li><p class="first"><em>Timestamp file creation</em> needs to be done before the CVS update/checkout.
-The file's location doesn't matter (nor does the content), as long as you know how
+<li><p class="first"><em>Timestamp file creation</em> needs to be done before the SVN update/checkout.
+The file's location doesn't matter (nor does the content), as long as you know how
 to access it later. Making your script to do something as simple as
 <tt class="docutils literal"><span class="pre">echo</span> <span class="pre">&gt;timestamp</span></tt> would work just fine.</p>
 </li>
 <li><p class="first"><em>Collecting and uploading logs</em> can be done any time after <tt class="docutils literal"><span class="pre">process_jam_log</span></tt>' s
 run, and is as simple as an invocation of the local copy of
 <tt class="docutils literal"><span class="pre">$BOOST_ROOT/tools/regression/xsl_reports/runner/collect_and_upload_logs.py</span></tt>
-script that was just obtained from the CVS with the rest of the sources.
+script that was just obtained from the SVN with the rest of the sources.
 You'd need to provide <tt class="docutils literal"><span class="pre">collect_and_upload_logs.py</span></tt> with the following three
 arguments:</p>
 <pre class="literal-block">
 --locate-root directory to to scan for &quot;test_log.xml&quot; files
 --runner runner ID (e.g. &quot;Metacomm&quot;)
---timestamp path to a file which modification time will be used
+--timestamp path to a file which modification time will be used
                 as a timestamp of the run (&quot;timestamp&quot; by default)
 </pre>
 <p>For example, assuming that the run's resulting binaries are in the
-<tt class="docutils literal"><span class="pre">$BOOST_ROOT/bin</span></tt> directory (the default Boost.Build setup), the
+<tt class="docutils literal"><span class="pre">$BOOST_ROOT/bin</span></tt> directory (the default Boost.Build setup), the
 <tt class="docutils literal"><span class="pre">collect_and_upload_logs.py</span></tt> invocation might look like this:</p>
 <pre class="literal-block">
-python $BOOST_ROOT/tools/regression/xsl_reports/runner/collect_and_upload_logs.py
+python $BOOST_ROOT/tools/regression/xsl_reports/runner/collect_and_upload_logs.py
    --locate-root=$BOOST_ROOT/bin
    --runner=Metacomm
    --timestamp=timestamp
@@ -402,7 +400,7 @@
 </ol>
 </div>
 <div class="section" id="patching-boost-sources">
-<h2><a name="patching-boost-sources">Patching Boost sources</a></h2>
+<h3>Patching Boost sources</h3>
 <p>You might encounter an occasional need to make local modifications to
 the Boost codebase before running the tests, without disturbing the
 automatic nature of the regression process. To implement this under
@@ -418,17 +416,17 @@
 </div>
 </div>
 <div class="section" id="feedback">
-<h1><a name="feedback">Feedback</a></h1>
-<p>Please send all comments/suggestions regarding this document and the testing procedure
-itself to the <a class="reference" href="http://lists.boost.org/mailman/listinfo.cgi/boost-testing">Boost Testing list</a>.</p>
+<h2>Feedback</h2>
+<p>Please send all comments/suggestions regarding this document and the testing procedure
+itself to the <a class="reference external" href="http://lists.boost.org/mailman/listinfo.cgi/boost-testing">Boost Testing list</a>.</p>
 </div>
 <div class="section" id="notes">
-<h1><a name="notes">Notes</a></h1>
+<h2>Notes</h2>
 <table class="docutils footnote" frame="void" id="runnerid1" rules="none">
 <colgroup><col class="label" /><col /></colgroup>
 <tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id2" name="runnerid1">[1]</a></td><td>If you are running regressions interlacingly with a different
-set of compilers (e.g. for Intel in the morning and GCC at the end of the day), you need
+<tr><td class="label"><a class="fn-backref" href="#id2">[1]</a></td><td>If you are running regressions interlacingly with a different
+set of compilers (e.g. for Intel in the morning and GCC at the end of the day), you need
 to provide a <em>different</em> runner id for each of these runs, e.g. <tt class="docutils literal"><span class="pre">your_name-intel</span></tt>, and
 <tt class="docutils literal"><span class="pre">your_name-gcc</span></tt>.</td></tr>
 </tbody>
@@ -436,33 +434,33 @@
 <table class="docutils footnote" frame="void" id="runnerid2" rules="none">
 <colgroup><col class="label" /><col /></colgroup>
 <tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id3" name="runnerid2">[2]</a></td><td>The limitations of the reports' format/medium impose a direct dependency
-between the number of compilers you are testing with and the amount of space available
-for your runner id. If you are running regressions for a single compiler, please make
+<tr><td class="label"><a class="fn-backref" href="#id3">[2]</a></td><td>The limitations of the reports' format/medium impose a direct dependency
+between the number of compilers you are testing with and the amount of space available
+for your runner id. If you are running regressions for a single compiler, please make
 sure to choose a short enough id that does not significantly disturb the reports' layout.</td></tr>
 </tbody>
 </table>
 <table class="docutils footnote" frame="void" id="toolsets" rules="none">
 <colgroup><col class="label" /><col /></colgroup>
 <tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id4" name="toolsets">[3]</a></td><td>If <tt class="docutils literal"><span class="pre">--toolsets</span></tt> option is not provided, the script will try to use the
+<tr><td class="label"><a class="fn-backref" href="#id4">[3]</a></td><td>If <tt class="docutils literal"><span class="pre">--toolsets</span></tt> option is not provided, the script will try to use the
 platform's default toolset (<tt class="docutils literal"><span class="pre">gcc</span></tt> for most Unix-based systems).</td></tr>
 </tbody>
 </table>
 <table class="docutils footnote" frame="void" id="incremental" rules="none">
 <colgroup><col class="label" /><col /></colgroup>
 <tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id5" name="incremental">[4]</a></td><td><p class="first">By default, the script runs in what is known as <em>full mode</em>: on
-each <tt class="docutils literal"><span class="pre">regression.py</span></tt> invocation all the files that were left in place by the
-previous run -- including the binaries for the successfully built tests and libraries
--- are deleted, and everything is rebuilt once again from scratch. By contrast, in
-<em>incremental mode</em> the already existing binaries are left intact, and only the
-tests and libraries which source files has changed since the previous run are
+<tr><td class="label"><a class="fn-backref" href="#id5">[4]</a></td><td><p class="first">By default, the script runs in what is known as <em>full mode</em>: on
+each <tt class="docutils literal"><span class="pre">regression.py</span></tt> invocation all the files that were left in place by the
+previous run -- including the binaries for the successfully built tests and libraries
+-- are deleted, and everything is rebuilt once again from scratch. By contrast, in
+<em>incremental mode</em> the already existing binaries are left intact, and only the
+tests and libraries which source files has changed since the previous run are
 re-built and re-tested.</p>
-<p>The main advantage of incremental runs is a significantly shorter turnaround time,
+<p>The main advantage of incremental runs is a significantly shorter turnaround time,
 but unfortunately they don't always produce reliable results. Some type of changes
 to the codebase (changes to the bjam testing subsystem in particular)
-often require switching to a full mode for one cycle in order to produce
+often require switching to a full mode for one cycle in order to produce
 trustworthy reports.</p>
 <p class="last">As a general guideline, if you can afford it, testing in full mode is preferable.</p>
 </td></tr>
@@ -471,16 +469,17 @@
 <table class="docutils footnote" frame="void" id="monitored" rules="none">
 <colgroup><col class="label" /><col /></colgroup>
 <tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id6" name="monitored">[5]</a></td><td>Note that at the moment this functionality is available only if you
+<tr><td class="label"><a class="fn-backref" href="#id6">[5]</a></td><td>Note that at the moment this functionality is available only if you
 are running on a Windows platform. Contributions are welcome!</td></tr>
 </tbody>
 </table>
 </div>
 </div>
-<hr class="docutils footer" />
 <div class="footer">
-Generated on: 2007-02-20 10:21 UTC.
-Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
+<hr class="footer" />
+Generated on: 2007-08-05 04:33 UTC.
+Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
+
 </div>
 </body>
 </html>

Modified: trunk/tools/regression/xsl_reports/runner/instructions.rst
==============================================================================
--- trunk/tools/regression/xsl_reports/runner/instructions.rst (original)
+++ trunk/tools/regression/xsl_reports/runner/instructions.rst 2007-08-06 00:20:22 EDT (Mon, 06 Aug 2007)
@@ -8,16 +8,16 @@
 * Python 2.3 or higher
 * Some spare disk space (~5 Gb per each tested compiler)
 
-That's it! You don't even need a CVS client installed.
+That's it! You don't even need an SVN client installed.
 
 Installation
 ------------
 
-* Download regression driver ``regression.py`` from here__ (http://tinyurl.com/uufav)
+* Download regression driver ``regression.py`` from here__ (http://tinyurl.com/236tty)
   and put it in the directory where you want all the regression
   test files to be placed.
 
-__ http://boost.cvs.sourceforge.net/*checkout*/boost/boost/tools/regression/xsl_reports/runner/regression.py
+__ http://svn.boost.org/svn/boost/trunk/tools/regression/xsl_reports/runner/regression.py
 
 
 * **Optional**: If you already have ``bjam`` and/or ``process_jam_log`` executables
@@ -43,7 +43,7 @@
 
 For example::
 
- python regression.py --runner=Metacomm --toolsets=gcc,vc7
+ python regression.py --runner=Metacomm --toolsets=gcc-4.2.1,msvc-8.0
     
 
 If you are interested in seeing all available options, run ``python regression.py``
@@ -77,7 +77,7 @@
 
 The report merger process running continuously on MetaCommunications site will
 merge all submitted test runs and publish them at
-http://boost.sourceforge.net/regression-logs/developer.
+http://engineering.meta-comm.com/boost-regression/.
 
 
 Advanced use
@@ -130,22 +130,28 @@
 with the listed issues [#monitored]_.
 
 
-Getting sources from CVS
+Getting sources from SVN
 ........................
 
-If you already have a CVS client installed and configured, you might prefer to get
-the sources directly from the Boost CVS repository. To communicate this to the
-script, you just need to pass it your SourceForge user ID using the ``--user``
-option; for instance:
+If you already have an SVN client installed and configured, you might
+prefer to get the sources directly from the `Boost Subversion
+Repository`__. To communicate this to the script, you just need to
+pass it your Boost SVN user ID using the ``--user`` option; for
+instance:
+
+__ http://svn.boost.org/trac/boost/wiki/BoostSubversion
 
 .. parsed-literal::
 
       python regression.py ... **--user=agurtovoy**
 
-You can also specify the user as ``anonymous``, requesting anonymous CVS access.
-Note, though, that the files obtained this way tend to lag behind the actual CVS
-state by several hours, sometimes up to twelve. By contrast, the tarball the script
-downloads by default is at most one hour behind.
+You can also specify the user as ``anonymous``, requesting anonymous
+SVN access.
+
+The main advantage of obtaining the sources through SVN is an
+immediate availability of the most recent check-ins: the sources
+extracted from a tarball the script downloads by default can be up to
+one hour behind the actual repository state at the time of test run.
 
 
 Integration with a custom driver script
@@ -158,7 +164,7 @@
 In fact, it's just a matter of modifying your script to perform two straightforward
 operations:
 
-1. *Timestamp file creation* needs to be done before the CVS update/checkout.
+1. *Timestamp file creation* needs to be done before the SVN update/checkout.
    The file's location doesn't matter (nor does the content), as long as you know how
    to access it later. Making your script to do something as simple as
    ``echo >timestamp`` would work just fine.
@@ -166,7 +172,7 @@
 2. *Collecting and uploading logs* can be done any time after ``process_jam_log``' s
    run, and is as simple as an invocation of the local copy of
    ``$BOOST_ROOT/tools/regression/xsl_reports/runner/collect_and_upload_logs.py``
- script that was just obtained from the CVS with the rest of the sources.
+ script that was just obtained from the SVN with the rest of the sources.
    You'd need to provide ``collect_and_upload_logs.py`` with the following three
    arguments::
 

Added: trunk/tools/regression/xsl_reports/runner/instructions2html
==============================================================================
--- (empty file)
+++ trunk/tools/regression/xsl_reports/runner/instructions2html 2007-08-06 00:20:22 EDT (Mon, 06 Aug 2007)
@@ -0,0 +1 @@
+rst2html.py -dtg --embed-stylesheet --stylesheet=default.css --initial-header-level=2 instructions.rst instructions.html

Modified: trunk/tools/regression/xsl_reports/runner/regression.py
==============================================================================
--- trunk/tools/regression/xsl_reports/runner/regression.py (original)
+++ trunk/tools/regression/xsl_reports/runner/regression.py 2007-08-06 00:20:22 EDT (Mon, 06 Aug 2007)
@@ -32,9 +32,9 @@
 xsl_reports_dir = os.path.join( boost_root, 'tools', 'regression', 'xsl_reports' )
 timestamp_path = os.path.join( regression_root, 'timestamp' )
 
-cvs_command_line = 'cvs -z9 %(command)s'
-cvs_ext_command_line = 'cvs -d:ext:%(user)s_at_[hidden]:/cvsroot/boost -z9 %(command)s'
-cvs_pserver_command_line = 'cvs -d:pserver:%(user)s_at_[hidden]:/cvsroot/boost -z9 %(command)s'
+svn_anonymous_command_line = 'svn %(command)s'
+svn_command_line = 'svn --non-interactive --username=%(user)s %(command)s'
+
 
 bjam = {}
 process_jam_log = {}
@@ -174,6 +174,7 @@
 
 
 def tarball_name_for_tag( tag, timestamp = False ):
+ tag = tag.split( '/' )[-1]
     if not timestamp: return 'boost-%s.tar.bz2' % tag
     else: return 'boost-%s.timestamp' % tag
 
@@ -255,38 +256,32 @@
     os.rename( boost_dir, boost_root )
 
 
-def cvs_command( user, command ):
- if user is None:
- cmd = cvs_command_line % { 'command': command }
- elif user == 'anonymous':
- cmd = cvs_pserver_command_line % { 'user': user, 'command': command }
+def svn_command( user, command ):
+ if user is None or user == 'anonymous':
+ cmd = svn_anonymous_command_line % { 'command': command }
     else:
- cmd = cvs_ext_command_line % { 'user': user, 'command': command }
+ cmd = svn_command_line % { 'user': user, 'command': command }
 
- log( 'Executing CVS command "%s"' % cmd )
+ log( 'Executing SVN command "%s"' % cmd )
     rc = os.system( cmd )
     if rc != 0:
- raise Exception( 'CVS command "%s" failed with code %d' % ( cmd, rc ) )
+ raise Exception( 'SVN command "%s" failed with code %d' % ( cmd, rc ) )
 
 
-def cvs_checkout( user, tag, args ):
- if tag != 'CVS-HEAD':
- command = 'checkout -r %s boost' % tag
- else:
- command = 'checkout boost'
+def svn_repository_url( user, tag ):
+ if user != 'anonymous': return 'https://svn.boost.org/svn/boost/%s' % tag
+ else: return 'http://svn.boost.org/svn/boost/%s' % tag
 
- os.chdir( regression_root )
- cvs_command( user, command )
 
+def svn_checkout( user, tag, args ):
+ command = 'co %s boost' % svn_repository_url( user, tag )
+ os.chdir( regression_root )
+ svn_command( user, command )
 
-def cvs_update( user, tag, args ):
- if tag != 'CVS-HEAD':
- command = 'update -dPA -r %s' % tag
- else:
- command = 'update -dPA'
 
- os.chdir( os.path.join( regression_root, 'boost' ) )
- cvs_command( user, command )
+def svn_update( user, tag, args ):
+ os.chdir( boost_root )
+ svn_command( user, 'update' )
 
 
 def format_time( t ):
@@ -330,7 +325,7 @@
 
     if user is not None:
         retry(
- cvs_checkout
+ svn_checkout
             , ( user, tag, args )
             )
     else:
@@ -341,11 +336,11 @@
 
 
 def update_source( user, tag, proxy, args, **unused ):
- if user is not None or os.path.exists( os.path.join( boost_root, 'CVS' ) ):
+ if user is not None or os.path.exists( os.path.join( boost_root, '.svn' ) ):
         open( timestamp_path, 'w' ).close()
- log( 'Updating sources from CVS (%s)...' % timestamp() )
+ log( 'Updating sources from SVN (%s)...' % timestamp() )
         retry(
- cvs_update
+ svn_update
             , ( user, tag, args )
             )
     else:
@@ -471,6 +466,7 @@
             log( 'Warning: Test monitoring is not supported on this platform (yet).' )
             log( ' Please consider contributing this piece!' )
 
+
 def bjam_build_script_cmd( cmd ):
     env_setup_key = 'BJAM_ENVIRONMENT_SETUP'
     if os.environ.has_key( env_setup_key ):
@@ -482,9 +478,11 @@
 def bjam_command( toolsets, v2 ):
     build_path = regression_root
     if build_path[-1] == '\\': build_path += '\\'
+
     v2_option = ""
     if v2:
         v2_option = "--v2"
+
     result = '"%s" %s "-sBOOST_BUILD_PATH=%s" "-sBOOST_ROOT=%s"'\
         % (
             tool_path( bjam, v2 )
@@ -493,7 +491,7 @@
           , boost_root
           )
 
- if not toolsets is None:
+ if toolsets:
         if v2:
             result += ' ' + string.join(string.split( toolsets, ',' ), ' ' )
         else:
@@ -603,6 +601,7 @@
         if monitored:
             stop_build_monitor()
 
+
 def build_book( **kargs ):
     # To do
     # 1. PDF generation
@@ -621,6 +620,7 @@
     finally:
         os.chdir( cwd )
 
+
 def collect_logs(
           tag
         , runner
@@ -649,12 +649,9 @@
     else: run_type = 'full'
 
     source = 'tarball'
- cvs_root_file = os.path.join( boost_root, 'CVS', 'root' )
- if os.path.exists( cvs_root_file ):
- if string.split( open( cvs_root_file ).readline(), '@' )[0] == ':pserver:anonymous':
- source = 'anonymous CVS'
- else:
- source = 'CVS'
+ svn_root_file = os.path.join( boost_root, '.svn' )
+ if os.path.exists( svn_root_file ):
+ source = 'SVN'
 
     from runner import collect_logs
     collect_logs(
@@ -670,6 +667,7 @@
         , dart_server
         )
 
+
 def collect_book( **unused ):
     log( 'Collecting files for BoostBook into "%s"...' % boostbook_archive_name )
     import zipfile
@@ -683,9 +681,11 @@
         for name in names:
             path = os.path.join( dirname, name )
             if not os.path.isdir( path ):
- boostbook_archive.write( path, path[ len(html_root) + 1: ] )
+ boostbook_archive.write( path, path[ len( html_root ) + 1: ] )
+
     os.path.walk( html_root, add_files, None )
     
+
 def upload_logs(
           tag
         , runner
@@ -700,14 +700,17 @@
     from runner import upload_logs
     retry(
           upload_logs
- , ( regression_results, runner, tag, user, ftp_proxy, debug_level, send_bjam_log, timestamp_path, dart_server )
+ , ( regression_results, runner, tag, user, ftp_proxy, debug_level,
+ send_bjam_log, timestamp_path, dart_server )
         )
 
+
 def upload_book( tag, runner, ftp_proxy, debug_level, **unused ):
     import_utils()
     from runner import upload_to_ftp
     upload_to_ftp( tag, boostbook_archive_name, ftp_proxy, debug_level )
-
+
+
 def update_itself( tag, **unused ):
     source = os.path.join( xsl_reports_dir, 'runner', os.path.basename( sys.argv[0] ) )
     self = os.path.join( regression_root, os.path.basename( sys.argv[0] ) )
@@ -805,6 +808,7 @@
 
         setup( comment, toolsets, book, bjam_toolset, pjl_toolset, monitored, proxy,
                v2, [] )
+
         # Not specifying --toolset in command line is not enough
         # that would mean to use Boost.Build default ones
         # We can skip test only we were explictly
@@ -813,8 +817,9 @@
             test( toolsets, bjam_options, monitored, timeout, v2, [] )
             collect_logs( tag, runner, platform, user, comment, incremental, dart_server, [] )
             upload_logs( tag, runner, user, ftp_proxy, debug_level, send_bjam_log, dart_server )
+
         if book:
- build_book()
+ build_book()
             collect_book()
             upload_book( tag, runner, ftp_proxy, debug_level )
 
@@ -884,7 +889,7 @@
         ]
 
     options = {
- '--tag' : 'CVS-HEAD'
+ '--tag' : 'trunk'
         , '--local' : None
         , '--platform' : platform_name()
         , '--user' : None
@@ -962,20 +967,20 @@
 
 Options:
 \t--runner runner ID (e.g. 'Metacomm')
-\t--tag the tag for the results ('CVS-HEAD' by default)
+\t--tag the tag for the results ('trunk' by default)
 \t--local the name of the boost tarball
 \t--comment an HTML comment file to be inserted in the reports
 \t ('comment.html' by default)
 \t--incremental do incremental run (do not remove previous binaries)
 \t--dont-send-bjam-log
 \t do not send full bjam log of the regression run
-\t--force-update do a CVS update (if applicable) instead of a clean
+\t--force-update do an SVN update (if applicable) instead of a clean
 \t checkout, even when performing a full run
 \t--monitored do a monitored run
 \t--timeout specifies the timeout, in minutes, for a single test
 \t run/compilation (enforced only in monitored runs, 5 by
 \t default)
-\t--user SourceForge user name for a shell/CVS account (optional)
+\t--user Boost SVN user ID (optional)
 \t--toolsets comma-separated list of toolsets to test with (optional)
 \t--book build BoostBook (optional)
 \t--bjam-options options to pass to the regression test (optional)


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk