subversion-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From cmpil...@apache.org
Subject svn commit: r1403849 [19/19] - in /subversion/branches/master-passphrase: ./ build/ build/ac-macros/ build/hudson/ contrib/server-side/fsfsfixer/ notes/ notes/api-errata/1.8/ notes/directory-index/ notes/obliterate/ notes/tree-conflicts/ subversion/bin...
Date Tue, 30 Oct 2012 20:03:39 GMT
Modified: subversion/branches/master-passphrase/tools/buildbot/slaves/xp-vc60-ia32/svnbuild.bat
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/tools/buildbot/slaves/xp-vc60-ia32/svnbuild.bat?rev=1403849&r1=1403848&r2=1403849&view=diff
==============================================================================
--- subversion/branches/master-passphrase/tools/buildbot/slaves/xp-vc60-ia32/svnbuild.bat (original)
+++ subversion/branches/master-passphrase/tools/buildbot/slaves/xp-vc60-ia32/svnbuild.bat Tue Oct 30 20:03:28 2012
@@ -1,77 +1,77 @@
-REM     Licensed to the Apache Software Foundation (ASF) under one
-REM     or more contributor license agreements.  See the NOTICE file
-REM     distributed with this work for additional information
-REM     regarding copyright ownership.  The ASF licenses this file
-REM     to you under the Apache License, Version 2.0 (the
-REM     "License"); you may not use this file except in compliance
-REM     with the License.  You may obtain a copy of the License at
-REM    
-REM       http://www.apache.org/licenses/LICENSE-2.0
-REM    
-REM     Unless required by applicable law or agreed to in writing,
-REM     software distributed under the License is distributed on an
-REM     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-REM     KIND, either express or implied.  See the License for the
-REM     specific language governing permissions and limitations
-REM     under the License.
-
-IF NOT EXIST ..\config.bat GOTO noconfig
-call ..\config.bat
-
-IF NOT "%OPENSSL_DIR%"=="" call :openssl
-IF ERRORLEVEL 1 GOTO ERROR
-
-set PARAMS=-t dsp --with-berkeley-db=%BDB_DIR% --with-libintl=%INTL_DIR% --with-zlib=%ZLIB_DIR% --with-httpd=%HTTPD_SRC_DIR% --with-neon=%NEON_DIR% --enable-bdb-in-apr-util
-IF NOT "%OPENSSL_DIR%"=="" set PARAMS=%PARAMS% --with-openssl=%OPENSSL_DIR%
-
-python gen-make.py %PARAMS%
-IF ERRORLEVEL 1 GOTO ERROR
-
-MSDEV.COM %HTTPD_SRC_DIR%\apache.dsw /MAKE "BuildBin - Win32 Release"
-IF ERRORLEVEL 1 GOTO ERROR
-
-MSDEV.COM subversion_msvc.dsw /USEENV /MAKE "__ALL_TESTS__ - Win32 Release"
-IF ERRORLEVEL 1 GOTO ERROR
-
-
-EXIT 0
-
-REM ----------------------------------------------------
-:ERROR
-ECHO.
-ECHO *** Whoops, something choked.
-ECHO.
-CD ..
-EXIT 1
-
-
-:openssl
-rem ====== Build openssl.
-pushd %OPENSSL_DIR%
-perl Configure VC-WIN32
-IF ERRORLEVEL 1 goto openssl-err1
-
-call ms\do_ms
-IF ERRORLEVEL 1 goto openssl-err1
-
-nmake -f ms\ntdll.mak /NOLOGO /S
-IF ERRORLEVEL 1 goto openssl-err1
-
-pushd out32dll
-call ..\ms\test
-IF ERRORLEVEL 1 goto openssl-err2
-
-popd
-popd
-EXIT /B 0
-
-:openssl-err2
-popd
-
-:openssl-err1
-popd
-EXIT 1
-
-:noconfig
-echo File config.bat not found. Please copy it from config.bat.tmpl and tweak for you.
-EXIT 2
+REM     Licensed to the Apache Software Foundation (ASF) under one
+REM     or more contributor license agreements.  See the NOTICE file
+REM     distributed with this work for additional information
+REM     regarding copyright ownership.  The ASF licenses this file
+REM     to you under the Apache License, Version 2.0 (the
+REM     "License"); you may not use this file except in compliance
+REM     with the License.  You may obtain a copy of the License at
+REM    
+REM       http://www.apache.org/licenses/LICENSE-2.0
+REM    
+REM     Unless required by applicable law or agreed to in writing,
+REM     software distributed under the License is distributed on an
+REM     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+REM     KIND, either express or implied.  See the License for the
+REM     specific language governing permissions and limitations
+REM     under the License.
+
+IF NOT EXIST ..\config.bat GOTO noconfig
+call ..\config.bat
+
+IF NOT "%OPENSSL_DIR%"=="" call :openssl
+IF ERRORLEVEL 1 GOTO ERROR
+
+set PARAMS=-t dsp --with-berkeley-db=%BDB_DIR% --with-libintl=%INTL_DIR% --with-zlib=%ZLIB_DIR% --with-httpd=%HTTPD_SRC_DIR% --with-neon=%NEON_DIR% --enable-bdb-in-apr-util
+IF NOT "%OPENSSL_DIR%"=="" set PARAMS=%PARAMS% --with-openssl=%OPENSSL_DIR%
+
+python gen-make.py %PARAMS%
+IF ERRORLEVEL 1 GOTO ERROR
+
+MSDEV.COM %HTTPD_SRC_DIR%\apache.dsw /MAKE "BuildBin - Win32 Release"
+IF ERRORLEVEL 1 GOTO ERROR
+
+MSDEV.COM subversion_msvc.dsw /USEENV /MAKE "__ALL_TESTS__ - Win32 Release"
+IF ERRORLEVEL 1 GOTO ERROR
+
+
+EXIT 0
+
+REM ----------------------------------------------------
+:ERROR
+ECHO.
+ECHO *** Whoops, something choked.
+ECHO.
+CD ..
+EXIT 1
+
+
+:openssl
+rem ====== Build openssl.
+pushd %OPENSSL_DIR%
+perl Configure VC-WIN32
+IF ERRORLEVEL 1 goto openssl-err1
+
+call ms\do_ms
+IF ERRORLEVEL 1 goto openssl-err1
+
+nmake -f ms\ntdll.mak /NOLOGO /S
+IF ERRORLEVEL 1 goto openssl-err1
+
+pushd out32dll
+call ..\ms\test
+IF ERRORLEVEL 1 goto openssl-err2
+
+popd
+popd
+EXIT /B 0
+
+:openssl-err2
+popd
+
+:openssl-err1
+popd
+EXIT 1
+
+:noconfig
+echo File config.bat not found. Please copy it from config.bat.tmpl and tweak for you.
+EXIT 2

Propchange: subversion/branches/master-passphrase/tools/buildbot/slaves/xp-vc60-ia32/svnbuild.bat
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: subversion/branches/master-passphrase/tools/buildbot/slaves/xp-vc60-ia32/svncheck.bat
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/tools/buildbot/slaves/xp-vc60-ia32/svncheck.bat?rev=1403849&r1=1403848&r2=1403849&view=diff
==============================================================================
--- subversion/branches/master-passphrase/tools/buildbot/slaves/xp-vc60-ia32/svncheck.bat (original)
+++ subversion/branches/master-passphrase/tools/buildbot/slaves/xp-vc60-ia32/svncheck.bat Tue Oct 30 20:03:28 2012
@@ -1,51 +1,51 @@
-REM     Licensed to the Apache Software Foundation (ASF) under one
-REM     or more contributor license agreements.  See the NOTICE file
-REM     distributed with this work for additional information
-REM     regarding copyright ownership.  The ASF licenses this file
-REM     to you under the Apache License, Version 2.0 (the
-REM     "License"); you may not use this file except in compliance
-REM     with the License.  You may obtain a copy of the License at
-REM    
-REM       http://www.apache.org/licenses/LICENSE-2.0
-REM    
-REM     Unless required by applicable law or agreed to in writing,
-REM     software distributed under the License is distributed on an
-REM     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-REM     KIND, either express or implied.  See the License for the
-REM     specific language governing permissions and limitations
-REM     under the License.
-
-IF NOT EXIST ..\config.bat GOTO noconfig
-call ..\config.bat
-
-set FS_TYPE=%1
-set RA_TYPE=%2
-
-REM By default, return zero
-set ERR=0
-
-if "%RA_TYPE%"=="ra_local" goto ra_local
-if "%RA_TYPE%"=="ra_svn"   goto ra_svn
-if "%RA_TYPE%"=="ra_dav"   goto ra_dav
-
-echo Unknown ra method '%RA_TYPE%'
-EXIT 3
-
-:ra_local
-python win-tests.py %TEST_DIR% -f %FS_TYPE% -c -r 
-if ERRORLEVEL 1 set ERR=1
-EXIT %ERR%
-
-:ra_svn
-python win-tests.py %TEST_DIR% -f %FS_TYPE% -c -r -u svn://localhost
-if ERRORLEVEL 1 set ERR=1
-EXIT %ERR%
-
-:ra_dav
-python win-tests.py %TEST_DIR% -f %FS_TYPE% -c -r --httpd-dir="%HTTPD_BIN_DIR%" --httpd-port 1234
-if ERRORLEVEL 1 set ERR=1
-EXIT %ERR%
-
-:noconfig
-echo File config.bat not found. Please copy it from config.bat.tmpl and tweak for you.
-EXIT 2
+REM     Licensed to the Apache Software Foundation (ASF) under one
+REM     or more contributor license agreements.  See the NOTICE file
+REM     distributed with this work for additional information
+REM     regarding copyright ownership.  The ASF licenses this file
+REM     to you under the Apache License, Version 2.0 (the
+REM     "License"); you may not use this file except in compliance
+REM     with the License.  You may obtain a copy of the License at
+REM    
+REM       http://www.apache.org/licenses/LICENSE-2.0
+REM    
+REM     Unless required by applicable law or agreed to in writing,
+REM     software distributed under the License is distributed on an
+REM     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+REM     KIND, either express or implied.  See the License for the
+REM     specific language governing permissions and limitations
+REM     under the License.
+
+IF NOT EXIST ..\config.bat GOTO noconfig
+call ..\config.bat
+
+set FS_TYPE=%1
+set RA_TYPE=%2
+
+REM By default, return zero
+set ERR=0
+
+if "%RA_TYPE%"=="ra_local" goto ra_local
+if "%RA_TYPE%"=="ra_svn"   goto ra_svn
+if "%RA_TYPE%"=="ra_dav"   goto ra_dav
+
+echo Unknown ra method '%RA_TYPE%'
+EXIT 3
+
+:ra_local
+python win-tests.py %TEST_DIR% -f %FS_TYPE% -c -r 
+if ERRORLEVEL 1 set ERR=1
+EXIT %ERR%
+
+:ra_svn
+python win-tests.py %TEST_DIR% -f %FS_TYPE% -c -r -u svn://localhost
+if ERRORLEVEL 1 set ERR=1
+EXIT %ERR%
+
+:ra_dav
+python win-tests.py %TEST_DIR% -f %FS_TYPE% -c -r --httpd-dir="%HTTPD_BIN_DIR%" --httpd-port 1234
+if ERRORLEVEL 1 set ERR=1
+EXIT %ERR%
+
+:noconfig
+echo File config.bat not found. Please copy it from config.bat.tmpl and tweak for you.
+EXIT 2

Propchange: subversion/branches/master-passphrase/tools/buildbot/slaves/xp-vc60-ia32/svncheck.bat
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: subversion/branches/master-passphrase/tools/buildbot/slaves/xp-vc60-ia32/svnclean.bat
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/tools/buildbot/slaves/xp-vc60-ia32/svnclean.bat?rev=1403849&r1=1403848&r2=1403849&view=diff
==============================================================================
--- subversion/branches/master-passphrase/tools/buildbot/slaves/xp-vc60-ia32/svnclean.bat (original)
+++ subversion/branches/master-passphrase/tools/buildbot/slaves/xp-vc60-ia32/svnclean.bat Tue Oct 30 20:03:28 2012
@@ -1,28 +1,28 @@
-REM     Licensed to the Apache Software Foundation (ASF) under one
-REM     or more contributor license agreements.  See the NOTICE file
-REM     distributed with this work for additional information
-REM     regarding copyright ownership.  The ASF licenses this file
-REM     to you under the Apache License, Version 2.0 (the
-REM     "License"); you may not use this file except in compliance
-REM     with the License.  You may obtain a copy of the License at
-REM    
-REM       http://www.apache.org/licenses/LICENSE-2.0
-REM    
-REM     Unless required by applicable law or agreed to in writing,
-REM     software distributed under the License is distributed on an
-REM     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-REM     KIND, either express or implied.  See the License for the
-REM     specific language governing permissions and limitations
-REM     under the License.
-
-IF NOT EXIST ..\config.bat GOTO noconfig
-call ..\config.bat
-
-if NOT "%CLEAN_SVN%"=="" MSDEV.COM subversion_msvc.dsw /MAKE "__ALL_TESTS__ - Win32 Release" /CLEAN
-if ERRORLEVEL 1 EXIT 1
-
-EXIT 0
-
-:noconfig
-echo File config.bat not found. Please copy it from config.bat.tmpl and tweak for you.
-EXIT 2
+REM     Licensed to the Apache Software Foundation (ASF) under one
+REM     or more contributor license agreements.  See the NOTICE file
+REM     distributed with this work for additional information
+REM     regarding copyright ownership.  The ASF licenses this file
+REM     to you under the Apache License, Version 2.0 (the
+REM     "License"); you may not use this file except in compliance
+REM     with the License.  You may obtain a copy of the License at
+REM    
+REM       http://www.apache.org/licenses/LICENSE-2.0
+REM    
+REM     Unless required by applicable law or agreed to in writing,
+REM     software distributed under the License is distributed on an
+REM     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+REM     KIND, either express or implied.  See the License for the
+REM     specific language governing permissions and limitations
+REM     under the License.
+
+IF NOT EXIST ..\config.bat GOTO noconfig
+call ..\config.bat
+
+if NOT "%CLEAN_SVN%"=="" MSDEV.COM subversion_msvc.dsw /MAKE "__ALL_TESTS__ - Win32 Release" /CLEAN
+if ERRORLEVEL 1 EXIT 1
+
+EXIT 0
+
+:noconfig
+echo File config.bat not found. Please copy it from config.bat.tmpl and tweak for you.
+EXIT 2

Propchange: subversion/branches/master-passphrase/tools/buildbot/slaves/xp-vc60-ia32/svnclean.bat
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: subversion/branches/master-passphrase/tools/buildbot/slaves/xp-vc60-ia32/svnlog.bat
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/tools/buildbot/slaves/xp-vc60-ia32/svnlog.bat?rev=1403849&r1=1403848&r2=1403849&view=diff
==============================================================================
--- subversion/branches/master-passphrase/tools/buildbot/slaves/xp-vc60-ia32/svnlog.bat (original)
+++ subversion/branches/master-passphrase/tools/buildbot/slaves/xp-vc60-ia32/svnlog.bat Tue Oct 30 20:03:28 2012
@@ -1,25 +1,25 @@
-REM     Licensed to the Apache Software Foundation (ASF) under one
-REM     or more contributor license agreements.  See the NOTICE file
-REM     distributed with this work for additional information
-REM     regarding copyright ownership.  The ASF licenses this file
-REM     to you under the Apache License, Version 2.0 (the
-REM     "License"); you may not use this file except in compliance
-REM     with the License.  You may obtain a copy of the License at
-REM    
-REM       http://www.apache.org/licenses/LICENSE-2.0
-REM    
-REM     Unless required by applicable law or agreed to in writing,
-REM     software distributed under the License is distributed on an
-REM     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-REM     KIND, either express or implied.  See the License for the
-REM     specific language governing permissions and limitations
-REM     under the License.
-
-IF NOT EXIST ..\config.bat GOTO noconfig
-call ..\config.bat
-
-EXIT 0
-
-:noconfig
-echo File config.bat not found. Please copy it from config.bat.tmpl and tweak for you.
-EXIT 2
+REM     Licensed to the Apache Software Foundation (ASF) under one
+REM     or more contributor license agreements.  See the NOTICE file
+REM     distributed with this work for additional information
+REM     regarding copyright ownership.  The ASF licenses this file
+REM     to you under the Apache License, Version 2.0 (the
+REM     "License"); you may not use this file except in compliance
+REM     with the License.  You may obtain a copy of the License at
+REM    
+REM       http://www.apache.org/licenses/LICENSE-2.0
+REM    
+REM     Unless required by applicable law or agreed to in writing,
+REM     software distributed under the License is distributed on an
+REM     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+REM     KIND, either express or implied.  See the License for the
+REM     specific language governing permissions and limitations
+REM     under the License.
+
+IF NOT EXIST ..\config.bat GOTO noconfig
+call ..\config.bat
+
+EXIT 0
+
+:noconfig
+echo File config.bat not found. Please copy it from config.bat.tmpl and tweak for you.
+EXIT 2

Propchange: subversion/branches/master-passphrase/tools/buildbot/slaves/xp-vc60-ia32/svnlog.bat
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/master-passphrase/tools/client-side/svn-bench/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Tue Oct 30 20:03:28 2012
@@ -0,0 +1,3 @@
+svn-bench
+svn.1
+.libs

Modified: subversion/branches/master-passphrase/tools/dev/benchmarks/suite1/benchmark.py
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/tools/dev/benchmarks/suite1/benchmark.py?rev=1403849&r1=1403848&r2=1403849&view=diff
==============================================================================
--- subversion/branches/master-passphrase/tools/dev/benchmarks/suite1/benchmark.py (original)
+++ subversion/branches/master-passphrase/tools/dev/benchmarks/suite1/benchmark.py Tue Oct 30 20:03:28 2012
@@ -17,25 +17,48 @@
 # specific language governing permissions and limitations
 # under the License.
 
-"""Usage: benchmark.py run|list|compare|show|chart ...
+"""Usage: benchmark.py run|list|compare|show|chart <selection> ...
+
+SELECTING TIMINGS -- B@R,LxS
+ 
+In the subcommands below, a timings selection consists of a string with up to
+four elements:
+  <branch>@<revision>,<levels>x<spread> 
+abbreviated as:
+  B@R,LxS
+
+<branch> is a label of an svn branch, e.g. "1.7.x".
+<revision> is the last-changed-revision of above branch.
+<levels> is the number of directory levels created in the benchmark.
+<spread> is the number of child trees spreading off each dir level.
+
+<branch_name> and <revision> are simply used for labeling. Upon the actual
+test runs, you should enter labels matching the selected --svn-bin-dir.
+Later, you can select runs individually by using these labels.
+
+For <revision>, you can provide the keyword 'each', which has the same effect
+as entering each available revision in a separate timings selection.
+
+For all subcommands except 'run', you can omit some or all of the elements of
+a timings selection to combine all available timings sets. Try that out with
+the 'list' subcommand.
+
+Examples:
+  benchmark.py run 1.7.x@12345,5x5
+  benchmark.py show trunk@12345
+  benchmark.py compare 1.7.0,1x100 trunk@each,1x100
+
 
 RUN BENCHMARKS
 
-  benchmark.py run <branch>@<revision>,<levels>x<spread> [N] [options]
+  benchmark.py run B@R,LxS [N] [options]
 
 Test data is added to an sqlite database created automatically, by default
 'benchmark.db' in the current working directory. To specify a different path,
 use option -f <path_to_db>.
 
-<branch_name> is a label of the svn branch you're testing, e.g. "1.7.x".
-<revision> is the last-changed-revision of above branch.
-<levels> is the number of directory levels to create
-<spread> is the number of child trees spreading off each dir level
 If <N> is provided, the run is repeated N times.
 
-<branch_name> and <revision> are simply used for later reference. You
-should enter labels matching the selected --svn-bin-dir.
-
 <levels> and <spread> control the way the tested working copy is structured:
   <levels>: number of directory levels to create.
   <spread>: number of files and subdirectories created in each dir.
@@ -43,22 +66,21 @@ should enter labels matching the selecte
 
 LIST WHAT IS ON RECORD
 
-  benchmark.py list [ <branch>@<rev>,<levels>x<spread> ]
+  benchmark.py list [B@R,LxS]
 
 Find entries in the database for the given constraints. Any arguments can
 be omitted. (To select only a rev, start with a '@', like '@123'; to select
 only spread, start with an 'x', like "x100".)
 
-Omit all args to get a listing of all available distinct entries.
+Call without arguments to get a listing of all available constraints.
 
 
 COMPARE TIMINGS
 
-  benchmark.py compare B@R,LxS B@R,LxS
+  benchmark.py compare B@R,LxS B@R,LxS [B@R,LxS [...]]
 
-Compare two kinds of timings (in text mode). Each B@R,LxS selects
-timings from branch, revision, WC-levels and -spread by the same labels as
-previously given for a 'run' call. Any elements can be omitted. For example:
+Compare any number of timings sets to the first provided set (in text mode).
+For example:
   benchmark.py compare 1.7.0 trunk@1349903
     Compare the total timings of all combined '1.7.0' branch runs to
     all combined runs of 'trunk'-at-revision-1349903.
@@ -66,38 +88,38 @@ previously given for a 'run' call. Any e
     Same as above, but only compare the working copy types with 5 levels
     and a spread of 5.
 
+Use the -c option to limit comparison to specific command names.
+
 
 SHOW TIMINGS
 
-  benchmark.py show <branch>@<rev>,<levels>x<spread>
+  benchmark.py show B@R,LxS [B@R,LxS [...]]
 
 Print out a summary of the timings selected from the given constraints.
-Any arguments can be omitted (like for the 'list' command).
 
 
 GENERATE CHARTS
 
   benchmark.py chart compare B@R,LxS B@R,LxS [ B@R,LxS ... ]
 
-Produce a bar chart that compares any number of sets of timings. Timing sets
-are supplied by B@R,LxS arguments (i.e. <branch>@<rev>,<levels>x<spread> as
-provided for a 'run' call), where any number of elements may be omitted. The
-less constraints you supply, the more timings are included (try it out with
-the 'list' command). The first set is taken as a reference point for 100% and
-+0 seconds. Each following dataset produces a set of labeled bar charts.
-So, at least two constraint arguments must be provided.
+Produce a bar chart that compares any number of sets of timings.  Like with
+the plain 'compare' command, the first set is taken as a reference point for
+100% and +-0 seconds. Each following dataset produces a set of labeled bar
+charts, grouped by svn command names. At least two timings sets must be
+provided.
 
-Use the -c option to limit charts to specific command names.
+Use the -c option to limit comparison to specific command names.
 
 
 EXAMPLES
 
-# Run 3 benchmarks on svn 1.7.0. Timings are saved in benchmark.db.
+# Run 3 benchmarks on svn 1.7.0 with 5 dir levels and 5 files and subdirs for
+# each level (spread). Timings are saved in ./benchmark.db.
 # Provide label '1.7.0' and its Last-Changed-Rev for later reference.
-# (You may also set your $PATH instead of using --svn-bin-dir.)
 ./benchmark.py run --svn-bin-dir ~/svn-prefix/1.7.0/bin 1.7.0@1181106,5x5 3
 
 # Record 3 benchmark runs on trunk, again naming its Last-Changed-Rev.
+# (You may also set your $PATH instead of using --svn-bin-dir.)
 ./benchmark.py run --svn-bin-dir ~/svn-prefix/trunk/bin trunk@1352725,5x5 3
 
 # Work with the results of above two runs
@@ -129,12 +151,18 @@ import random
 import shutil
 import stat
 import string
+from copy import copy
 
 IGNORE_COMMANDS = ('--version', )
 TOTAL_RUN = 'TOTAL RUN'
 
 j = os.path.join
 
+def bail(msg=None):
+  if msg:
+    print msg
+  exit(1)
+
 def time_str():
   return time.strftime('%Y-%m-%d %H:%M:%S');
 
@@ -227,6 +255,7 @@ class RunKind:
     if self.levels: self.levels = int(self.levels)
     if self.spread: self.spread = int(self.spread)
 
+  def label(self):
     label_parts = []
     if self.branch:
       label_parts.append(self.branch)
@@ -240,12 +269,40 @@ class RunKind:
       if self.spread:
         label_parts.append(RUN_KIND_SEPARATORS[2])
         label_parts.append(str(self.spread))
-    self.label = ''.join(label_parts)
+    return ''.join(label_parts)
 
   def args(self):
     return (self.branch, self.revision, self.levels, self.spread)
 
 
+def parse_timings_selections(db, *args):
+  run_kinds = []
+
+  for arg in args:
+    run_kind = RunKind(arg)
+
+    if run_kind.revision == 'each':
+      run_kind.revision = None
+      query = TimingQuery(db, run_kind)
+      for revision in query.get_sorted_revisions():
+        revision_run_kind = copy(run_kind)
+        revision_run_kind.revision = revision
+        run_kinds.append(revision_run_kind)
+    else:
+      run_kinds.append(run_kind)
+
+  return run_kinds
+  
+def parse_one_timing_selection(db, *args):
+  run_kinds = parse_timings_selections(db, *args)
+  if len(run_kinds) != 1:
+    bail("I need exactly one timings identifier, not '%s'"
+         % (' '.join(*args)))
+  return run_kinds[0]
+
+
+
+
 PATHNAME_VALID_CHARS = "-_.,@%s%s" % (string.ascii_letters, string.digits)
 def filesystem_safe_string(s):
   return ''.join(c for c in s if c in PATHNAME_VALID_CHARS)
@@ -436,15 +493,19 @@ class TimingQuery:
               AND b.batch_id = r.batch_id
               AND r.aborted = 0
          """
-    self.append_constraint('k', 'branch', run_kind.branch)
-    self.append_constraint('k', 'revision', run_kind.revision)
-    self.append_constraint('k', 'wc_levels', run_kind.levels)
-    self.append_constraint('k', 'wc_spread', run_kind.spread)
-    self.label = run_kind.label
+    self.append_constraint('k.branch', run_kind.branch)
+    self.each_revision = False
+    if run_kind.revision == 'each':
+      self.each_revision = True
+    else:
+      self.append_constraint('k.revision', run_kind.revision)
+    self.append_constraint('k.wc_levels', run_kind.levels)
+    self.append_constraint('k.wc_spread', run_kind.spread)
+    self.label = run_kind.label()
 
-  def append_constraint(self, table, name, val):
+  def append_constraint(self, column_name, val):
     if val:
-      self.constraints.append('AND %s.%s = ?' % (table, name))
+      self.constraints.append('AND %s = ?' % column_name)
       self.values.append(val)
 
   def remove_last_constraint(self):
@@ -458,7 +519,6 @@ class TimingQuery:
     query.append('ORDER BY %s' % x)
     c = db.conn.cursor()
     try:
-      #print ' '.join(query)
       c.execute(' '.join(query), self.values)
       if n == 1:
         return [tpl[0] for tpl in c.fetchall()]
@@ -500,7 +560,7 @@ class TimingQuery:
                   max(t.timing),
                   avg(t.timing)""",
              self.FROM_WHERE ]
-    self.append_constraint('t', 'command', command)
+    self.append_constraint('t.command', command)
     try:
       query.extend(self.constraints)
       c = db.conn.cursor()
@@ -816,11 +876,12 @@ def perform_run(batch, run_kind,
 
     
 def cmdline_run(db, options, run_kind_str, N=1):
-  run_kind = RunKind(run_kind_str)
+  run_kind = parse_one_timing_selection(db, run_kind_str)
+    
   N = int(N)
 
   print 'Hi, going to run a Subversion benchmark series of %d runs...' % N
-  print 'Label is %s' % run_kind.label
+  print 'Label is %s' % run_kind.label()
 
   # can we run the svn binaries?
   svn_bin = j(options.svn_bin_dir, 'svn')
@@ -829,8 +890,7 @@ def cmdline_run(db, options, run_kind_st
   for b in (svn_bin, svnadmin_bin):
     so,se = run_cmd([b, '--version'])
     if not so:
-      print "Can't run", b
-      exit(1)
+      bail("Can't run %s" % b)
 
     print ', '.join([s.strip() for s in so.split('\n')[:2]])
 
@@ -844,54 +904,55 @@ def cmdline_run(db, options, run_kind_st
   batch.done()
 
 
-def cmdline_list(db, options, run_kind_str=None):
-  run_kind = RunKind(run_kind_str)
+def cmdline_list(db, options, *args):
+  run_kinds = parse_timings_selections(db, *args)
 
-  constraints = []
-  def add_if_not_none(name, val):
-    if val:
-      constraints.append('  %s = %s' % (name, val))
-  add_if_not_none('branch', run_kind.branch)
-  add_if_not_none('revision', run_kind.revision)
-  add_if_not_none('levels', run_kind.levels)
-  add_if_not_none('spread', run_kind.spread)
-  if constraints:
-    print 'For\n', '\n'.join(constraints)
-  print 'I found:'
+  for run_kind in run_kinds:
 
-  d = TimingQuery(db, run_kind)
-  
-  cmd_names = d.get_sorted_command_names()
-  if cmd_names:
-    print '\n%d command names:\n ' % len(cmd_names), '\n  '.join(cmd_names)
-
-  branches = d.get_sorted_branches()
-  if branches and (len(branches) > 1 or branches[0] != run_kind.branch):
-    print '\n%d branches:\n ' % len(branches), '\n  '.join(branches)
-
-  revisions = d.get_sorted_revisions()
-  if revisions and (len(revisions) > 1 or revisions[0] != run_kind.revision):
-    print '\n%d revisions:\n ' % len(revisions), '\n  '.join(revisions)
-
-  levels_spread = d.get_sorted_levels_spread()
-  if levels_spread and (
-       len(levels_spread) > 1
-       or levels_spread[0] != (run_kind.levels, run_kind.spread)):
-    print '\n%d kinds of levels x spread:\n ' % len(levels_spread), '\n  '.join(
-            [ ('%dx%d' % (l, s)) for l,s in levels_spread ])
+    constraints = []
+    def add_if_not_none(name, val):
+      if val:
+        constraints.append('  %s = %s' % (name, val))
+    add_if_not_none('branch', run_kind.branch)
+    add_if_not_none('revision', run_kind.revision)
+    add_if_not_none('levels', run_kind.levels)
+    add_if_not_none('spread', run_kind.spread)
+    if constraints:
+      print 'For\n', '\n'.join(constraints)
+    print 'I found:'
+
+    d = TimingQuery(db, run_kind)
+    
+    cmd_names = d.get_sorted_command_names()
+    if cmd_names:
+      print '\n%d command names:\n ' % len(cmd_names), '\n  '.join(cmd_names)
+
+    branches = d.get_sorted_branches()
+    if branches and (len(branches) > 1 or branches[0] != run_kind.branch):
+      print '\n%d branches:\n ' % len(branches), '\n  '.join(branches)
+
+    revisions = d.get_sorted_revisions()
+    if revisions and (len(revisions) > 1 or revisions[0] != run_kind.revision):
+      print '\n%d revisions:\n ' % len(revisions), '\n  '.join(revisions)
+
+    levels_spread = d.get_sorted_levels_spread()
+    if levels_spread and (
+         len(levels_spread) > 1
+         or levels_spread[0] != (run_kind.levels, run_kind.spread)):
+      print '\n%d kinds of levels x spread:\n ' % len(levels_spread), '\n  '.join(
+              [ ('%dx%d' % (l, s)) for l,s in levels_spread ])
 
-  print "\n%d runs in %d batches.\n" % (d.count_runs_batches())
+    print "\n%d runs in %d batches.\n" % (d.count_runs_batches())
 
 
 def cmdline_show(db, options, *run_kind_strings):
-  for run_kind_str in run_kind_strings:
-    run_kind = RunKind(run_kind_str)
-
+  run_kinds = parse_timings_selections(db, run_kind_strings)
+  for run_kind in run_kinds:
     q = TimingQuery(db, run_kind)
     timings = q.get_timings()
 
     s = []
-    s.append('Timings for %s' % run_kind.label)
+    s.append('Timings for %s' % run_kind.label())
     s.append('   N    min     max     avg   operation  (unit is seconds)')
 
     for command_name in q.get_sorted_command_names():
@@ -909,99 +970,111 @@ def cmdline_show(db, options, *run_kind_
     print '\n'.join(s)
 
 
-def cmdline_compare(db, options, left_str, right_str):
-  left_kind = RunKind(left_str)
-  right_kind = RunKind(right_str)
+def cmdline_compare(db, options, *args):
+  run_kinds = parse_timings_selections(db, *args)
+  if len(run_kinds) < 2:
+    bail("Need at least two sets of timings to compare.")
 
+
+  left_kind = run_kinds[0]
   leftq = TimingQuery(db, left_kind)
   left = leftq.get_timings()
   if not left:
-    print "No timings for", left_kind.label
-    exit(1)
+    bail("No timings for %s" % left_kind.label())
 
-  rightq = TimingQuery(db, right_kind)
-  right = rightq.get_timings()
-  if not right:
-    print "No timings for", right_kind.label
-    exit(1)
-
-  label = 'Compare %s to %s' % (left_kind.label, right_kind.label)
-
-  s = [label]
-
-  verbose = options.verbose
-  if not verbose:
-    s.append('       N        avg         operation')
-  else:
-    s.append('       N        min              max              avg         operation')
+  for run_kind_idx in range(1, len(run_kinds)):
+    right_kind = run_kinds[run_kind_idx]
 
-  command_names = [name for name in leftq.get_sorted_command_names()
-                   if name in right]
-  if options.command_names:
-    command_names = [name for name in command_names
-                     if name in options.command_names]
+    rightq = TimingQuery(db, right_kind)
+    right = rightq.get_timings()
+    if not right:
+      print "No timings for %s" % right_kind.label()
+      continue
+
+    label = 'Compare %s to %s' % (right_kind.label(), left_kind.label())
 
-  for command_name in command_names:
-    left_N, left_min, left_max, left_avg = left[command_name]
-    right_N, right_min, right_max, right_avg = right[command_name]
-
-    N_str = '%s/%s' % (n_label(left_N), n_label(right_N))
-    avg_str = '%7.2f|%+7.3f' % (do_div(left_avg, right_avg),
-                                do_diff(left_avg, right_avg))
+    s = [label]
 
+    verbose = options.verbose
     if not verbose:
-      s.append('%9s %-16s  %s' % (N_str, avg_str, command_name))
+      s.append('       N        avg         operation')
     else:
-      min_str = '%7.2f|%+7.3f' % (do_div(left_min, right_min),
-                                  do_diff(left_min, right_min))
-      max_str = '%7.2f|%+7.3f' % (do_div(left_max, right_max),
-                                  do_diff(left_max, right_max))
-
-      s.append('%9s %-16s %-16s %-16s  %s' % (N_str, min_str, max_str, avg_str,
-                                          command_name))
-
-  s.extend([
-    '(legend: "1.23|+0.45" means: slower by factor 1.23 and by 0.45 seconds;',
-    ' factor < 1 and seconds < 0 means \'%s\' is faster.'
-    % right_kind.label,
-    ' "2/3" means: \'%s\' has 2 timings on record, the other has 3.)'
-    % left_kind.label
-    ])
+      s.append('       N        min              max              avg         operation')
+
+    command_names = [name for name in leftq.get_sorted_command_names()
+                     if name in right]
+    if options.command_names:
+      command_names = [name for name in command_names
+                       if name in options.command_names]
 
+    for command_name in command_names:
+      left_N, left_min, left_max, left_avg = left[command_name]
+      right_N, right_min, right_max, right_avg = right[command_name]
+
+      N_str = '%s/%s' % (n_label(left_N), n_label(right_N))
+      avg_str = '%7.2f|%+7.3f' % (do_div(left_avg, right_avg),
+                                  do_diff(left_avg, right_avg))
 
-  print '\n'.join(s)
+      if not verbose:
+        s.append('%9s %-16s  %s' % (N_str, avg_str, command_name))
+      else:
+        min_str = '%7.2f|%+7.3f' % (do_div(left_min, right_min),
+                                    do_diff(left_min, right_min))
+        max_str = '%7.2f|%+7.3f' % (do_div(left_max, right_max),
+                                    do_diff(left_max, right_max))
+
+        s.append('%9s %-16s %-16s %-16s  %s' % (N_str, min_str, max_str, avg_str,
+                                            command_name))
+
+    s.extend([
+      '(legend: "1.23|+0.45" means: slower by factor 1.23 and by 0.45 seconds;',
+      ' factor < 1 and seconds < 0 means \'%s\' is faster.'
+      % right_kind.label(),
+      ' "2/3" means: \'%s\' has 2 timings on record, the other has 3.)'
+      % left_kind.label()
+      ])
+
+
+    print '\n'.join(s)
 
 
 # ------------------------------------------------------- charts
 
 def cmdline_chart_compare(db, options, *args):
+  import matplotlib
+  matplotlib.use('Agg')
   import numpy as np
-  import matplotlib.pyplot as plt
+  import matplotlib.pylab as plt
 
   labels = []
   timing_sets = []
   command_names = None
 
-  for arg in args:
-    run_kind = RunKind(arg)
+  run_kinds = parse_timings_selections(db, *args)
+
+  all_command_names = set()
+
+  # iterate the timings selections and accumulate data
+  for run_kind in run_kinds:
     query = TimingQuery(db, run_kind)
     timings = query.get_timings()
     if not timings:
-      print "No timings for", run_kind.label
-      exit(1)
-    labels.append(run_kind.label)
+      print "No timings for %s" % run_kind.label()
+      continue
+    labels.append(run_kind.label())
     timing_sets.append(timings)
 
-    if command_names:
-      for i in range(len(command_names)):
-        if not command_names[i] in timings:
-          del command_names[i]
-    else:
-      command_names = query.get_sorted_command_names()
+    all_command_names.update( query.get_sorted_command_names() )
+
+  if len(timing_sets) < 2:
+    bail("Not enough timings")
 
   if options.command_names:
-    command_names = [name for name in command_names
+    command_names = [name for name in all_command_names
                      if name in options.command_names]
+  else:
+    command_names = list(all_command_names)
+  command_names = sorted(command_names)
 
   chart_path = options.chart_path
   if not chart_path:
@@ -1012,95 +1085,122 @@ def cmdline_chart_compare(db, options, *
   print '\nwriting chart file:', chart_path
 
   N = len(command_names)
-  M = len(timing_sets) - 1
-
-  ind = np.arange(N)  # the x locations for the groups
-  width = 1. / (1.2 + M)     # the width of the bars
-  dist = 0.15
+  M = len(timing_sets) - 1 
+  if M < 2:
+    M = 2
 
-  fig = plt.figure(figsize=(0.33*N*M,12))
-  plot1 = fig.add_subplot(211)
-  plot2 = fig.add_subplot(212)
+  group_positions = np.arange(N)  # the y locations for the groups
+  dist = 0.1
+  height = (1. - dist) / (1. + M)     # the height of the bars
 
-  # invisible lines that make sure the scale doesn't get minuscule
-  plot1.axhline(y=101, color='white', linewidth=0.01)
-  plot1.axhline(y=95.0, color='white', linewidth=0.01)
-  plot2.axhline(y=0.1, color='white', linewidth=0.01)
-  plot2.axhline(y=-0.5, color='white', linewidth=0.01)
+  fig = plt.figure(figsize=(12, 5 + 0.21*N*M))
+  plot1 = fig.add_subplot(121)
+  plot2 = fig.add_subplot(122)
 
-  reference = timing_sets[0]
+  left = timing_sets[0]
 
-  ofs = 0
+  ofs = (dist + height) / 2.
 
+  # Iterate timing sets. Each loop produces one bar for each command name
+  # group.
   for label_i in range(1, len(labels)):
-    timings = timing_sets[label_i]
+    right = timing_sets[label_i]
     divs = []
     diffs = []
     divs_color = []
     deviations = []
     for command_name in command_names:
-      ref_N, ref_min, ref_max, ref_avg = reference[command_name]
-      this_N, this_min, this_max, this_avg = timings[command_name]
+      left_N, left_min, left_max, left_avg = left[command_name]
+      right_N, right_min, right_max, right_avg = right[command_name]
 
-      val = 100. * (do_div(ref_avg, this_avg) - 1.0)
+      val = 100. * (do_div(left_avg, right_avg) - 1.0)
       if val < 0:
         col = '#55dd55'
       else:
         col = '#dd5555'
       divs.append(val)
       divs_color.append(col)
-      diffs.append( do_diff(ref_avg, this_avg) )
-      deviations.append(this_max / this_min)
+      diffs.append( do_diff(left_avg, right_avg) )
+      deviations.append(right_max / right_min)
 
-    rects = plot1.bar(ind + ofs, divs, width * (1.0 - dist),
-                      color=divs_color, bottom=100.0, edgecolor='none')
+    rects = plot1.barh((group_positions + ofs), divs, height * (1.0 - dist),
+                      color=divs_color, left=0.0, edgecolor='white')
 
     for i in range(len(rects)):
-      x = rects[i].get_x() + width / 2.2
+      y = rects[i].get_y() + height/10.
       div = divs[i]
       label = labels[label_i]
 
-      plot1.text(x, 100.,
-                 ' %+5.1f%% %s' % (div,label),
-                 ha='center', va='top', size='small',
-                 rotation=-90, family='monospace')
+      plot1.text(-1., y,
+                 '%s %+5.1f%%' % (label, div),
+                 ha='right', va='top', size='small',
+                 rotation=0, family='monospace')
 
-    rects = plot2.bar(ind + ofs, diffs, width * 0.9,
-                   color=divs_color, bottom=0.0, edgecolor='none')
+    rects = plot2.barh((group_positions + ofs), diffs, height * 0.9,
+                   color=divs_color, edgecolor='white')
 
     for i in range(len(rects)):
-      x = rects[i].get_x() + width / 2.2
+      y = rects[i].get_y() + height/10.
       diff = diffs[i]
       label = labels[label_i]
 
-      plot2.text(x, 0.,
-                 ' %+5.2fs %s' % (diff,label),
-                 ha='center', va='top', size='small',
-                 rotation=-90, family='monospace')
-
-    ofs += width
-
-  plot1.set_title('Speed change compared to %s [%%]' % labels[0])
-  plot1.set_xticks(ind + (width / 2.))
-  plot1.set_xticklabels(command_names, rotation=-55,
-                        horizontalalignment='left',
-                        size='x-small', weight='bold')
-  plot1.axhline(y=100.0, color='#555555', linewidth=0.2)
-  plot2.set_title('[seconds]')
-  plot2.set_xticks(ind + (width / 2.))
-  plot2.set_xticklabels(command_names, rotation=-55,
-                        horizontalalignment='left',
-                        size='medium', weight='bold')
-  plot2.axhline(y=0.0, color='#555555', linewidth=0.2)
-
-  margin = 1.5/(N*M)
-  fig.subplots_adjust(bottom=0.1, top=0.97,
-                      left=margin,
-                      right=1.0-(margin / 2.))
-
-  #plot1.legend( (rects1[0], rects2[0]), (left_label, right_label) )
+      plot2.text(-.5, y,
+                 '%s %+6.2fs' % (label, diff),
+                 ha='right', va='top', size='small',
+                 rotation=0, family='monospace')
+
+    ofs += height
+
+  plot1.set_title('Avg. runtime change from %s in %%' % labels[0],
+                  size='medium')
+  #plot1.axvline(x=0.0, color='#555555', linewidth=0.2)
+  plot1.set_xticks((0,))
+  plot1.set_xticklabels(('+-0%',), rotation=0)
+
+  for p in (plot1, plot2):
+    p.set_ylim((len(command_names), 0))
+    xlim = list(p.get_xlim())
+    if xlim[1] < 2.:
+      xlim[1] = 2.
+    # make sure the zero line is far enough left so that the annotations
+    # fit inside the chart. About half the width should suffice.
+    if xlim[0] > -xlim[1]:
+      xlim[0] = -xlim[1]
+    p.set_xlim(*xlim)
+    p.set_yticks(group_positions + (height / 2.))
+    p.set_yticklabels(())
+    p.grid()
+
+
+  plot2.set_title('Avg. runtime change from %s in seconds' % labels[0],
+                  size='medium')
+  #plot2.axvline(x=0.0, color='#555555', linewidth=0.2)
+  plot2.set_xticks((0,))
+  plot2.set_xticklabels(('+-0s',), rotation=0)
+
+  margin = 1./(2 + N*M)
+  print margin
+  fig.subplots_adjust(left=0.005, right=0.995, wspace=0.3, bottom=margin,
+                      top=1.0-margin)
+
+  ystep = (1.0 - 2.*margin) / len(command_names)
+
+  for idx in range(len(command_names)):
+    ylabel = '%s\nvs. %.1fs' % (
+                     command_names[idx],
+                     left[command_names[idx]][3])
+
+    ypos=1.0 - margin - 0.2*ystep - ystep * idx
+    plt.figtext(0.5, ypos,
+                command_names[idx],
+                ha='center', va='top',
+                size='medium', weight='bold')
+    plt.figtext(0.5, ypos - ystep/(M+1),
+                '%s\n= %.2fs' % (
+                  labels[0], left[command_names[idx]][3]),
+                ha='center', va='top',
+                size='small')
 
-  #plt.show()
   plt.savefig(chart_path)
 
 # ------------------------------------------------------------ main
@@ -1154,7 +1254,7 @@ if __name__ == '__main__':
     if msg:
       print
       print msg
-    exit(1)
+    bail()
 
   # there should be at least one arg left: the sub-command
   if not args:

Modified: subversion/branches/master-passphrase/tools/dev/benchmarks/suite1/run.bat
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/tools/dev/benchmarks/suite1/run.bat?rev=1403849&r1=1403848&r2=1403849&view=diff
==============================================================================
--- subversion/branches/master-passphrase/tools/dev/benchmarks/suite1/run.bat (original)
+++ subversion/branches/master-passphrase/tools/dev/benchmarks/suite1/run.bat Tue Oct 30 20:03:28 2012
@@ -1,105 +1,105 @@
-:: Licensed to the Apache Software Foundation (ASF) under one
-:: or more contributor license agreements.  See the NOTICE file
-:: distributed with this work for additional information
-:: regarding copyright ownership.  The ASF licenses this file
-:: to you under the Apache License, Version 2.0 (the
-:: "License"); you may not use this file except in compliance
-:: with the License.  You may obtain a copy of the License at
-::
-::   http://www.apache.org/licenses/LICENSE-2.0
-::
-:: Unless required by applicable law or agreed to in writing,
-:: software distributed under the License is distributed on an
-:: "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-:: KIND, either express or implied.  See the License for the
-:: specific language governing permissions and limitations
-:: under the License.
-
-@ECHO OFF
-
-ECHO.THIS SCRIPT IS CURRENTLY OUTDATED.
-GOTO :EOF
-
-SETLOCAL EnableDelayedExpansion
-
-:: Where are the svn binaries you want to benchmark?
-SET SVN_1_6=C:\path\to\1.6-svn\bin\svn
-SET SVN_trunk=C:\path\to\trunk-svn\bin\svn
-
-SET benchmark=%CD%\benchmark.py
-
-SET my_datetime=%date%-%time%
-SET my_datetime=%my_datetime: =_%
-SET my_datetime=%my_datetime:/=_%
-SET my_datetime=%my_datetime::=%
-SET my_datetime=%my_datetime:.=%
-SET my_datetime=%my_datetime:,=%
-SET parent=%my_datetime%
-SET inital_workdir=%CD%
-mkdir "%parent%"
-cd "%parent%"
-ECHO %CD%
-
-GOTO main
-
-:batch
-  SET levels=%1
-  SET spread=%2
-  SET N=%3
-  SET pre=%levels%x%spread%_
-  ECHO.
-  ECHO.---------------------------------------------------------------------
-  ECHO.
-  ECHO.Results for dir levels: %levels%  spread: %spread%
-  CALL "%benchmark%" --svn="%SVN_1_6%" run %pre%1.6 %levels% %spread% %N% > NUL
-  CALL "%benchmark%" --svn="%SVN_trunk%" run %pre%trunk %levels% %spread% %N% > NUL
-  CALL "%benchmark%" compare %pre%1.6 %pre%trunk
-  GOTO :EOF
-
-:main
-SET N=6
-SET al=5
-SET as=5
-SET bl=25
-SET bs=1
-SET cl=1
-SET cs=100
-
-::::DEBUG
-::SET N=1
-::SET al=1
-::SET as=1
-::SET bl=2
-::SET bs=1
-::SET cl=1
-::SET cs=2
-::::DEBUG
-
-SET started=%date%-%time%
-ECHO.Started at %started%
-ECHO.
-
-CALL :batch %al% %as% %N%
-CALL :batch %bl% %bs% %N%
-CALL :batch %cl% %cs% %N%
-
-ECHO.
-ECHO.=========================================================================
-ECHO.
-FOR %%F IN (*x*_1.6) DO SET all_1.6=!all_1.6! %%F
-CALL "%benchmark%" combine total_1.6 %all_1.6% > NUL
-FOR %%F IN (*x*_trunk) DO SET all_trunk=!all_trunk! %%F
-CALL "%benchmark%" combine total_trunk %all_trunk% > NUL
-
-ECHO.comparing averaged totals..."
-CALL "%benchmark%" compare total_1.6 total_trunk
-
-ECHO.
-ECHO.Had started at %started%,
-ECHO.       done at %date%-%time%
-ECHO %CD%
-
-cd "%inital_workdir%"
-IF EXIST %parent%\total_trunk rmdir /S /Q "%parent%"
-
-ENDLOCAL
+:: Licensed to the Apache Software Foundation (ASF) under one
+:: or more contributor license agreements.  See the NOTICE file
+:: distributed with this work for additional information
+:: regarding copyright ownership.  The ASF licenses this file
+:: to you under the Apache License, Version 2.0 (the
+:: "License"); you may not use this file except in compliance
+:: with the License.  You may obtain a copy of the License at
+::
+::   http://www.apache.org/licenses/LICENSE-2.0
+::
+:: Unless required by applicable law or agreed to in writing,
+:: software distributed under the License is distributed on an
+:: "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+:: KIND, either express or implied.  See the License for the
+:: specific language governing permissions and limitations
+:: under the License.
+
+@ECHO OFF
+
+ECHO.THIS SCRIPT IS CURRENTLY OUTDATED.
+GOTO :EOF
+
+SETLOCAL EnableDelayedExpansion
+
+:: Where are the svn binaries you want to benchmark?
+SET SVN_1_6=C:\path\to\1.6-svn\bin\svn
+SET SVN_trunk=C:\path\to\trunk-svn\bin\svn
+
+SET benchmark=%CD%\benchmark.py
+
+SET my_datetime=%date%-%time%
+SET my_datetime=%my_datetime: =_%
+SET my_datetime=%my_datetime:/=_%
+SET my_datetime=%my_datetime::=%
+SET my_datetime=%my_datetime:.=%
+SET my_datetime=%my_datetime:,=%
+SET parent=%my_datetime%
+SET inital_workdir=%CD%
+mkdir "%parent%"
+cd "%parent%"
+ECHO %CD%
+
+GOTO main
+
+:batch
+  SET levels=%1
+  SET spread=%2
+  SET N=%3
+  SET pre=%levels%x%spread%_
+  ECHO.
+  ECHO.---------------------------------------------------------------------
+  ECHO.
+  ECHO.Results for dir levels: %levels%  spread: %spread%
+  CALL "%benchmark%" --svn="%SVN_1_6%" run %pre%1.6 %levels% %spread% %N% > NUL
+  CALL "%benchmark%" --svn="%SVN_trunk%" run %pre%trunk %levels% %spread% %N% > NUL
+  CALL "%benchmark%" compare %pre%1.6 %pre%trunk
+  GOTO :EOF
+
+:main
+SET N=6
+SET al=5
+SET as=5
+SET bl=25
+SET bs=1
+SET cl=1
+SET cs=100
+
+::::DEBUG
+::SET N=1
+::SET al=1
+::SET as=1
+::SET bl=2
+::SET bs=1
+::SET cl=1
+::SET cs=2
+::::DEBUG
+
+SET started=%date%-%time%
+ECHO.Started at %started%
+ECHO.
+
+CALL :batch %al% %as% %N%
+CALL :batch %bl% %bs% %N%
+CALL :batch %cl% %cs% %N%
+
+ECHO.
+ECHO.=========================================================================
+ECHO.
+FOR %%F IN (*x*_1.6) DO SET all_1.6=!all_1.6! %%F
+CALL "%benchmark%" combine total_1.6 %all_1.6% > NUL
+FOR %%F IN (*x*_trunk) DO SET all_trunk=!all_trunk! %%F
+CALL "%benchmark%" combine total_trunk %all_trunk% > NUL
+
+ECHO.comparing averaged totals..."
+CALL "%benchmark%" compare total_1.6 total_trunk
+
+ECHO.
+ECHO.Had started at %started%,
+ECHO.       done at %date%-%time%
+ECHO %CD%
+
+cd "%inital_workdir%"
+IF EXIST %parent%\total_trunk rmdir /S /Q "%parent%"
+
+ENDLOCAL

Propchange: subversion/branches/master-passphrase/tools/dev/benchmarks/suite1/run.bat
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: subversion/branches/master-passphrase/tools/dev/svnraisetreeconflict/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/tools/dev/svnraisetreeconflict/main.c?rev=1403849&r1=1403848&r2=1403849&view=diff
==============================================================================
--- subversion/branches/master-passphrase/tools/dev/svnraisetreeconflict/main.c (original)
+++ subversion/branches/master-passphrase/tools/dev/svnraisetreeconflict/main.c Tue Oct 30 20:03:28 2012
@@ -218,10 +218,10 @@ raise_tree_conflict(int argc, const char
 
   /* Allocate and fill in the description data structures */
   SVN_ERR(svn_dirent_get_absolute(&wc_abspath, wc_path, pool));
-  left = svn_wc_conflict_version_create(repos_url1, path_in_repos1, peg_rev1,
-                                        kind1, pool);
-  right = svn_wc_conflict_version_create(repos_url2, path_in_repos2, peg_rev2,
-                                         kind2, pool);
+  left = svn_wc_conflict_version_create2(repos_url1, NULL, path_in_repos1,
+                                         peg_rev1, kind1, pool);
+  right = svn_wc_conflict_version_create2(repos_url2, NULL, path_in_repos2,
+                                          peg_rev2, kind2, pool);
   c = svn_wc_conflict_description_create_tree2(wc_abspath, kind,
                                               operation, left, right, pool);
   c->action = (svn_wc_conflict_action_t)action;

Modified: subversion/branches/master-passphrase/tools/dist/backport.pl
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/tools/dist/backport.pl?rev=1403849&r1=1403848&r2=1403849&view=diff
==============================================================================
--- subversion/branches/master-passphrase/tools/dist/backport.pl (original)
+++ subversion/branches/master-passphrase/tools/dist/backport.pl Tue Oct 30 20:03:28 2012
@@ -126,9 +126,9 @@ EOF
 reinteg_rev=\`$SVN info $STATUS | sed -ne 's/Last Changed Rev: //p'\`
 if $WET_RUN; then
   # Sleep to avoid out-of-order commit notifications
-  if [ -n "$YES" ]; then sleep 15; fi
+  if [ -n "\$YES" ]; then sleep 15; fi
   $SVNq rm $BRANCHES/$entry{branch} -m "Remove the '$entry{branch}' branch, reintegrated in r\$reinteg_rev."
-  if [ -n "$YES" ]; then sleep 1; fi
+  if [ -n "\$YES" ]; then sleep 1; fi
 else
   echo "Removing reintegrated '$entry{branch}' branch"
 fi
@@ -229,6 +229,10 @@ sub main {
   usage, exit 0 if @ARGV;
   usage, exit 1 unless -r $STATUS;
 
+  # Because we use the ':normal' command in Vim...
+  die "A vim with the +ex_extra feature is required"
+      if `${VIM} --version` !~ /[+]ex_extra/;
+
   @ARGV = $STATUS;
 
   # Skip most of the file

Propchange: subversion/branches/master-passphrase/tools/dist/make-deps-tarball.sh
------------------------------------------------------------------------------
  Merged /subversion/branches/auto-props-sdc/tools/dist/make-deps-tarball.sh:r1384106-1401643
  Merged /subversion/branches/10Gb/tools/dist/make-deps-tarball.sh:r1388394,1388636,1388639,1388644,1388654,1388720,1388789,1388795,1388801,1388805,1388810,1388816,1389044,1389276,1389289,1389662,1389867,1390017,1390216,1390407
  Merged /subversion/branches/inheritable-props/tools/dist/make-deps-tarball.sh:r1305667-1395089
  Merged /subversion/trunk/tools/dist/make-deps-tarball.sh:r1390051-1403823

Modified: subversion/branches/master-passphrase/tools/dist/nightly.sh
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/tools/dist/nightly.sh?rev=1403849&r1=1403848&r2=1403849&view=diff
==============================================================================
--- subversion/branches/master-passphrase/tools/dist/nightly.sh (original)
+++ subversion/branches/master-passphrase/tools/dist/nightly.sh Tue Oct 30 20:03:28 2012
@@ -55,10 +55,10 @@ head=`$svn info $repo/trunk | grep '^Rev
 # Get the latest versions of the rolling scripts
 for i in release.py dist.sh
 do 
-  $svn export -r $head $repo/trunk/tools/dist/$i@$head $dir/$i
+  $svn export --force -r $head $repo/trunk/tools/dist/$i@$head $dir/$i
 done
 # We also need ezt
-$svn export -r $head $repo/trunk/build/generator/ezt.py@$head $dir/ezt.py
+$svn export --force -r $head $repo/trunk/build/generator/ezt.py@$head $dir/ezt.py
 
 # Create the environment
 cd roll

Modified: subversion/branches/master-passphrase/tools/dist/release.py
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/tools/dist/release.py?rev=1403849&r1=1403848&r2=1403849&view=diff
==============================================================================
--- subversion/branches/master-passphrase/tools/dist/release.py (original)
+++ subversion/branches/master-passphrase/tools/dist/release.py Tue Oct 30 20:03:28 2012
@@ -679,7 +679,7 @@ def write_downloads(args):
 #----------------------------------------------------------------------
 # Validate the signatures for a release
 
-key_start = '-----BEGIN PGP SIGNATURE-----\n'
+key_start = '-----BEGIN PGP SIGNATURE-----'
 fp_pattern = re.compile(r'^pub\s+(\w+\/\w+)[^\n]*\n\s+Key\sfingerprint\s=((\s+[0-9A-F]{4}){10})\nuid\s+([^<\(]+)\s')
 
 def check_sigs(args):

Modified: subversion/branches/master-passphrase/tools/server-side/fsfs-reorg.c
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/tools/server-side/fsfs-reorg.c?rev=1403849&r1=1403848&r2=1403849&view=diff
==============================================================================
--- subversion/branches/master-passphrase/tools/server-side/fsfs-reorg.c (original)
+++ subversion/branches/master-passphrase/tools/server-side/fsfs-reorg.c Tue Oct 30 20:03:28 2012
@@ -39,6 +39,7 @@
 
 #include "private/svn_string_private.h"
 #include "private/svn_subr_private.h"
+#include "private/svn_dep_compat.h"
 
 #ifndef _
 #define _(x) x
@@ -61,23 +62,23 @@ enum fragment_kind_t
 
 typedef struct fragment_t
 {
-  apr_int64_t position;
+  apr_size_t position;
   void *data;
   enum fragment_kind_t kind;
 } fragment_t;
 
 typedef struct revision_location_t
 {
-  apr_int64_t offset;
-  apr_int64_t changes;
-  apr_int64_t changes_len;
-  apr_int64_t end;  
+  apr_size_t offset;
+  apr_size_t changes;
+  apr_size_t changes_len;
+  apr_size_t end;  
 } revision_location_t;
 
 typedef struct location_t
 {
-  apr_int64_t offset;
-  apr_int64_t size;
+  apr_size_t offset;
+  apr_size_t size;
 } location_t;
 
 typedef struct direntry_t
@@ -98,7 +99,7 @@ typedef struct representation_t
 {
   location_t original;
   location_t target;
-  apr_int64_t header_size;
+  apr_size_t header_size;
   struct representation_t *delta_base;
   revision_info_t *revision;
   directory_t *dir;
@@ -153,7 +154,7 @@ typedef struct content_cache_t
 typedef struct dir_cache_entry_t
 {
   svn_revnum_t revision;
-  apr_int64_t offset;
+  apr_size_t offset;
   
   apr_hash_t *hash;
 } dir_cache_entry_t;
@@ -171,7 +172,7 @@ typedef struct dir_cache_t
 typedef struct window_cache_entry_t
 {
   svn_revnum_t revision;
-  apr_int64_t offset;
+  apr_size_t offset;
 
   svn_stringbuf_t *window;
 } window_cache_entry_t;
@@ -342,10 +343,11 @@ get_content(svn_string_t **data,
   temp->len = revision_info->original.end - revision_info->original.offset;
   SVN_ERR(open_rev_or_pack_file(&file, fs, revision, scratch_pool));
 
-  temp_offset = (apr_off_t)revision_info->original.offset;
+  temp_offset = revision_info->original.offset;
   SVN_ERR(svn_io_file_seek(file, APR_SET, &temp_offset,
                            scratch_pool));
-  revision_info->original.offset = temp_offset;
+  SVN_ERR_ASSERT(temp_offset < APR_SIZE_MAX);
+  revision_info->original.offset = (apr_size_t)temp_offset;
   SVN_ERR(svn_io_file_read(file, temp->data, &temp->len, scratch_pool));
 
   set_cached_content(fs->cache, revision,
@@ -373,7 +375,7 @@ create_dir_cache(apr_pool_t *pool,
 static apr_size_t
 get_dir_cache_index(fs_fs_t *fs,
                     svn_revnum_t revision,
-                    apr_int64_t offset)
+                    apr_size_t offset)
 {
   return (revision + offset * 0xd1f3da69) % fs->dir_cache->entry_count;
 }
@@ -389,7 +391,7 @@ get_cached_dir(fs_fs_t *fs,
                representation_t *representation)
 {
   svn_revnum_t revision = representation->revision->revision;
-  apr_int64_t offset = representation->original.offset;
+  apr_size_t offset = representation->original.offset;
 
   apr_size_t i = get_dir_cache_index(fs, revision, offset);
   dir_cache_entry_t *entry = &fs->dir_cache->entries[i];
@@ -405,7 +407,7 @@ set_cached_dir(fs_fs_t *fs,
                apr_hash_t *hash)
 {
   svn_revnum_t revision = representation->revision->revision;
-  apr_int64_t offset = representation->original.offset;
+  apr_size_t offset = representation->original.offset;
 
   apr_size_t i = get_dir_cache_index(fs, revision, offset);
   dir_cache_entry_t *entry = &fs->dir_cache->entries[i];
@@ -450,7 +452,7 @@ create_window_cache(apr_pool_t *pool,
 static apr_size_t
 get_window_cache_index(fs_fs_t *fs,
                        svn_revnum_t revision,
-                       apr_int64_t offset)
+                       apr_size_t offset)
 {
   return (revision + offset * 0xd1f3da69) % fs->window_cache->entry_count;
 }
@@ -461,7 +463,7 @@ get_cached_window(fs_fs_t *fs,
                   apr_pool_t *pool)
 {
   svn_revnum_t revision = representation->revision->revision;
-  apr_int64_t offset = representation->original.offset;
+  apr_size_t offset = representation->original.offset;
 
   apr_size_t i = get_window_cache_index(fs, revision, offset);
   window_cache_entry_t *entry = &fs->window_cache->entries[i];
@@ -477,7 +479,7 @@ set_cached_window(fs_fs_t *fs,
                   svn_stringbuf_t *window)
 {
   svn_revnum_t revision = representation->revision->revision;
-  apr_int64_t offset = representation->original.offset;
+  apr_size_t offset = representation->original.offset;
 
   apr_size_t i = get_window_cache_index(fs, revision, offset);
   window_cache_entry_t *entry = &fs->window_cache->entries[i];
@@ -516,12 +518,12 @@ read_manifest(apr_array_header_t **manif
   /* While we're here, let's just read the entire manifest file into an array,
      so we can cache the entire thing. */
   iterpool = svn_pool_create(pool);
-  *manifest = apr_array_make(pool, fs->max_files_per_dir, sizeof(apr_int64_t));
+  *manifest = apr_array_make(pool, fs->max_files_per_dir, sizeof(apr_size_t));
   while (1)
     {
       svn_stringbuf_t *sb;
       svn_boolean_t eof;
-      apr_int64_t val;
+      apr_uint64_t val;
       svn_error_t *err;
 
       svn_pool_clear(iterpool);
@@ -529,12 +531,12 @@ read_manifest(apr_array_header_t **manif
       if (eof)
         break;
 
-      err = svn_cstring_atoi64(&val, sb->data);
+      err = svn_cstring_strtoui64(&val, sb->data, 0, APR_SIZE_MAX, 10);
       if (err)
         return svn_error_createf(SVN_ERR_FS_CORRUPT, err,
                                  _("Manifest offset '%s' too large"),
                                  sb->data);
-      APR_ARRAY_PUSH(*manifest, apr_int64_t) = (apr_int64_t)val;
+      APR_ARRAY_PUSH(*manifest, apr_size_t) = (apr_size_t)val;
     }
   svn_pool_destroy(iterpool);
 
@@ -542,18 +544,18 @@ read_manifest(apr_array_header_t **manif
 }
 
 static svn_error_t *
-read_revision_header(apr_int64_t *changes,
-                     apr_int64_t *changes_len,
-                     apr_int64_t *root_noderev,
+read_revision_header(apr_size_t *changes,
+                     apr_size_t *changes_len,
+                     apr_size_t *root_noderev,
                      svn_stringbuf_t *file_content,
-                     apr_int64_t start,
-                     apr_int64_t end,
+                     apr_size_t start,
+                     apr_size_t end,
                      apr_pool_t *pool)
 {
   char buf[64];
   const char *line;
   const char *space;
-  apr_int64_t val;
+  apr_uint64_t val;
   apr_size_t len;
   
   /* Read in this last block, from which we will identify the last line. */
@@ -583,10 +585,10 @@ read_revision_header(apr_int64_t *change
 
   *(char *)space = 0;
   
-  SVN_ERR(svn_cstring_atoi64(&val, line+1));
-  *root_noderev = (apr_int64_t)val;
-  SVN_ERR(svn_cstring_atoi64(&val, space+1));
-  *changes = (apr_int64_t)val;
+  SVN_ERR(svn_cstring_strtoui64(&val, line+1, 0, APR_SIZE_MAX, 10));
+  *root_noderev = (apr_size_t)val;
+  SVN_ERR(svn_cstring_strtoui64(&val, space+1, 0, APR_SIZE_MAX, 10));
+  *changes = (apr_size_t)val;
   *changes_len = end - *changes - start - (buf + len - line) + 1;
 
   return SVN_NO_ERROR;
@@ -723,16 +725,17 @@ static int
 compare_noderev_offsets(const void *data, const void *key)
 {
   return (*(const noderev_t **)data)->original.offset
-       - *(const apr_int64_t *)key;
+       - *(const apr_size_t *)key;
 }
 
 static svn_error_t *
 parse_revnode_pos(revision_info_t **revision_info,
-                  apr_int64_t *offset,
+                  apr_size_t *offset,
                   fs_fs_t *fs,
                   svn_string_t *id)
 {
   int revision;
+  apr_uint64_t temp;
 
   const char *revision_pos = strrchr(id->data, 'r');
   char *offset_pos = (char *)strchr(id->data, '/');
@@ -743,7 +746,8 @@ parse_revnode_pos(revision_info_t **revi
 
   *offset_pos = 0;
   SVN_ERR(svn_cstring_atoi(&revision, revision_pos + 1));
-  SVN_ERR(svn_cstring_atoi64(offset, offset_pos + 1));
+  SVN_ERR(svn_cstring_strtoui64(&temp, offset_pos + 1, 0, APR_SIZE_MAX, 10));
+  *offset = (apr_size_t)temp;
   *offset_pos = '/';
 
   if (revision - fs->start_revision > fs->revisions->nelts)
@@ -760,7 +764,7 @@ parse_revnode_pos(revision_info_t **revi
 static svn_error_t *
 find_noderev(noderev_t **result,
             revision_info_t *revision_info,
-            apr_int64_t offset)
+            apr_size_t offset)
 {
   int idx = svn_sort__bsearch_lower_bound(&offset,
                                           revision_info->node_revs,
@@ -784,7 +788,7 @@ parse_pred(noderev_t **result,
            fs_fs_t *fs,
            svn_string_t *id)
 {
-  apr_int64_t offset;
+  apr_size_t offset;
   revision_info_t *revision_info;
 
   SVN_ERR(parse_revnode_pos(&revision_info, &offset, fs, id));
@@ -797,7 +801,7 @@ static int
 compare_representation_offsets(const void *data, const void *key)
 {
   return (*(const representation_t **)data)->original.offset
-       - *(const apr_int64_t *)key;
+       - *(const apr_size_t *)key;
 }
 
 static representation_t *
@@ -805,7 +809,7 @@ find_representation(int *idx,
                     fs_fs_t *fs,
                     revision_info_t **revision_info,
                     int revision,
-                    apr_int64_t offset)
+                    apr_size_t offset)
 {
   revision_info_t *info;
   *idx = -1;
@@ -839,16 +843,17 @@ find_representation(int *idx,
 
 static svn_error_t *
 read_rep_base(representation_t **representation,
-              apr_int64_t *header_size,
+              apr_size_t *header_size,
               svn_boolean_t *is_plain,
               fs_fs_t *fs,
               svn_stringbuf_t *file_content,
-              apr_int64_t offset,
+              apr_size_t offset,
               apr_pool_t *pool,
               apr_pool_t *scratch_pool)
 {
   char *str, *last_str;
   int idx, revision;
+  apr_uint64_t temp;
 
   const char *buffer = file_content->data + offset;
   const char *line_end = strchr(buffer, '\n');
@@ -878,9 +883,9 @@ read_rep_base(representation_t **represe
   SVN_ERR(svn_cstring_atoi(&revision, str));
 
   str = svn_cstring_tokenize(" ", &last_str);
-  SVN_ERR(svn_cstring_atoi64(&offset, str));
+  SVN_ERR(svn_cstring_strtoui64(&temp, str, 0, APR_SIZE_MAX, 10));
 
-  *representation = find_representation(&idx, fs, NULL, revision, offset);
+  *representation = find_representation(&idx, fs, NULL, revision, (apr_size_t)temp);
   return SVN_NO_ERROR;
 }
 
@@ -896,25 +901,25 @@ parse_representation(representation_t **
   representation_t *result;
   int revision;
 
-  apr_int64_t offset;
-  svn_filesize_t size;
+  apr_uint64_t offset;
+  apr_uint64_t size;
   int idx;
 
   char *c = (char *)value->data;
   SVN_ERR(svn_cstring_atoi(&revision, svn_cstring_tokenize(" ", &c)));
-  SVN_ERR(svn_cstring_atoi64(&offset, svn_cstring_tokenize(" ", &c)));
-  SVN_ERR(svn_cstring_atoi64(&size, svn_cstring_tokenize(" ", &c)));
+  SVN_ERR(svn_cstring_strtoui64(&offset, svn_cstring_tokenize(" ", &c), 0, APR_SIZE_MAX, 10));
+  SVN_ERR(svn_cstring_strtoui64(&size, svn_cstring_tokenize(" ", &c), 0, APR_SIZE_MAX, 10));
 
-  result = find_representation(&idx, fs, &revision_info, revision, offset);
+  result = find_representation(&idx, fs, &revision_info, revision, (apr_size_t)offset);
   if (!result)
     {
       result = apr_pcalloc(pool, sizeof(*result));
       result->revision = revision_info;
-      result->original.offset = offset;
-      result->original.size = size;
+      result->original.offset = (apr_size_t)offset;
+      result->original.size = (apr_size_t)size;
       SVN_ERR(read_rep_base(&result->delta_base, &result->header_size,
                             &result->is_plain, fs, file_content,
-                            offset + revision_info->original.offset,
+                            (apr_size_t)offset + revision_info->original.offset,
                             pool, scratch_pool));
 
       svn_sort__array_insert(&result, revision_info->representations, idx);
@@ -936,8 +941,8 @@ read_windows(apr_array_header_t **window
   svn_string_t *content;
   svn_string_t data;
   svn_stream_t *stream;
-  apr_int64_t offset = representation->original.offset
-                   + representation->header_size;
+  apr_size_t offset = representation->original.offset
+                    + representation->header_size;
   char version;
   apr_size_t len = sizeof(version);
 
@@ -977,8 +982,8 @@ read_plain(svn_stringbuf_t **content,
            apr_pool_t *pool)
 {
   svn_string_t *data;
-  apr_int64_t offset = representation->original.offset
-                   + representation->header_size;
+  apr_size_t offset = representation->original.offset
+                    + representation->header_size;
 
   SVN_ERR(get_content(&data, fs, representation->revision->revision, pool));
 
@@ -1051,7 +1056,7 @@ static svn_error_t *
 read_noderev(noderev_t **noderev,
              fs_fs_t *fs,
              svn_stringbuf_t *file_content,
-             apr_int64_t offset,
+             apr_size_t offset,
              revision_info_t *revision_info,
              apr_pool_t *pool,
              apr_pool_t *scratch_pool);
@@ -1060,7 +1065,7 @@ static svn_error_t *
 get_noderev(noderev_t **noderev,
             fs_fs_t *fs,
             svn_stringbuf_t *file_content,
-            apr_int64_t offset,
+            apr_size_t offset,
             revision_info_t *revision_info,
             apr_pool_t *pool,
             apr_pool_t *scratch_pool)
@@ -1151,7 +1156,7 @@ parse_dir(fs_fs_t *fs,
     {
       const char *name = svn__apr_hash_index_key(hi);
       svn_string_t *str_val = svn__apr_hash_index_val(hi);
-      apr_int64_t offset;
+      apr_size_t offset;
       revision_info_t *revision_info;
       apr_size_t name_len = strlen(name);
       direntry_t *entry = base_dir
@@ -1189,7 +1194,7 @@ static svn_error_t *
 read_noderev(noderev_t **noderev,
              fs_fs_t *fs,
              svn_stringbuf_t *file_content,
-             apr_int64_t offset,
+             apr_size_t offset,
              revision_info_t *revision_info,
              apr_pool_t *pool,
              apr_pool_t *scratch_pool)
@@ -1297,7 +1302,7 @@ read_pack_file(fs_fs_t *fs,
 
   for (i = 0; i < manifest->nelts; ++i)
     {
-      apr_int64_t root_node_offset;
+      apr_size_t root_node_offset;
       svn_string_t rev_content;
   
       revision_info_t *info = apr_pcalloc(pool, sizeof(*info));
@@ -1305,15 +1310,15 @@ read_pack_file(fs_fs_t *fs,
       info->representations = apr_array_make(iter_pool, 4, sizeof(representation_t*));
 
       info->revision = base + i;
-      info->original.offset = APR_ARRAY_IDX(manifest, i, apr_int64_t);
+      info->original.offset = APR_ARRAY_IDX(manifest, i, apr_size_t);
       info->original.end = i+1 < manifest->nelts
-                         ? APR_ARRAY_IDX(manifest, i+1 , apr_int64_t)
+                         ? APR_ARRAY_IDX(manifest, i+1 , apr_size_t)
                          : file_content->len;
       SVN_ERR(read_revision_header(&info->original.changes,
                                    &info->original.changes_len,
                                    &root_node_offset,
                                    file_content,
-                                   APR_ARRAY_IDX(manifest, i , apr_int64_t),
+                                   APR_ARRAY_IDX(manifest, i , apr_size_t),
                                    info->original.end,
                                    iter_pool));
 
@@ -1344,7 +1349,7 @@ read_revision_file(fs_fs_t *fs,
                    svn_revnum_t revision,
                    apr_pool_t *pool)
 {
-  apr_int64_t root_node_offset;
+  apr_size_t root_node_offset;
   apr_pool_t *local_pool = svn_pool_create(pool);
   svn_stringbuf_t *file_content;
   svn_string_t rev_content;
@@ -1998,8 +2003,11 @@ write_revisions(fs_fs_t *fs,
 
       for (i = 0; i < pack->info->nelts; ++i)
         {
-          revision_info_t *info = APR_ARRAY_IDX(pack->info, i, revision_info_t*);
-          svn_stream_printf(stream, itempool, "%ld\n", info->target.offset);
+          revision_info_t *info = APR_ARRAY_IDX(pack->info, i,
+                                                revision_info_t *);
+          SVN_ERR(svn_stream_printf(stream, itempool,
+                                    "%" APR_UINT64_T_FMT "\n",
+                                    info->target.offset));
           svn_pool_clear(itempool);
         }
     }
@@ -2179,7 +2187,8 @@ update_text(svn_stringbuf_t *node_rev,
       char *newline_pos = strchr(val_pos, '\n');
       svn_checksum_t checksum = {representation->dir->target_md5,
                                  svn_checksum_md5};
-      const char* temp = apr_psprintf(scratch_pool, "%ld %ld %ld %ld %s",
+      const char* temp = apr_psprintf(scratch_pool, "%ld %" APR_UINT64_T_FMT " %" 
+                                      APR_UINT64_T_FMT" %" APR_SIZE_T_FMT " %s",
                                       representation->revision->revision,
                                       representation->target.offset - representation->revision->target.offset,
                                       representation->target.size,
@@ -2198,7 +2207,7 @@ update_text(svn_stringbuf_t *node_rev,
       
       val_pos = end_pos + 1;
       end_pos = strchr(strchr(val_pos, ' ') + 1, ' ');
-      temp = apr_psprintf(scratch_pool, "%ld %ld",
+      temp = apr_psprintf(scratch_pool, "%" APR_UINT64_T_FMT " %" APR_UINT64_T_FMT,
                           representation->target.offset - representation->revision->target.offset,
                           representation->target.size);
 
@@ -2227,7 +2236,7 @@ get_fragment_content(svn_string_t **cont
       case header_fragment:
         info = fragment->data;
         *content = svn_string_createf(pool,
-                                      "\n%ld %ld\n",
+                                      "\n%" APR_UINT64_T_FMT " %" APR_UINT64_T_FMT "\n",
                                       info->root_noderev->target.offset - info->target.offset,
                                       info->target.changes);
         return SVN_NO_ERROR;
@@ -2264,7 +2273,7 @@ get_fragment_content(svn_string_t **cont
               header = svn_stringbuf_create("DELTA\n", pool);
             else
               header = svn_stringbuf_createf(pool,
-                                             "DELTA %ld %ld %ld\n",
+                                             "DELTA %ld %" APR_UINT64_T_FMT " %" APR_UINT64_T_FMT "\n",
                                              representation->delta_base->revision->revision,
                                              representation->delta_base->target.offset
                                              - representation->delta_base->revision->target.offset,
@@ -2307,7 +2316,7 @@ get_fragment_content(svn_string_t **cont
               {
                 representation_t *base_rep = representation->delta_base;
                 header = svn_stringbuf_createf(pool,
-                                               "DELTA %ld %ld %ld\n",
+                                               "DELTA %ld %" APR_UINT64_T_FMT " %" APR_UINT64_T_FMT "\n",
                                                base_rep->revision->revision,
                                                base_rep->target.offset - base_rep->revision->target.offset,
                                                base_rep->target.size);
@@ -2434,7 +2443,8 @@ int main(int argc, const char *argv[])
   svn_error_t *svn_err;
   const char *repo_path = NULL;
   svn_revnum_t start_revision = 0;
-  apr_int64_t memsize = 0;
+  apr_size_t memsize = 0;
+  apr_uint64_t temp = 0;
   fs_fs_t *fs;
 
   apr_initialize();
@@ -2455,7 +2465,7 @@ int main(int argc, const char *argv[])
       return 2;
     }
 
-  svn_err = svn_cstring_atoi64(&memsize, argv[2]);
+  svn_err = svn_cstring_strtoui64(&temp, argv[2], 0, APR_SIZE_MAX, 10);
   if (svn_err)
     {
       print_usage(ostream, argv[0], pool);
@@ -2463,6 +2473,7 @@ int main(int argc, const char *argv[])
       return 2;
     }
 
+  memsize = (apr_size_t)temp;
   repo_path = argv[1];
   start_revision = 0;
 

Modified: subversion/branches/master-passphrase/tools/server-side/svnauthz-validate.c
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/tools/server-side/svnauthz-validate.c?rev=1403849&r1=1403848&r2=1403849&view=diff
==============================================================================
--- subversion/branches/master-passphrase/tools/server-side/svnauthz-validate.c (original)
+++ subversion/branches/master-passphrase/tools/server-side/svnauthz-validate.c Tue Oct 30 20:03:28 2012
@@ -44,7 +44,7 @@ enum {
 static int
 usage(const char *argv0)
 {
-  printf("Usage:  %s FILE [--username USER [--path FSPATH] [--repository REPOS_NAME]]\n\n", argv0);
+  printf("Usage:  %s FILE [--username USER [--path FSPATH] [--repository REPOS_NAME]] FILE\n\n", argv0);
   printf("Loads the authz file at FILE and validates its syntax.\n"
          "Optionally prints the access available to USER for FSPATH in\n"
          "repository with authz name REPOS_NAME.  If FSPATH is omitted, reports\n"

Propchange: subversion/branches/master-passphrase/tools/server-side/svnpubsub/README.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: subversion/branches/master-passphrase/tools/server-side/svnpubsub/commit-hook.py
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/tools/server-side/svnpubsub/commit-hook.py?rev=1403849&r1=1403848&r2=1403849&view=diff
==============================================================================
--- subversion/branches/master-passphrase/tools/server-side/svnpubsub/commit-hook.py (original)
+++ subversion/branches/master-passphrase/tools/server-side/svnpubsub/commit-hook.py Tue Oct 30 20:03:28 2012
@@ -46,7 +46,7 @@ def svncmd_info(repo, revision):
     #print data
     return {'author': data[0],
             'date': data[1],
-            'log': "".join(data[3:])}
+            'log': "\n".join(data[3:])}
 
 def svncmd_dirs(repo, revision):
     cmd = "%s dirs-changed  -r %s %s" % (SVNLOOK, revision, repo)
@@ -68,6 +68,7 @@ def do_put(body):
 
 
 def main(repo, revision):
+    revision = revision.lstrip('r')
     i = svncmd_info(repo, revision)
     data = {'revision': int(revision),
             'dirs_changed': [],

Modified: subversion/branches/master-passphrase/tools/server-side/svnpubsub/svnpubsub/client.py
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/tools/server-side/svnpubsub/svnpubsub/client.py?rev=1403849&r1=1403848&r2=1403849&view=diff
==============================================================================
--- subversion/branches/master-passphrase/tools/server-side/svnpubsub/svnpubsub/client.py (original)
+++ subversion/branches/master-passphrase/tools/server-side/svnpubsub/svnpubsub/client.py Tue Oct 30 20:03:28 2012
@@ -137,13 +137,13 @@ class XMLStreamHandler(xml.sax.handler.C
     elif self.chars and self.rev:
       value = self.chars.strip()
       if name == 'path':
-        self.rev.dirs_changed.append(value)
+        self.rev.dirs_changed.append(value.decode('unicode_escape'))
       elif name == 'author':
-        self.rev.author = value
+        self.rev.author = value.decode('unicode_escape')
       elif name == 'date':
-        self.rev.date = value
+        self.rev.date = value.decode('unicode_escape')
       elif name == 'log':
-        self.rev.log = value
+        self.rev.log = value.decode('unicode_escape')
 
     # Toss out any accumulated characters for this element.
     self.chars = ''

Modified: subversion/branches/master-passphrase/tools/server-side/svnpubsub/svnpubsub/server.py
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/tools/server-side/svnpubsub/svnpubsub/server.py?rev=1403849&r1=1403848&r2=1403849&view=diff
==============================================================================
--- subversion/branches/master-passphrase/tools/server-side/svnpubsub/svnpubsub/server.py (original)
+++ subversion/branches/master-passphrase/tools/server-side/svnpubsub/svnpubsub/server.py Tue Oct 30 20:03:28 2012
@@ -73,12 +73,15 @@ import time
 
 class Revision:
     def __init__(self, r):
+        # Don't escape the values; json handles binary values fine.
+        # ET will happily emit literal control characters (eg, NUL),
+        # thus creating invalid XML, so the XML code paths do escaping.
         self.rev = r.get('revision')
         self.repos = r.get('repos')
-        self.dirs_changed = [x.encode('unicode_escape') for x in r.get('dirs_changed')]
-        self.author = r.get('author').encode('unicode_escape')
-        self.log = r.get('log').encode('unicode_escape')
-        self.date = r.get('date').encode('unicode_escape')
+        self.dirs_changed = [x for x in r.get('dirs_changed')]
+        self.author = r.get('author')
+        self.log = r.get('log')
+        self.date = r.get('date')
 
     def render_commit(self, format):
         if format == "json":
@@ -90,13 +93,13 @@ class Revision:
                                           'date': self.date}}) +","
         elif format == "xml":
             c = ET.Element('commit', {'repository': self.repos, 'revision': "%d" % (self.rev)})
-            ET.SubElement(c, 'author').text = self.author
-            ET.SubElement(c, 'date').text = self.date
-            ET.SubElement(c, 'log').text = self.log
+            ET.SubElement(c, 'author').text = self.author.encode('unicode_escape')
+            ET.SubElement(c, 'date').text = self.date.encode('unicode_escape')
+            ET.SubElement(c, 'log').text = self.log.encode('unicode_escape')
             d = ET.SubElement(c, 'dirs_changed')
             for p in self.dirs_changed:
                 x = ET.SubElement(d, 'path')
-                x.text = p
+                x.text = p.encode('unicode_escape')
             str = ET.tostring(c, 'UTF-8') + "\n"
             return str[39:]
         else:
@@ -112,7 +115,7 @@ class Revision:
             d = ET.SubElement(c, 'dirs_changed')
             for p in self.dirs_changed:
                 x = ET.SubElement(d, 'path')
-                x.text = p
+                x.text = p.encode('unicode_escape')
             str = ET.tostring(c, 'UTF-8') + "\n"
             return str[39:]
         else:

Modified: subversion/branches/master-passphrase/tools/server-side/svnpubsub/svnwcsub.py
URL: http://svn.apache.org/viewvc/subversion/branches/master-passphrase/tools/server-side/svnpubsub/svnwcsub.py?rev=1403849&r1=1403848&r2=1403849&view=diff
==============================================================================
--- subversion/branches/master-passphrase/tools/server-side/svnpubsub/svnwcsub.py (original)
+++ subversion/branches/master-passphrase/tools/server-side/svnpubsub/svnwcsub.py Tue Oct 30 20:03:28 2012
@@ -267,13 +267,15 @@ class BackgroundWorker(threading.Thread)
 
         ### we need to move some of these args into the config. these are
         ### still specific to the ASF setup.
-        args = [self.svnbin, 'update',
+        args = [self.svnbin, 'switch',
                 '--quiet',
                 '--non-interactive',
                 '--trust-server-cert',
                 '--ignore-externals',
                 '--config-option',
                 'config:miscellany:use-commit-times=on',
+                '--',
+                wc.url,
                 wc.path]
         subprocess.check_call(args, env=self.env)
 



Mime
View raw message