You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by pr...@apache.org on 2013/06/05 11:22:51 UTC

svn commit: r1489765 [21/22] - in /subversion/branches/verify-keep-going: ./ build/ build/ac-macros/ build/generator/ build/generator/templates/ contrib/hook-scripts/ contrib/server-side/fsfsfixer/ contrib/server-side/fsfsfixer/fixer/ notes/ subversion...

Modified: subversion/branches/verify-keep-going/tools/buildbot/slaves/win32-xp-VS2005/config.bat
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/buildbot/slaves/win32-xp-VS2005/config.bat?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/buildbot/slaves/win32-xp-VS2005/config.bat (original)
+++ subversion/branches/verify-keep-going/tools/buildbot/slaves/win32-xp-VS2005/config.bat Wed Jun  5 09:22:43 2013
@@ -5,9 +5,9 @@ REM     regarding copyright ownership.  
 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
 REM       http://www.apache.org/licenses/LICENSE-2.0
-REM    
+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

Modified: subversion/branches/verify-keep-going/tools/buildbot/slaves/win32-xp-VS2005/do_all.bat
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/buildbot/slaves/win32-xp-VS2005/do_all.bat?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/buildbot/slaves/win32-xp-VS2005/do_all.bat (original)
+++ subversion/branches/verify-keep-going/tools/buildbot/slaves/win32-xp-VS2005/do_all.bat Wed Jun  5 09:22:43 2013
@@ -5,9 +5,9 @@ REM     regarding copyright ownership.  
 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
 REM       http://www.apache.org/licenses/LICENSE-2.0
-REM    
+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

Modified: subversion/branches/verify-keep-going/tools/buildbot/slaves/win32-xp-VS2005/svnbuild.bat
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/buildbot/slaves/win32-xp-VS2005/svnbuild.bat?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/buildbot/slaves/win32-xp-VS2005/svnbuild.bat (original)
+++ subversion/branches/verify-keep-going/tools/buildbot/slaves/win32-xp-VS2005/svnbuild.bat Wed Jun  5 09:22:43 2013
@@ -5,9 +5,9 @@ REM     regarding copyright ownership.  
 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
 REM       http://www.apache.org/licenses/LICENSE-2.0
-REM    
+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

Modified: subversion/branches/verify-keep-going/tools/buildbot/slaves/win32-xp-VS2005/svncheck.bat
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/buildbot/slaves/win32-xp-VS2005/svncheck.bat?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/buildbot/slaves/win32-xp-VS2005/svncheck.bat (original)
+++ subversion/branches/verify-keep-going/tools/buildbot/slaves/win32-xp-VS2005/svncheck.bat Wed Jun  5 09:22:43 2013
@@ -5,9 +5,9 @@ REM     regarding copyright ownership.  
 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
 REM       http://www.apache.org/licenses/LICENSE-2.0
-REM    
+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
@@ -34,7 +34,7 @@ EXIT 3
 
 :ra_local
 time /T
-python win-tests.py %TEST_DIR%\%FS_TYPE% -f %FS_TYPE% -c -r 
+python win-tests.py %TEST_DIR%\%FS_TYPE% -f %FS_TYPE% -c -r
 if ERRORLEVEL 1 set ERR=1
 time /T
 echo.

Modified: subversion/branches/verify-keep-going/tools/buildbot/slaves/win32-xp-VS2005/svnclean.bat
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/buildbot/slaves/win32-xp-VS2005/svnclean.bat?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/buildbot/slaves/win32-xp-VS2005/svnclean.bat (original)
+++ subversion/branches/verify-keep-going/tools/buildbot/slaves/win32-xp-VS2005/svnclean.bat Wed Jun  5 09:22:43 2013
@@ -5,9 +5,9 @@ REM     regarding copyright ownership.  
 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
 REM       http://www.apache.org/licenses/LICENSE-2.0
-REM    
+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

Modified: subversion/branches/verify-keep-going/tools/buildbot/slaves/win32-xp-VS2005/svnlog.bat
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/buildbot/slaves/win32-xp-VS2005/svnlog.bat?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/buildbot/slaves/win32-xp-VS2005/svnlog.bat (original)
+++ subversion/branches/verify-keep-going/tools/buildbot/slaves/win32-xp-VS2005/svnlog.bat Wed Jun  5 09:22:43 2013
@@ -5,9 +5,9 @@ REM     regarding copyright ownership.  
 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
 REM       http://www.apache.org/licenses/LICENSE-2.0
-REM    
+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

Modified: subversion/branches/verify-keep-going/tools/buildbot/slaves/xp-vc60-ia32/svnbuild.bat
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/buildbot/slaves/xp-vc60-ia32/svnbuild.bat?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/buildbot/slaves/xp-vc60-ia32/svnbuild.bat (original)
+++ subversion/branches/verify-keep-going/tools/buildbot/slaves/xp-vc60-ia32/svnbuild.bat Wed Jun  5 09:22:43 2013
@@ -5,9 +5,9 @@ REM     regarding copyright ownership.  
 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
 REM       http://www.apache.org/licenses/LICENSE-2.0
-REM    
+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

Modified: subversion/branches/verify-keep-going/tools/buildbot/slaves/xp-vc60-ia32/svncheck.bat
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/buildbot/slaves/xp-vc60-ia32/svncheck.bat?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/buildbot/slaves/xp-vc60-ia32/svncheck.bat (original)
+++ subversion/branches/verify-keep-going/tools/buildbot/slaves/xp-vc60-ia32/svncheck.bat Wed Jun  5 09:22:43 2013
@@ -5,9 +5,9 @@ REM     regarding copyright ownership.  
 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
 REM       http://www.apache.org/licenses/LICENSE-2.0
-REM    
+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
@@ -32,7 +32,7 @@ echo Unknown ra method '%RA_TYPE%'
 EXIT 3
 
 :ra_local
-python win-tests.py %TEST_DIR% -f %FS_TYPE% -c -r 
+python win-tests.py %TEST_DIR% -f %FS_TYPE% -c -r
 if ERRORLEVEL 1 set ERR=1
 EXIT %ERR%
 

Modified: subversion/branches/verify-keep-going/tools/buildbot/slaves/xp-vc60-ia32/svnclean.bat
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/buildbot/slaves/xp-vc60-ia32/svnclean.bat?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/buildbot/slaves/xp-vc60-ia32/svnclean.bat (original)
+++ subversion/branches/verify-keep-going/tools/buildbot/slaves/xp-vc60-ia32/svnclean.bat Wed Jun  5 09:22:43 2013
@@ -5,9 +5,9 @@ REM     regarding copyright ownership.  
 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
 REM       http://www.apache.org/licenses/LICENSE-2.0
-REM    
+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

Modified: subversion/branches/verify-keep-going/tools/buildbot/slaves/xp-vc60-ia32/svnlog.bat
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/buildbot/slaves/xp-vc60-ia32/svnlog.bat?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/buildbot/slaves/xp-vc60-ia32/svnlog.bat (original)
+++ subversion/branches/verify-keep-going/tools/buildbot/slaves/xp-vc60-ia32/svnlog.bat Wed Jun  5 09:22:43 2013
@@ -5,9 +5,9 @@ REM     regarding copyright ownership.  
 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
 REM       http://www.apache.org/licenses/LICENSE-2.0
-REM    
+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

Modified: subversion/branches/verify-keep-going/tools/client-side/svn-bench/null-export-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/client-side/svn-bench/null-export-cmd.c?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/client-side/svn-bench/null-export-cmd.c (original)
+++ subversion/branches/verify-keep-going/tools/client-side/svn-bench/null-export-cmd.c Wed Jun  5 09:22:43 2013
@@ -141,7 +141,7 @@ change_file_prop(void *file_baton,
   edit_baton_t *eb = file_baton;
   eb->prop_count++;
   eb->prop_byte_count += value->len;
-  
+
   return SVN_NO_ERROR;
 }
 

Modified: subversion/branches/verify-keep-going/tools/client-side/svn-bench/null-log-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/client-side/svn-bench/null-log-cmd.c?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/client-side/svn-bench/null-log-cmd.c (original)
+++ subversion/branches/verify-keep-going/tools/client-side/svn-bench/null-log-cmd.c Wed Jun  5 09:22:43 2013
@@ -95,7 +95,7 @@ log_entry_receiver(void *baton,
   svn_compat_log_revprops_out(&author, &date, &message, log_entry->revprops);
   if (log_entry->revision == 0 && message == NULL)
     return SVN_NO_ERROR;
-  
+
   lb->revisions++;
   if (lb->merge_depth)
     lb->merged_revs++;

Modified: subversion/branches/verify-keep-going/tools/client-side/svn-bench/svn-bench.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/client-side/svn-bench/svn-bench.c?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/client-side/svn-bench/svn-bench.c (original)
+++ subversion/branches/verify-keep-going/tools/client-side/svn-bench/svn-bench.c Wed Jun  5 09:22:43 2013
@@ -253,7 +253,7 @@ const svn_opt_subcommand_desc2_t svn_cl_
      "  affected paths for that revision were explicitly requested.  Logs\n"
      "  follow copy history by default.  Use --stop-on-copy to disable this\n"
      "  behavior, which can be useful for determining branchpoints.\n"),
-    {'r', 'q', 'v', 'g', 'c', opt_targets, opt_stop_on_copy, 
+    {'r', 'q', 'v', 'g', 'c', opt_targets, opt_stop_on_copy,
      'l', opt_with_all_revprops, opt_with_no_revprops, opt_with_revprop,
      'x',},
     {{opt_with_revprop, N_("retrieve revision property ARG")},
@@ -363,7 +363,7 @@ sub_main(int argc, const char *argv[], a
   /* No args?  Show usage. */
   if (argc <= 1)
     {
-      svn_cl__help(NULL, NULL, pool);
+      SVN_INT_ERR(svn_cl__help(NULL, NULL, pool));
       return EXIT_FAILURE;
     }
 
@@ -383,7 +383,7 @@ sub_main(int argc, const char *argv[], a
         break;
       else if (apr_err)
         {
-          svn_cl__help(NULL, NULL, pool);
+          SVN_INT_ERR(svn_cl__help(NULL, NULL, pool));
           return EXIT_FAILURE;
         }
 
@@ -668,7 +668,7 @@ sub_main(int argc, const char *argv[], a
               svn_error_clear
                 (svn_cmdline_fprintf(stderr, pool,
                                      _("Subcommand argument required\n")));
-              svn_cl__help(NULL, NULL, pool);
+              SVN_INT_ERR(svn_cl__help(NULL, NULL, pool));
               return EXIT_FAILURE;
             }
         }
@@ -686,7 +686,7 @@ sub_main(int argc, const char *argv[], a
                 (svn_cmdline_fprintf(stderr, pool,
                                      _("Unknown subcommand: '%s'\n"),
                                      first_arg_utf8));
-              svn_cl__help(NULL, NULL, pool);
+              SVN_INT_ERR(svn_cl__help(NULL, NULL, pool));
               return EXIT_FAILURE;
             }
         }
@@ -713,7 +713,7 @@ sub_main(int argc, const char *argv[], a
                                           subcommand, pool);
           svn_opt_format_option(&optstr, badopt, FALSE, pool);
           if (subcommand->name[0] == '-')
-            svn_cl__help(NULL, NULL, pool);
+            SVN_INT_ERR(svn_cl__help(NULL, NULL, pool));
           else
             svn_error_clear
               (svn_cmdline_fprintf

Modified: subversion/branches/verify-keep-going/tools/dev/aprerr.txt
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/dev/aprerr.txt?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/dev/aprerr.txt (original)
+++ subversion/branches/verify-keep-going/tools/dev/aprerr.txt Wed Jun  5 09:22:43 2013
@@ -1,3 +1,4 @@
+# This file is used by which-error.py and gen_base.py:write_errno_table()
 APR_SUCCESS = 0
 SOCBASEERR = 10000
 SOCEPERM = 10001

Modified: subversion/branches/verify-keep-going/tools/dev/benchmarks/suite1/benchmark.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/dev/benchmarks/suite1/benchmark.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/dev/benchmarks/suite1/benchmark.py (original)
+++ subversion/branches/verify-keep-going/tools/dev/benchmarks/suite1/benchmark.py Wed Jun  5 09:22:43 2013
@@ -20,10 +20,10 @@
 """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> 
+  <branch>@<revision>,<levels>x<spread>
 abbreviated as:
   B@R,LxS
 
@@ -214,9 +214,9 @@ def next_unique_basename(prefix):
 
 si_units = [
     (1000 ** 5, 'P'),
-    (1000 ** 4, 'T'), 
-    (1000 ** 3, 'G'), 
-    (1000 ** 2, 'M'), 
+    (1000 ** 4, 'T'),
+    (1000 ** 3, 'G'),
+    (1000 ** 2, 'M'),
     (1000 ** 1, 'K'),
     (1000 ** 0, ''),
     ]
@@ -308,7 +308,7 @@ def parse_timings_selections(db, *args):
       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:
@@ -433,7 +433,7 @@ class Run:
       kind_id = c.lastrowid
 
     self.started = time_str()
-    
+
     c.execute("""
         INSERT INTO run
           (batch_id, run_kind_id, started)
@@ -595,7 +595,7 @@ class TimingQuery:
     for command_name in self.get_sorted_command_names():
       self.timings[command_name] = self.get_command_timings(command_name)
     return self.timings
-      
+
 
 # ------------------------------------------------------------ run tests
 
@@ -890,10 +890,10 @@ def perform_run(batch, run_kind,
 
 # ---------------------------------------------------------------------
 
-    
+
 def cmdline_run(db, options, run_kind_str, N=1):
   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
@@ -938,7 +938,7 @@ def cmdline_list(db, options, *args):
     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)
@@ -1097,7 +1097,7 @@ def cmdline_chart_compare(db, options, *
     chart_path = 'compare_' + '_'.join(
       [ filesystem_safe_string(l) for l in labels ]
       ) + '.svg'
-                  
+
   N = len(command_names)
   M = len(timing_sets) - 1
   if M < 2:
@@ -1238,7 +1238,7 @@ class IndentedHelpFormatterWithNL(optpar
         subsequent_indent=indent)
       for bit in bits]
     result = "\n".join(formatted_bits) + "\n"
-    return result 
+    return result
 
 if __name__ == '__main__':
   parser = optparse.OptionParser(formatter=IndentedHelpFormatterWithNL())

Modified: subversion/branches/verify-keep-going/tools/dev/fsfs-access-map.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/dev/fsfs-access-map.c?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/dev/fsfs-access-map.c (original)
+++ subversion/branches/verify-keep-going/tools/dev/fsfs-access-map.c Wed Jun  5 09:22:43 2013
@@ -219,7 +219,7 @@ read_file(int handle, apr_int64_t count)
   if (handle_info)
     {
       /* known file handle -> expand current read sequence */
-      
+
       handle_info->last_read_size += count;
       handle_info->file->read_count++;
       handle_info->file->read_size += count;
@@ -239,7 +239,7 @@ seek_file(int handle, apr_int64_t locati
       apr_size_t cluster = (apr_size_t)(location / cluster_size);
 
       store_read_info(handle_info);
-      
+
       handle_info->last_read_size = 0;
       handle_info->last_read_start = location;
       handle_info->file->seek_count++;
@@ -278,7 +278,7 @@ parse_line(svn_stringbuf_t *line)
 
   if (func_end == NULL || return_value == NULL)
     return;
-  
+
   first_param_end = strchr(func_end, ',');
   if (first_param_end == NULL)
     first_param_end = strchr(func_end, ')');
@@ -293,14 +293,14 @@ parse_line(svn_stringbuf_t *line)
   /* (try to) convert the return value into an integer.
    * If that fails, continue anyway as defaulting to 0 will be safe for us. */
   svn_error_clear(svn_cstring_atoi64(&func_return, return_value));
-  
+
   /* process those operations that we care about */
   if (strcmp(line->data, "open") == 0)
     {
       /* remove double quotes from file name parameter */
       *func_end++ = 0;
       *--first_param_end = 0;
-      
+
       open_file(func_end, (int)func_return);
     }
   else if (strcmp(line->data, "read") == 0)
@@ -592,14 +592,14 @@ print_stats(apr_pool_t *pool)
   apr_int64_t clusters_read = 0;
   apr_int64_t unique_clusters_read = 0;
   apr_int64_t uncached_seek_count = 0;
-  
+
   apr_hash_index_t *hi;
   for (hi = apr_hash_first(pool, files); hi; hi = apr_hash_next(hi))
     {
       const char *name = NULL;
       apr_ssize_t len = 0;
       file_stats_t *file = NULL;
-      
+
       apr_hash_this(hi, (const void **)&name, &len, (void**)&file);
 
       open_count += file->open_count;
@@ -629,7 +629,7 @@ print_usage(void)
   printf("Reads strace of some FSFS-based tool from <file>, prints some stats\n");
   printf("and writes a cluster access map to 'access.bmp' the current folder.\n");
   printf("Each pixel corresponds to one 64kB cluster and every line to a rev\n");
-  printf("or packed rev file in the repository.  Turquoise and greed indicate\n");
+  printf("or packed rev file in the repository.  Turquoise and green indicate\n");
   printf("1 and 2 hits, yellow to read-ish colors for up to 20, shares of\n");
   printf("for up to 100 and black for > 200 hits.\n\n");
   printf("A typical strace invocation looks like this:\n");
@@ -641,7 +641,7 @@ int main(int argc, const char *argv[])
 {
   apr_pool_t *pool = NULL;
   apr_file_t *file = NULL;
-  
+
   apr_initialize();
   atexit(apr_terminate);
 
@@ -661,7 +661,7 @@ int main(int argc, const char *argv[])
   apr_file_close(file);
 
   print_stats(pool);
-  
+
   apr_file_open(&file, "access.bmp",
                 APR_WRITE | APR_CREATE | APR_TRUNCATE | APR_BUFFERED,
                 APR_OS_DEFAULT, pool);

Modified: subversion/branches/verify-keep-going/tools/dev/fsfs-reorg.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/dev/fsfs-reorg.c?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/dev/fsfs-reorg.c (original)
+++ subversion/branches/verify-keep-going/tools/dev/fsfs-reorg.c Wed Jun  5 09:22:43 2013
@@ -54,7 +54,7 @@ typedef struct revision_info_t revision_
 
 /* A FSFS rev file is sequence of fragments and unused space (the latter
  * only being inserted by this tool and not during ordinary SVN operation).
- * 
+ *
  * This type defines the type of any fragment.
  *
  * Please note that the classification as "property", "dir" or "file"
@@ -105,7 +105,7 @@ typedef struct revision_location_t
 {
   /* pack file offset (manifest value), 0 for non-packed files */
   apr_size_t offset;
-  
+
   /* offset of the changes list relative to OFFSET */
   apr_size_t changes;
 
@@ -114,7 +114,7 @@ typedef struct revision_location_t
 
   /* first offset behind the revision data in the pack file (file length
    * for non-packed revs) */
-  apr_size_t end;  
+  apr_size_t end;
 } revision_location_t;
 
 /* Absolute position and size of some item.
@@ -238,7 +238,7 @@ struct revision_info_t
   /* all noderevs_t of this revision (ordered by source file offset),
    * i.e. those that point back to this struct */
   apr_array_header_t *node_revs;
-  
+
   /* all representation_t of this revision (ordered by source file offset),
    * i.e. those that point back to this struct */
   apr_array_header_t *representations;
@@ -268,7 +268,7 @@ typedef struct revision_pack_t
 /* Cache for revision source content.  All content is stored in DATA and
  * the HASH maps revision number to an svn_string_t instance whose data
  * member points into DATA.
- * 
+ *
  * Once TOTAL_SIZE exceeds LIMIT, all content will be discarded.  Similarly,
  * the hash gets cleared every 10000 insertions to keep the HASH_POOL
  * memory usage in check.
@@ -313,7 +313,7 @@ typedef struct dir_cache_entry_t
 /* Directory cache. (revision, offset) will be mapped directly into the
  * ENTRIES array of ENTRY_COUNT buckets (many entries will be NULL).
  * Two alternating pools will be used to allocate dir content.
- * 
+ *
  * If the INSERT_COUNT exceeds a given limit, the pools get exchanged and
  * the older of the two will be cleared. This is to keep dir objects valid
  * for at least one insertion.
@@ -325,7 +325,7 @@ typedef struct dir_cache_t
 
   /* currently used for entry allocations */
   apr_pool_t *pool1;
-  
+
   /* previously used for entry allocations */
   apr_pool_t *pool2;
 
@@ -484,7 +484,7 @@ create_content_cache(apr_pool_t *pool,
   result->total_size = 0;
   result->insert_count = 0;
   result->data = apr_palloc(pool, limit);
-  
+
   return result;
 }
 
@@ -539,7 +539,7 @@ set_cached_content(content_cache_t *cach
 
   memcpy(cache->data + cache->total_size, data->data, data->len);
   cache->total_size += data->len;
-    
+
   key = apr_palloc(cache->hash_pool, sizeof(*key));
   *key = revision;
 
@@ -650,7 +650,7 @@ get_cached_dir(fs_fs_t *fs,
 
   apr_size_t i = get_dir_cache_index(fs, revision, offset);
   dir_cache_entry_t *entry = &fs->dir_cache->entries[i];
-  
+
   return entry->offset == offset && entry->revision == revision
     ? entry->hash
     : NULL;
@@ -837,12 +837,12 @@ read_revision_header(apr_size_t *changes
   char *space;
   apr_uint64_t val;
   apr_size_t len;
-  
+
   /* Read in this last block, from which we will identify the last line. */
   len = sizeof(buf);
   if (start + len > end)
     len = end - start;
-  
+
   memcpy(buf, file_content->data + end - len, len);
 
   /* The last byte should be a newline. */
@@ -972,7 +972,7 @@ read_number(svn_revnum_t *result, const 
 {
   svn_stringbuf_t *content;
   apr_uint64_t number;
-  
+
   SVN_ERR(svn_stringbuf_from_file2(&content, path, pool));
 
   content->data[content->len-1] = 0;
@@ -1170,7 +1170,7 @@ find_representation(int *idx,
   /* not found -> no result */
   if (info == NULL)
     return NULL;
-  
+
   assert(revision == info->revision);
 
   /* look for the representation */
@@ -1253,7 +1253,7 @@ read_rep_base(representation_t **represe
 /* Parse the representation reference (text: or props:) in VALUE, look
  * it up in FS and return it in *REPRESENTATION.  To be able to parse the
  * base rep, we pass the FILE_CONTENT as well.
- * 
+ *
  * If necessary, allocate the result in POOL; use SCRATCH_POOL for temp.
  * allocations.
  */
@@ -1297,7 +1297,7 @@ parse_representation(representation_t **
 
       svn_sort__array_insert(&result, revision_info->representations, idx);
     }
-    
+
   *representation = result;
 
   return SVN_NO_ERROR;
@@ -1417,7 +1417,7 @@ get_combined_window(svn_stringbuf_t **co
   /* apply deltas */
   result = svn_stringbuf_create_empty(pool);
   source = base_content->data;
-  
+
   for (i = 0; i < windows->nelts; ++i)
     {
       svn_txdelta_window_t *window
@@ -1441,7 +1441,7 @@ get_combined_window(svn_stringbuf_t **co
   /* cache result and return it */
   set_cached_window(fs, representation, result);
   *content = result;
-  
+
   return SVN_NO_ERROR;
 }
 
@@ -1459,7 +1459,7 @@ read_noderev(noderev_t **noderev,
  * pertain to the revision given in REVISION_INFO.  If the data has not
  * been read yet, parse it and store it in REVISION_INFO.  Return the result
  * in *NODEREV.
- * 
+ *
  * Use POOL for allocations and SCRATCH_POOL for temporaries.
  */
 static svn_error_t *
@@ -1524,7 +1524,7 @@ read_dir(apr_hash_t **hash,
 
   /* cache the result */
   set_cached_dir(fs, representation, *hash);
-  
+
   return SVN_NO_ERROR;
 }
 
@@ -1659,7 +1659,7 @@ read_noderev(noderev_t **noderev,
       /* empty line -> end of noderev data */
       if (line->len == 0)
         break;
-      
+
       sep = strchr(line->data, ':');
       if (sep == NULL)
         continue;
@@ -1670,7 +1670,7 @@ read_noderev(noderev_t **noderev,
 
       if (key.len + 2 > line->len)
         continue;
-      
+
       value.data = sep + 2;
       value.len = line->len - (key.len + 2);
 
@@ -1891,7 +1891,7 @@ read_revisions(fs_fs_t **fs,
   /* determine cache sizes */
   if (memsize < 100)
     memsize = 100;
-  
+
   content_cache_size = memsize * 7 / 10 > 4000 ? 4000 : memsize * 7 / 10;
   window_cache_size = memsize * 2 / 10 * 1024 * 1024;
   dir_cache_size = (memsize / 10) * 16000;
@@ -1991,7 +1991,7 @@ add_revisions_pack_heads(revision_pack_t
     {
       info = APR_ARRAY_IDX(pack->info, i, revision_info_t*);
       info->target.offset = pack->target_offset;
-      
+
       fragment.data = info;
       fragment.kind = header_fragment;
       fragment.position = pack->target_offset;
@@ -2002,7 +2002,7 @@ add_revisions_pack_heads(revision_pack_t
 
   info = APR_ARRAY_IDX(pack->info, pack->info->nelts - 1, revision_info_t*);
   info->target.offset = pack->target_offset;
-  
+
   /* followed by the changes list */
 
   for (i = 0; i < pack->info->nelts; ++i)
@@ -2065,7 +2065,7 @@ add_noderev_recursively(fs_fs_t *fs,
  * has not been covered, yet.  Place the base reps along the deltification
  * chain as far as those reps have not been covered, yet.  If REPRESENTATION
  * is a directory, recursively place its elements.
- * 
+ *
  * Use POOL for allocations.
  */
 static svn_error_t *
@@ -2091,7 +2091,7 @@ add_representation_recursively(fs_fs_t *
                             fs, representation->revision));
   representation->target.offset = *current_pos;
   representation->covered = TRUE;
-  
+
   fragment.data = representation;
   fragment.kind = kind;
   fragment.position = *current_pos;
@@ -2106,7 +2106,7 @@ add_representation_recursively(fs_fs_t *
       apr_pool_t *text_pool = svn_pool_create(pool);
       svn_stringbuf_t *content;
 
-      get_combined_window(&content, fs, representation, text_pool);
+      SVN_ERR(get_combined_window(&content, fs, representation, text_pool));
       representation->target.size = content->len;
       *current_pos += representation->target.size + 13;
 
@@ -2287,7 +2287,7 @@ get_fragment_content(svn_string_t **cont
  * may significantly.  This function causes all directory target reps in
  * PACK of FS to be built and their new MD5 as well as rep sizes be updated.
  * We must do that before attempting to write noderevs.
- * 
+ *
  * Use POOL for allocations.
  */
 static svn_error_t *
@@ -2347,7 +2347,7 @@ get_content_length(apr_size_t *length,
       }
   else
     *length = content->len;
-    
+
   return SVN_NO_ERROR;
 }
 
@@ -2363,7 +2363,7 @@ move_fragment(fragment_t *fragment,
   noderev_t *node;
 
   /* move the fragment */
-  fragment->position = new_position; 
+  fragment->position = new_position;
 
   /* move the underlying object */
   switch (fragment->kind)
@@ -2484,7 +2484,7 @@ pack_revisions(fs_fs_t *fs,
         }
     }
   while (needed_to_expand);
-  
+
   svn_pool_destroy(itempool);
 
   return SVN_NO_ERROR;
@@ -2680,7 +2680,7 @@ get_updated_dir(svn_string_t **content,
 
   /* done */
   *content = svn_stringbuf__morph_into_string(result);
-  
+
   return SVN_NO_ERROR;
 }
 
@@ -2772,7 +2772,7 @@ update_text(svn_stringbuf_t *node_rev,
       /* for directories, we need to write all rep info anew */
       char *newline_pos = strchr(val_pos, '\n');
       svn_checksum_t checksum;
-      const char* temp = apr_psprintf(scratch_pool, "%ld %" APR_SIZE_T_FMT " %" 
+      const char* temp = apr_psprintf(scratch_pool, "%ld %" APR_SIZE_T_FMT " %"
                                       APR_SIZE_T_FMT" %" APR_SIZE_T_FMT " %s",
                                       representation->revision->revision,
                                       representation->target.offset - representation->revision->target.offset,
@@ -2793,7 +2793,7 @@ update_text(svn_stringbuf_t *node_rev,
        * Content size and checksums are unchanged. */
       const char* temp;
       char *end_pos = strchr(val_pos, ' ');
-      
+
       val_pos = end_pos + 1;
       end_pos = strchr(strchr(val_pos, ' ') + 1, ' ');
       temp = apr_psprintf(scratch_pool, "%" APR_SIZE_T_FMT " %" APR_SIZE_T_FMT,
@@ -2842,7 +2842,7 @@ get_fragment_content(svn_string_t **cont
       case changes_fragment:
         info = fragment->data;
         SVN_ERR(get_content(&revision_content, fs, info->revision, pool));
-        
+
         *content = svn_string_create_empty(pool);
         (*content)->data = revision_content->data + info->original.changes;
         (*content)->len = info->target.changes_len;
@@ -2989,7 +2989,7 @@ static svn_error_t *
 prepare_repo(const char *path, apr_pool_t *pool)
 {
   svn_node_kind_t kind;
-  
+
   const char *old_path = svn_dirent_join(path, "db/old", pool);
   const char *new_path = svn_dirent_join(path, "new", pool);
   const char *revs_path = svn_dirent_join(path, "db/revs", pool);
@@ -3118,13 +3118,13 @@ int main(int argc, const char *argv[])
       printf("Reading revisions\n");
       svn_err = read_revisions(&fs, repo_path, start_revision, memsize, pool);
     }
-  
+
   if (!svn_err)
     {
       printf("\nReordering revision content\n");
       svn_err = reorder_revisions(fs, pool);
     }
-    
+
   if (!svn_err)
     {
       printf("\nPacking and writing revisions\n");

Modified: subversion/branches/verify-keep-going/tools/dev/unix-build/Makefile.svn
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/dev/unix-build/Makefile.svn?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/dev/unix-build/Makefile.svn (original)
+++ subversion/branches/verify-keep-going/tools/dev/unix-build/Makefile.svn Wed Jun  5 09:22:43 2013
@@ -1246,7 +1246,7 @@ $(SVN_OBJDIR)/.installed: $(SVN_OBJDIR)/
 # by the same version of SWIG.
 $(SVN_OBJDIR)/.pre-generated-swig-cleaned:
 	-cd $(svn_builddir) \
-		&& make extraclean-swig
+		&& make clean-swig
 	touch $@
 
 $(SVN_OBJDIR)/.bindings-compiled: $(SVN_OBJDIR)/.installed $(SVN_OBJDIR)/.pre-generated-swig-cleaned

Modified: subversion/branches/verify-keep-going/tools/dev/which-error.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/dev/which-error.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/dev/which-error.py (original)
+++ subversion/branches/verify-keep-going/tools/dev/which-error.py Wed Jun  5 09:22:43 2013
@@ -73,6 +73,9 @@ def get_errors():
   errs.update(errno.errorcode)
   ## APR-defined errors, from apr_errno.h.
   for line in open(os.path.join(os.path.dirname(sys.argv[0]), 'aprerr.txt')):
+    # aprerr.txt parsing duplicated in gen_base.py:write_errno_table()
+    if line.startswith('#'):
+       continue
     key, _, val = line.split()
     errs[int(val)] = key
   ## Subversion errors, from svn_error_codes.h.

Modified: subversion/branches/verify-keep-going/tools/dist/_gnupg.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/dist/_gnupg.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/dist/_gnupg.py (original)
+++ subversion/branches/verify-keep-going/tools/dist/_gnupg.py Wed Jun  5 09:22:43 2013
@@ -1,9 +1,9 @@
 # Copyright (c) 2008-2011 by Vinay Sajip.
 # All rights reserved.
-# 
+#
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions are met:
-# 
+#
 #     * Redistributions of source code must retain the above copyright notice,
 #       this list of conditions and the following disclaimer.
 #     * Redistributions in binary form must reproduce the above copyright notice,
@@ -12,7 +12,7 @@
 #     * The name(s) of the copyright holder(s) may not be used to endorse or
 #       promote products derived from this software without specific prior
 #       written permission.
-# 
+#
 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) "AS IS" AND ANY EXPRESS OR
 # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO

Modified: subversion/branches/verify-keep-going/tools/dist/backport.pl
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/dist/backport.pl?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/dist/backport.pl (original)
+++ subversion/branches/verify-keep-going/tools/dist/backport.pl Wed Jun  5 09:22:43 2013
@@ -30,11 +30,17 @@ my $STATUS = './STATUS';
 my $BRANCHES = '^/subversion/branches';
 
 my $YES = $ENV{YES}; # batch mode: eliminate prompts, add sleeps
-my $WET_RUN = qw[false true][1]; # don't commit
+my $MAY_COMMIT = qw[false true][0];
 my $DEBUG = qw[false true][0]; # 'set -x', etc
+$DEBUG = 'true' if exists $ENV{DEBUG};
+$MAY_COMMIT = 'true' if ($ENV{MAY_COMMIT} // "false") =~ /^(1|yes|true)$/i;
 
 # derived values
 my $SVNq;
+my $SVNvsn = do {
+  my ($major, $minor, $patch) = `$SVN --version -q` =~ /^(\d+)\.(\d+)\.(\d+)/;
+  1e6*$major + 1e3*$minor + $patch;
+};
 
 $SVN .= " --non-interactive" if $YES or not defined ctermid;
 $SVNq = "$SVN -q ";
@@ -59,13 +65,17 @@ EOF
 
 sub prompt {
   local $\; # disable 'perl -l' effects
-  print "Go ahead? ";
+  print "$_[0] "; shift;
+  my %args = @_;
 
+  die "$0: called prompt() in non-interactive mode!" if $YES;
   # TODO: this part was written by trial-and-error
   ReadMode 'cbreak';
   my $answer = (ReadKey 0);
   print $answer, "\n";
-  return ($answer =~ /^y/i) ? 1 : 0;
+  return $args{verbose}
+         ? $answer
+         : ($answer =~ /^y/i) ? 1 : 0;
 }
 
 sub merge {
@@ -78,9 +88,14 @@ sub merge {
 
   if ($entry{branch}) {
     # NOTE: This doesn't escape the branch into the pattern.
-    $pattern = sprintf '\V\(%s branch(es)?\|branches\/%s\|Branch(es)?:\n *%s\)', $entry{branch}, $entry{branch}, $entry{branch};
-    $mergeargs = "--reintegrate $BRANCHES/$entry{branch}";
-    print $logmsg_fh "Reintegrate the $entry{header}:";
+    $pattern = sprintf '\V\(%s branch(es)?\|branches\/%s\|Branch\(es\)\?: \*\n\? \*%s\)', $entry{branch}, $entry{branch}, $entry{branch};
+    if ($SVNvsn >= 1_008_000) {
+      $mergeargs = "$BRANCHES/$entry{branch}";
+      print $logmsg_fh "Merge the $entry{header}:";
+    } else {
+      $mergeargs = "--reintegrate $BRANCHES/$entry{branch}";
+      print $logmsg_fh "Reintegrate the $entry{header}:";
+    }
     print $logmsg_fh "";
   } elsif (@{$entry{revisions}}) {
     $pattern = '^ [*] \V' . 'r' . $entry{revisions}->[0];
@@ -98,6 +113,7 @@ sub merge {
   print $logmsg_fh $_ for @{$entry{entry}};
   close $logmsg_fh or die "Can't close $logmsg_filename: $!";
 
+  my $reintegrated_word = ($SVNvsn >= 1_008_000) ? "merged" : "reintegrated";
   my $script = <<"EOF";
 #!/bin/sh
 set -e
@@ -105,34 +121,51 @@ if $DEBUG; then
   set -x
 fi
 $SVN diff > $backupfile
+cp STATUS STATUS.$$
 $SVNq revert -R .
+if $MAY_COMMIT ; then
+  mv STATUS.$$ STATUS
+fi
 $SVNq up
 $SVNq merge $mergeargs
-$VIM -e -s -n -N -i NONE -u NONE -c '/$pattern/normal! dap' -c wq $STATUS
-if $WET_RUN; then
+if [ "`$SVN status -q | wc -l`" -eq 1 ]; then
+  if [ -n "`$SVN diff | perl -lne 'print if s/^(Added|Deleted|Modified): //' | grep -vx svn:mergeinfo`" ]; then
+    # This check detects STATUS entries that name non-^/subversion/ revnums.
+    # ### Q: What if we actually commit a mergeinfo fix to trunk and then want
+    # ###    to backport it?
+    # ### A: We don't merge it using the script.
+    echo "Bogus merge: includes only svn:mergeinfo changes!" >&2
+    exit 2
+  fi
+fi
+if $MAY_COMMIT; then
+  $VIM -e -s -n -N -i NONE -u NONE -c '/$pattern/normal! dap' -c wq $STATUS
   $SVNq commit -F $logmsg_filename
 else
-  echo "Committing:"
+  echo "Would have committed:"
+  echo '[[['
   $SVN status -q
+  echo 'M       STATUS (not shown in the diff)'
   cat $logmsg_filename
+  echo ']]]'
 fi
 EOF
 
   $script .= <<"EOF" if $entry{branch};
 reinteg_rev=\`$SVN info $STATUS | sed -ne 's/Last Changed Rev: //p'\`
-if $WET_RUN; then
+if $MAY_COMMIT; then
   # Sleep to avoid out-of-order commit notifications
   if [ -n "\$YES" ]; then sleep 15; fi
-  $SVNq rm $BRANCHES/$entry{branch} -m "Remove the '$entry{branch}' branch, reintegrated in r\$reinteg_rev."
+  $SVNq rm $BRANCHES/$entry{branch} -m "Remove the '$entry{branch}' branch, $reintegrated_word in r\$reinteg_rev."
   if [ -n "\$YES" ]; then sleep 1; fi
 else
-  echo "Removing reintegrated '$entry{branch}' branch"
+  echo "Removing $reintegrated_word '$entry{branch}' branch"
 fi
 EOF
 
-  open SHELL, '|-', qw#/bin/sh# or die $!;
+  open SHELL, '|-', qw#/bin/sh# or die "$! (in '$entry{header}')";
   print SHELL $script;
-  close SHELL or warn "$0: sh($?): $!";
+  close SHELL or warn "$0: sh($?): $! (in '$entry{header}')";
 
   unlink $backupfile if -z $backupfile;
   unlink $logmsg_filename unless $? or $!;
@@ -157,7 +190,8 @@ sub parse_entry {
   s/^   // for @_;
 
   # revisions
-  $branch = sanitize_branch $1 if $_[0] =~ /^(\S*) branch$/;
+  $branch = sanitize_branch $1
+    if $_[0] =~ /^(\S*) branch$/ or $_[0] =~ m#branches/(\S+)#;
   while ($_[0] =~ /^r/) {
     while ($_[0] =~ s/^r(\d+)(?:$|[,; ]+)//) {
       push @revisions, $1;
@@ -195,11 +229,12 @@ sub parse_entry {
 }
 
 sub handle_entry {
+  my $in_approved = shift;
   my %entry = parse_entry @_;
   my @vetoes = grep { /^  -1:/ } @{$entry{votes}};
 
   if ($YES) {
-    merge %entry unless @vetoes;
+    merge %entry if $in_approved and not @vetoes;
   } else {
     print "";
     print "\n>>> The $entry{header}:";
@@ -212,7 +247,25 @@ sub handle_entry {
     print "";
     print "Vetoes found!" if @vetoes;
 
-    merge %entry if prompt;
+    if (prompt 'Go ahead?') {
+      merge %entry;
+      MAYBE_DIFF: while (1) { 
+        given (prompt "Shall I open a subshell? [ydN]", verbose => 1) {
+          when (/^y/i) {
+            system($ENV{SHELL} // "/bin/sh") == 0
+              or warn "Creating an interactive subshell failed ($?): $!"
+          }
+          when (/^d/) {
+            system($SVN, 'diff') == 0
+              or warn "diff failed ($?): $!";
+            next;
+          }
+        }
+      last;
+      }
+      # Don't revert.  The next merge() call will do that anyway, or maybe the
+      # user did in his interactive shell.
+    }
   }
 
   # TODO: merge() changes ./STATUS, which we're reading below, but
@@ -232,17 +285,17 @@ sub main {
 
   # ### TODO: need to run 'revert' here
   # ### TODO: both here and in merge(), unlink files that previous merges added
-  die "Local mods to STATUS file $STATUS" if `$SVN status -q $STATUS`;
+  # When running from cron, there shouldn't be local mods.  (For interactive
+  # usage, we preserve local mods to STATUS.)
+  die "Local mods to STATUS file $STATUS" if $YES and `$SVN status -q $STATUS`;
 
   # Skip most of the file
   while (<STATUS>) {
-    last if /^Approved changes/;
-  }
-  while (<STATUS>) {
-    last unless /^=+$/;
+    last if /^Status of \d+\.\d+/;
   }
   $/ = ""; # paragraph mode
 
+  my $in_approved = 0;
   while (<STATUS>) {
     my @lines = split /\n/;
 
@@ -250,6 +303,11 @@ sub main {
       # Section header
       when (/^[A-Z].*:$/i) {
         print "\n\n=== $lines[0]" unless $YES;
+        $in_approved = $lines[0] =~ /^Approved changes/;
+      }
+      # Comment
+      when (/^[#\x5b]/i) {
+        next;
       }
       # Separator after section header
       when (/^=+$/i) {
@@ -259,13 +317,15 @@ sub main {
       when (/^ \*/) {
         warn "Too many bullets in $lines[0]" and next
           if grep /^ \*/, @lines[1..$#lines];
-        handle_entry @lines;
+        handle_entry $in_approved, @lines;
       }
       default {
-        warn "Unknown entry '$lines[0]' at $ARGV:$.\n";
+        warn "Unknown entry '$lines[0]' at line $.\n";
       }
     }
   }
+
+  system $SVN, qw/revert -R ./ if !$YES and prompt 'Revert? ';
 }
 
 &main

Modified: subversion/branches/verify-keep-going/tools/dist/make-deps-tarball.sh
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/dist/make-deps-tarball.sh?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/dist/make-deps-tarball.sh (original)
+++ subversion/branches/verify-keep-going/tools/dist/make-deps-tarball.sh Wed Jun  5 09:22:43 2013
@@ -25,7 +25,7 @@ APR=apr-1.4.6
 APR_UTIL=apr-util-1.4.1
 NEON=neon-0.29.6
 SERF=serf-0.3.1
-ZLIB=zlib-1.2.7
+ZLIB=zlib-1.2.8
 SQLITE_VERSION=3071400
 SQLITE=sqlite-amalgamation-$SQLITE_VERSION
 
@@ -58,13 +58,13 @@ create_deps() {
     fi
     wget -qnc http://webdav.org/neon/$NEON.tar.gz
     wget -qnc http://serf.googlecode.com/files/$SERF.tar.bz2
-    wget -qnc http://www.zlib.net/$ZLIB.tar.bz2
+    wget -qnc http://www.zlib.net/$ZLIB.tar.gz
     wget -qnc http://www.sqlite.org/$SQLITE.zip
 
     mkdir $BASEDIR/unix-dependencies
     cd $BASEDIR/unix-dependencies
     tar zxf $TEMPDIR/$NEON.tar.gz
-    tar jxf $TEMPDIR/$ZLIB.tar.bz2
+    tar zxf $TEMPDIR/$ZLIB.tar.gz
     tar jxf $TEMPDIR/$SERF.tar.bz2
     unzip -q $TEMPDIR/$SQLITE.zip
     mv $NEON neon
@@ -80,7 +80,7 @@ create_deps() {
     mkdir $BASEDIR/win32-dependencies
     cd $BASEDIR/win32-dependencies
     tar zxf $TEMPDIR/$NEON.tar.gz
-    tar jxf $TEMPDIR/$ZLIB.tar.bz2
+    tar zxf $TEMPDIR/$ZLIB.tar.gz
     tar jxf $TEMPDIR/$SERF.tar.bz2
     unzip -q $TEMPDIR/$SQLITE.zip
     mv $NEON neon

Propchange: subversion/branches/verify-keep-going/tools/dist/make-deps-tarball.sh
------------------------------------------------------------------------------
  Merged /subversion/trunk/tools/dist/make-deps-tarball.sh:r1465587-1488969

Modified: subversion/branches/verify-keep-going/tools/dist/release.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/dist/release.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/dist/release.py (original)
+++ subversion/branches/verify-keep-going/tools/dist/release.py Wed Jun  5 09:22:43 2013
@@ -66,12 +66,33 @@ except ImportError:
     import ezt
 
 
+try:
+    subprocess.check_output
+except AttributeError:
+    def check_output(cmd):
+        proc = subprocess.Popen(['svn', 'list', dist_dev_url],
+                                stdout=subprocess.PIPE,
+                                stderr=subprocess.PIPE)
+        (stdout, stderr) = proc.communicate()
+        rc = proc.wait()
+        if rc or stderr:
+            logging.error('%r failed with stderr %r', cmd, stderr)
+            raise subprocess.CalledProcessError(rc, cmd)
+        return stdout
+    subprocess.check_output = check_output
+    del check_output
+
 # Our required / recommended release tool versions by release branch
 tool_versions = {
   'trunk' : {
-            'autoconf' : '2.68',
-            'libtool'  : '2.4',
-            'swig'     : '2.0.4',
+            'autoconf' : '2.69',
+            'libtool'  : '2.4.2',
+            'swig'     : '2.0.9',
+  },
+  '1.8' : {
+            'autoconf' : '2.69',
+            'libtool'  : '2.4.2',
+            'swig'     : '2.0.9',
   },
   '1.7' : {
             'autoconf' : '2.68',
@@ -99,7 +120,7 @@ extns = ['zip', 'tar.gz', 'tar.bz2']
 # Utility functions
 
 class Version(object):
-    regex = re.compile('(\d+).(\d+).(\d+)(?:-(?:(rc|alpha|beta)(\d+)))?')
+    regex = re.compile(r'(\d+).(\d+).(\d+)(?:-(?:(rc|alpha|beta)(\d+)))?')
 
     def __init__(self, ver_str):
         # Special case the 'trunk-nightly' version
@@ -155,7 +176,7 @@ class Version(object):
         else:
             return self.pre_num < that.pre_num
 
-    def __str(self):
+    def __str__(self):
         if self.pre:
             if self.pre == 'nightly':
                 return 'nightly'
@@ -168,11 +189,7 @@ class Version(object):
 
     def __repr__(self):
 
-        return "Version('%s')" % self.__str()
-
-    def __str__(self):
-        return self.__str()
-
+        return "Version(%s)" % repr(str(self))
 
 def get_prefix(base_dir):
     return os.path.join(base_dir, 'prefix')
@@ -183,6 +200,13 @@ def get_tempdir(base_dir):
 def get_deploydir(base_dir):
     return os.path.join(base_dir, 'deploy')
 
+def get_target(args):
+    "Return the location of the artifacts"
+    if args.target:
+        return args.target
+    else:
+        return get_deploydir(args.base_dir)
+
 def get_tmpldir():
     return os.path.join(os.path.abspath(sys.path[0]), 'templates')
 
@@ -194,8 +218,7 @@ def get_tmplfile(filename):
         return urllib2.urlopen(repos + '/trunk/tools/dist/templates/' + filename)
 
 def get_nullfile():
-    # This is certainly not cross platform
-    return open('/dev/null', 'w')
+    return open(os.path.devnull, 'w')
 
 def run_script(verbose, script):
     if verbose:
@@ -371,12 +394,7 @@ def compare_changes(repos, branch, revis
     mergeinfo_cmd = ['svn', 'mergeinfo', '--show-revs=eligible',
                      repos + '/trunk/CHANGES',
                      repos + '/' + branch + '/' + 'CHANGES']
-    proc = subprocess.Popen(mergeinfo_cmd, stdout=subprocess.PIPE,
-                            stderr=subprocess.PIPE)
-    (stdout, stderr) = proc.communicate()
-    rc = proc.wait()
-    if stderr:
-      raise RuntimeError('svn mergeinfo failed: %s' % stderr)
+    stdout = subprocess.check_output(mergeinfo_cmd)
     if stdout:
       # Treat this as a warning since we are now putting entries for future
       # minor releases in CHANGES on trunk.
@@ -463,15 +481,11 @@ def sign_candidates(args):
     def sign_file(filename):
         asc_file = open(filename + '.asc', 'a')
         logging.info("Signing %s" % filename)
-        proc = subprocess.Popen(['gpg', '-ba', '-o', '-', filename],
-                              stdout=asc_file)
-        proc.wait()
+        proc = subprocess.check_call(['gpg', '-ba', '-o', '-', filename],
+                                     stdout=asc_file)
         asc_file.close()
 
-    if args.target:
-        target = args.target
-    else:
-        target = get_deploydir(args.base_dir)
+    target = get_target(args)
 
     for e in extns:
         filename = os.path.join(target, 'subversion-%s.%s' % (args.version, e))
@@ -488,17 +502,17 @@ def sign_candidates(args):
 def post_candidates(args):
     'Post candidate artifacts to the dist development directory.'
 
+    target = get_target(args)
+
     logging.info('Importing tarballs to %s' % dist_dev_url)
     svn_cmd = ['svn', 'import', '-m',
                'Add %s candidate release artifacts' % args.version.base,
                '--auto-props', '--config-option',
                'config:auto-props:*.asc=svn:eol-style=native;svn:mime-type=text/plain',
-               get_deploydir(args.base_dir), dist_dev_url]
+               target, dist_dev_url]
     if (args.username):
         svn_cmd += ['--username', args.username]
-    proc = subprocess.Popen(svn_cmd)
-    (stdout, stderr) = proc.communicate()
-    proc.wait()
+    subprocess.check_call(svn_cmd)
 
 #----------------------------------------------------------------------
 # Create tag
@@ -513,6 +527,7 @@ def create_tag(args):
     else:
         branch = secure_repos + '/branches/%d.%d.x' % (args.version.major,
                                                        args.version.minor)
+    target = get_target(args)
 
     tag = secure_repos + '/tags/' + str(args.version)
 
@@ -521,13 +536,63 @@ def create_tag(args):
     if (args.username):
         svnmucc_cmd += ['--username', args.username]
     svnmucc_cmd += ['cp', str(args.revnum), branch, tag]
-    svnmucc_cmd += ['put', os.path.join(get_deploydir(args.base_dir),
-                                        'svn_version.h.dist'),
+    svnmucc_cmd += ['put', os.path.join(target, 'svn_version.h.dist' + '-' +
+                                        str(args.version)),
                     tag + '/subversion/include/svn_version.h']
 
     # don't redirect stdout/stderr since svnmucc might ask for a password
-    proc = subprocess.Popen(svnmucc_cmd)
-    proc.wait()
+    subprocess.check_call(svnmucc_cmd)
+
+    if not args.version.is_prerelease():
+        logging.info('Bumping revisions on the branch')
+        def replace_in_place(fd, startofline, flat, spare):
+            """In file object FD, replace FLAT with SPARE in the first line
+            starting with STARTOFLINE."""
+
+            fd.seek(0, os.SEEK_SET)
+            lines = fd.readlines()
+            for i, line in enumerate(lines):
+                if line.startswith(startofline):
+                    lines[i] = line.replace(flat, spare)
+                    break
+            else:
+                raise RuntimeError('Definition of %r not found' % startofline)
+
+            fd.seek(0, os.SEEK_SET)
+            fd.writelines(lines)
+            fd.truncate() # for current callers, new value is never shorter.
+
+        new_version = Version('%d.%d.%d' %
+                              (args.version.major, args.version.minor,
+                               args.version.patch + 1))
+
+        def file_object_for(relpath):
+            fd = tempfile.NamedTemporaryFile()
+            url = branch + '/' + relpath
+            fd.url = url
+            subprocess.check_call(['svn', 'cat', '%s@%d' % (url, args.revnum)],
+                                  stdout=fd)
+            return fd
+
+        svn_version_h = file_object_for('subversion/include/svn_version.h')
+        replace_in_place(svn_version_h, '#define SVN_VER_PATCH ',
+                         str(args.version.patch), str(new_version.patch))
+
+        STATUS = file_object_for('STATUS')
+        replace_in_place(STATUS, 'Status of ',
+                         str(args.version), str(new_version))
+
+        svn_version_h.seek(0, os.SEEK_SET)
+        STATUS.seek(0, os.SEEK_SET)
+        subprocess.check_call(['svnmucc', '-r', str(args.revnum),
+                               '-m', 'Post-release housekeeping: '
+                                     'bump the %s branch to %s.'
+                               % (branch.split('/')[-1], str(new_version)),
+                               'put', svn_version_h.name, svn_version_h.url,
+                               'put', STATUS.name, STATUS.url,
+                              ])
+        del svn_version_h
+        del STATUS
 
 #----------------------------------------------------------------------
 # Clean dist
@@ -535,13 +600,7 @@ def create_tag(args):
 def clean_dist(args):
     'Clean the distribution directory of all but the most recent artifacts.'
 
-    proc = subprocess.Popen(['svn', 'list', dist_release_url],
-                            stdout=subprocess.PIPE,
-                            stderr=subprocess.PIPE)
-    (stdout, stderr) = proc.communicate()
-    proc.wait()
-    if stderr:
-      raise RuntimeError(stderr)
+    stdout = subprocess.check_output(['svn', 'list', dist_release_url])
 
     filenames = stdout.split('\n')
     tar_gz_archives = []
@@ -570,8 +629,7 @@ def clean_dist(args):
                 svnmucc_cmd += ['rm', dist_release_url + '/' + filename]
 
     # don't redirect stdout/stderr since svnmucc might ask for a password
-    proc = subprocess.Popen(svnmucc_cmd)
-    proc.wait()
+    subprocess.check_call(svnmucc_cmd)
 
 #----------------------------------------------------------------------
 # Move to dist
@@ -579,13 +637,7 @@ def clean_dist(args):
 def move_to_dist(args):
     'Move candidate artifacts to the distribution directory.'
 
-    proc = subprocess.Popen(['svn', 'list', dist_dev_url],
-                            stdout=subprocess.PIPE,
-                            stderr=subprocess.PIPE)
-    (stdout, stderr) = proc.communicate()
-    proc.wait()
-    if stderr:
-      raise RuntimeError(stderr)
+    stdout = subprocess.check_output(['svn', 'list', dist_dev_url])
 
     filenames = []
     for entry in stdout.split('\n'):
@@ -603,8 +655,7 @@ def move_to_dist(args):
 
     # don't redirect stdout/stderr since svnmucc might ask for a password
     logging.info('Moving release artifacts to %s' % dist_release_url)
-    proc = subprocess.Popen(svnmucc_cmd)
-    proc.wait()
+    subprocess.check_call(svnmucc_cmd)
 
 #----------------------------------------------------------------------
 # Write announcements
@@ -631,10 +682,7 @@ def write_news(args):
 def get_sha1info(args, replace=False):
     'Return a list of sha1 info for the release'
 
-    if args.target:
-        target = args.target
-    else:
-        target = get_deploydir(args.base_dir)
+    target = get_target(args)
 
     sha1s = glob.glob(os.path.join(target, 'subversion*-%s*.sha1' % args.version))
 
@@ -708,10 +756,7 @@ def get_siginfo(args, quiet=False):
         import _gnupg as gnupg
     gpg = gnupg.GPG()
 
-    if args.target:
-        target = args.target
-    else:
-        target = get_deploydir(args.base_dir)
+    target = get_target(args)
 
     good_sigs = {}
     fingerprints = {}
@@ -842,6 +887,9 @@ def main():
                     help='''The release label, such as '1.7.0-alpha1'.''')
     subparser.add_argument('--username',
                     help='''Username for ''' + dist_repos + '''.''')
+    subparser.add_argument('--target',
+                    help='''The full path to the directory containing
+                            release artifacts.''')
 
     # Setup the parser for the create-tag subcommand
     subparser = subparsers.add_parser('create-tag',
@@ -855,6 +903,9 @@ def main():
                     help='''The branch to base the release on.''')
     subparser.add_argument('--username',
                     help='''Username for ''' + secure_repos + '''.''')
+    subparser.add_argument('--target',
+                    help='''The full path to the directory containing
+                            release artifacts.''')
 
     # The clean-dist subcommand
     subparser = subparsers.add_parser('clean-dist',

Modified: subversion/branches/verify-keep-going/tools/hook-scripts/control-chars.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/hook-scripts/control-chars.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/hook-scripts/control-chars.py (original)
+++ subversion/branches/verify-keep-going/tools/hook-scripts/control-chars.py Wed Jun  5 09:22:43 2013
@@ -53,7 +53,7 @@ def walk_tree(node, path, callback):
   "Walk NODE"
   if not node:
     return 0
- 
+
   ret_val = callback(node, path)
   if ret_val > 0:
     return ret_val
@@ -67,10 +67,10 @@ def walk_tree(node, path, callback):
     ret_val = walk_tree(node, full_path, callback)
     # If we ran into an error just return up the stack all the way
     if ret_val > 0:
-      return ret_val 
+      return ret_val
     node = node.sibling
 
-  return 0 
+  return 0
 
 def usage():
   sys.stderr.write("Invalid arguments, expects to be called like a pre-commit hook.")
@@ -81,10 +81,10 @@ def main(ignored_pool, argv):
     return 2
 
   repos_path = svn.core.svn_path_canonicalize(argv[1])
-  txn_name = argv[2] 
-  
+  txn_name = argv[2]
+
   if not repos_path or not txn_name:
-    usage() 
+    usage()
     return 2
 
   repos = svn.repos.svn_repos_open(repos_path)
@@ -92,7 +92,7 @@ def main(ignored_pool, argv):
   txn = svn.fs.svn_fs_open_txn(fs, txn_name)
   txn_root = svn.fs.svn_fs_txn_root(txn)
   base_rev = svn.fs.svn_fs_txn_base_revision(txn)
-  if base_rev is None or base_rev <= svn.core.SVN_INVALID_REVNUM: 
+  if base_rev is None or base_rev <= svn.core.SVN_INVALID_REVNUM:
     sys.stderr.write("Transaction '%s' is not based on a revision" % txn_name)
     return 2
   base_root = svn.fs.svn_fs_revision_root(fs, base_rev)

Modified: subversion/branches/verify-keep-going/tools/hook-scripts/mailer/mailer.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/hook-scripts/mailer/mailer.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/hook-scripts/mailer/mailer.py (original)
+++ subversion/branches/verify-keep-going/tools/hook-scripts/mailer/mailer.py Wed Jun  5 09:22:43 2013
@@ -236,16 +236,30 @@ class MailedOutput(OutputBase):
                                and self.reply_to[2] == ']':
       self.reply_to = self.reply_to[3:]
 
+  def _rfc2047_encode(self, hdr):
+    # Return the result of splitting HDR into tokens (on space
+    # characters), encoding (per RFC2047) each token as necessary, and
+    # slapping 'em back to together again.
+    from email.Header import Header
+    
+    def _maybe_encode_header(hdr_token):
+      try:
+        hdr_token.encode('ascii')
+        return hdr_token
+      except UnicodeError:
+        return Header(hdr_token, 'utf-8').encode()
+
+    return ' '.join(map(_maybe_encode_header, hdr.split()))
+
   def mail_headers(self, group, params):
     from email import Utils
-    subject = self.make_subject(group, params)
-    try:
-      subject.encode('ascii')
-    except UnicodeError:
-      from email.Header import Header
-      subject = Header(subject, 'utf-8').encode()
-    hdrs = 'From: %s\n'    \
-           'To: %s\n'      \
+
+    subject  = self._rfc2047_encode(self.make_subject(group, params))
+    from_hdr = self._rfc2047_encode(self.from_addr)
+    to_hdr   = self._rfc2047_encode(', '.join(self.to_addrs))
+
+    hdrs = 'From: %s\n' \
+           'To: %s\n' \
            'Subject: %s\n' \
            'Date: %s\n' \
            'Message-ID: %s\n' \
@@ -256,7 +270,7 @@ class MailedOutput(OutputBase):
            'X-Svn-Commit-Author: %s\n' \
            'X-Svn-Commit-Revision: %d\n' \
            'X-Svn-Commit-Repository: %s\n' \
-           % (self.from_addr, ', '.join(self.to_addrs), subject, 
+           % (from_hdr, to_hdr, subject,
               Utils.formatdate(), Utils.make_msgid(), group,
               self.repos.author or 'no_author', self.repos.rev,
               os.path.basename(self.repos.repos_dir))

Modified: subversion/branches/verify-keep-going/tools/hook-scripts/validate-files.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/hook-scripts/validate-files.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/hook-scripts/validate-files.py (original)
+++ subversion/branches/verify-keep-going/tools/hook-scripts/validate-files.py Wed Jun  5 09:22:43 2013
@@ -61,7 +61,7 @@ class Config(configparser.SafeConfigPars
 
     def get_rule_section_name(self, rule):
         """Given a rule name provide the section name it is defined in."""
-        return 'rule:%s' % (rule) 
+        return 'rule:%s' % (rule)
 
 class Commands:
     """Class to handle logic of running commands"""
@@ -74,9 +74,9 @@ class Commands:
         cmd = "'%s' changed -t '%s' '%s'" % (svnlook, txn, repo)
         p = subprocess.Popen(cmd, shell=True,
                              stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-        
-        changed = [] 
-        while True: 
+
+        changed = []
+        while True:
             line = p.stdout.readline()
             if not line:
                 break
@@ -87,7 +87,7 @@ class Commands:
             if line[-1] != "/" and (text_mod == "A" or text_mod == "U"):
                 changed.append(line[4:])
 
-        # wait on the command to finish so we can get the 
+        # wait on the command to finish so we can get the
         # returncode/stderr output
         data = p.communicate()
         if p.returncode != 0:
@@ -127,7 +127,7 @@ def main(repo, txn):
     # this shouldn't ever happen
     if len(changed) == 0:
         sys.exit(0)
-    
+
     for rule in rules:
         section = config.get_rule_section_name(rule)
         pattern = config.get(section, 'pattern')
@@ -145,7 +145,7 @@ def main(repo, txn):
                 sys.stderr.write(err_mesg)
                 exitcode = 1
 
-    return exitcode 
+    return exitcode
 
 if __name__ == "__main__":
     if len(sys.argv) != 3:

Modified: subversion/branches/verify-keep-going/tools/server-side/fsfs-stats.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/server-side/fsfs-stats.c?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/server-side/fsfs-stats.c (original)
+++ subversion/branches/verify-keep-going/tools/server-side/fsfs-stats.c Wed Jun  5 09:22:43 2013
@@ -101,11 +101,11 @@ typedef struct representation_t
 
   /* classification of the representation. values of rep_kind_t */
   char kind;
-  
+
   /* the source content has a PLAIN header, so we may simply copy the
    * source content into the target */
   char is_plain;
-  
+
 } representation_t;
 
 /* Represents a single revision.
@@ -142,7 +142,7 @@ typedef struct revision_info_t
 
   /* total size of file noderevs (i.e. the structs - not the rep) */
   apr_size_t file_noderev_size;
-  
+
   /* all representation_t of this revision (in no particular order),
    * i.e. those that point back to this struct */
   apr_array_header_t *representations;
@@ -202,7 +202,7 @@ typedef struct histogram_line_t
   apr_int64_t sum;
 } histogram_line_t;
 
-/* A histogram of 64 bit integer values. 
+/* A histogram of 64 bit integer values.
  */
 typedef struct histogram_t
 {
@@ -214,17 +214,17 @@ typedef struct histogram_t
   histogram_line_t lines[64];
 } histogram_t;
 
-/* Information we collect per file ending. 
+/* Information we collect per file ending.
  */
 typedef struct extension_info_t
 {
   /* file extension, including leading "."
    * "(none)" in the container for files w/o extension. */
   const char *extension;
-  
+
   /* histogram of representation sizes */
   histogram_t rep_histogram;
-  
+
   /* histogram of sizes of changed files */
   histogram_t node_histogram;
 } extension_info_t;
@@ -387,7 +387,7 @@ get_content(svn_stringbuf_t **content,
                                    large_buffer_size),
                         large_buffer_size);
 #endif
-    
+
   SVN_ERR(svn_io_file_seek(file, APR_SET, &offset, pool));
   SVN_ERR(svn_io_file_read_full2(file, (*content)->data, len,
                                  NULL, NULL, pool));
@@ -444,7 +444,7 @@ initialize_largest_changes(fs_fs_t *fs,
                            apr_pool_t *pool)
 {
   apr_size_t i;
-  
+
   fs->largest_changes = apr_pcalloc(pool, sizeof(*fs->largest_changes));
   fs->largest_changes->count = count;
   fs->largest_changes->min_size = 1;
@@ -640,12 +640,12 @@ read_revision_header(apr_size_t *changes
   char *space;
   apr_uint64_t val;
   apr_size_t len;
-  
+
   /* Read in this last block, from which we will identify the last line. */
   len = sizeof(buf);
   if (len > file_content->len)
     len = file_content->len;
-  
+
   memcpy(buf, file_content->data + file_content->len - len, len);
 
   /* The last byte should be a newline. */
@@ -775,7 +775,7 @@ read_number(svn_revnum_t *result, const 
 {
   svn_stringbuf_t *content;
   apr_uint64_t number;
-  
+
   SVN_ERR(svn_stringbuf_from_file2(&content, path, pool));
 
   content->data[content->len-1] = 0;
@@ -869,7 +869,7 @@ find_representation(int *idx,
   /* not found -> no result */
   if (info == NULL)
     return NULL;
-  
+
   assert(revision == info->revision);
 
   /* look for the representation */
@@ -952,7 +952,7 @@ read_rep_base(representation_t **represe
 /* Parse the representation reference (text: or props:) in VALUE, look
  * it up in FS and return it in *REPRESENTATION.  To be able to parse the
  * base rep, we pass the FILE_CONTENT as well.
- * 
+ *
  * If necessary, allocate the result in POOL; use SCRATCH_POOL for temp.
  * allocations.
  */
@@ -989,7 +989,7 @@ parse_representation(representation_t **
        */
       apr_size_t header_size;
       svn_boolean_t is_plain;
-      
+
       result = apr_pcalloc(pool, sizeof(*result));
       result->revision = revision;
       result->expanded_size = (apr_size_t)(expanded_size ? expanded_size : size);
@@ -1004,7 +1004,7 @@ parse_representation(representation_t **
       result->is_plain = is_plain;
       svn_sort__array_insert(&result, revision_info->representations, idx);
     }
-    
+
   *representation = result;
 
   return SVN_NO_ERROR;
@@ -1136,7 +1136,7 @@ get_combined_window(svn_stringbuf_t **co
   SVN_ERR(get_cached_window(content, fs, representation, pool));
   if (*content)
     return SVN_NO_ERROR;
-  
+
   /* read the delta windows for this representation */
   sub_pool = svn_pool_create(pool);
   iter_pool = svn_pool_create(pool);
@@ -1152,7 +1152,7 @@ get_combined_window(svn_stringbuf_t **co
   /* apply deltas */
   result = svn_stringbuf_create_empty(pool);
   source = base_content->data;
-  
+
   for (i = 0; i < windows->nelts; ++i)
     {
       svn_txdelta_window_t *window
@@ -1173,7 +1173,7 @@ get_combined_window(svn_stringbuf_t **co
   /* cache result and return it */
   SVN_ERR(set_cached_window(fs, representation, result, sub_pool));
   *content = result;
-  
+
   svn_pool_destroy(iter_pool);
   svn_pool_destroy(sub_pool);
 
@@ -1225,7 +1225,7 @@ parse_dir(fs_fs_t *fs,
   /* calculate some invariants */
   revision_key = apr_psprintf(text_pool, "r%ld/", representation->revision);
   key_len = strlen(revision_key);
-  
+
   /* Parse and process all directory entries. */
   while (*current != 'E')
     {
@@ -1308,7 +1308,7 @@ read_noderev(fs_fs_t *fs,
       /* empty line -> end of noderev data */
       if (line->len == 0)
         break;
-      
+
       sep = strchr(line->data, ':');
       if (sep == NULL)
         continue;
@@ -1319,7 +1319,7 @@ read_noderev(fs_fs_t *fs,
 
       if (key.len + 2 > line->len)
         continue;
-      
+
       value.data = sep + 2;
       value.len = line->len - (key.len + 2);
 
@@ -1331,7 +1331,7 @@ read_noderev(fs_fs_t *fs,
           SVN_ERR(parse_representation(&text, fs, file_content,
                                        &value, revision_info,
                                        pool, scratch_pool));
-          
+
           /* if we are the first to use this rep, mark it as "text rep" */
           if (++text->ref_count == 1)
             text->kind = is_dir ? dir_rep : file_rep;
@@ -1357,7 +1357,7 @@ read_noderev(fs_fs_t *fs,
   if (props && props->ref_count == 1)
     add_change(fs, (apr_int64_t)props->size, (apr_int64_t)props->expanded_size,
                props->revision, path, props->kind);
-  
+
   /* if this is a directory and has not been processed, yet, read and
    * process it recursively */
   if (is_dir && text && text->ref_count == 1)
@@ -1437,7 +1437,7 @@ read_pack_file(fs_fs_t *fs,
     {
       apr_size_t root_node_offset;
       svn_stringbuf_t *rev_content;
-  
+
       /* create the revision info for the current rev */
       revision_info_t *info = apr_pcalloc(pool, sizeof(*info));
       info->representations = apr_array_make(iter_pool, 4, sizeof(representation_t*));
@@ -1452,13 +1452,13 @@ read_pack_file(fs_fs_t *fs,
                           info->offset,
                           info->end - info->offset,
                           iter_pool));
-      
+
       SVN_ERR(read_revision_header(&info->changes,
                                    &info->changes_len,
                                    &root_node_offset,
                                    rev_content,
                                    iter_pool));
-      
+
       info->change_count
         = get_change_count(rev_content->data + info->changes,
                            info->changes_len);
@@ -1467,7 +1467,7 @@ read_pack_file(fs_fs_t *fs,
 
       info->representations = apr_array_copy(pool, info->representations);
       APR_ARRAY_PUSH(fs->revisions, revision_info_t*) = info;
-      
+
       /* destroy temps */
       svn_pool_clear(iter_pool);
     }
@@ -1556,7 +1556,7 @@ read_revisions(fs_fs_t **fs,
 
   cache_config.cache_size = memsize * 1024 * 1024;
   svn_cache_config_set(&cache_config);
-  
+
   SVN_ERR(fs_open(fs, path, pool));
 
   /* create data containers and caches */
@@ -1597,7 +1597,7 @@ typedef struct rep_pack_stats_t
 
   /* total size after deltification (i.e. on disk size) */
   apr_int64_t packed_size;
-  
+
   /* total size after de-deltification (i.e. plain text size) */
   apr_int64_t expanded_size;
 
@@ -1612,13 +1612,13 @@ typedef struct representation_stats_t
 {
   /* stats over all representations */
   rep_pack_stats_t total;
-  
+
   /* stats over those representations with ref_count == 1 */
   rep_pack_stats_t uniques;
 
   /* stats over those representations with ref_count > 1 */
   rep_pack_stats_t shared;
-  
+
   /* sum of all ref_counts */
   apr_int64_t references;
 
@@ -1633,7 +1633,7 @@ typedef struct node_stats_t
 {
   /* number of noderev structs */
   apr_int64_t count;
-  
+
   /* their total size on disk (structs only) */
   apr_int64_t size;
 } node_stats_t;
@@ -1645,7 +1645,7 @@ add_rep_pack_stats(rep_pack_stats_t *sta
                    representation_t *rep)
 {
   stats->count++;
-  
+
   stats->packed_size += rep->size;
   stats->expanded_size += rep->expanded_size;
   stats->overhead_size += rep->header_size + 7 /* ENDREP\n */;
@@ -1704,7 +1704,7 @@ print_largest_reps(largest_changes_t *ch
            changes->changes[i]->path->data);
 }
 
-/* Print the non-zero section of HISTOGRAM to console. 
+/* Print the non-zero section of HISTOGRAM to console.
  * Use POOL for allocations.
  */
 static void
@@ -1804,7 +1804,29 @@ get_by_extensions(fs_fs_t *fs,
   return result;
 }
 
-/* Print the (up to) 16 extensions in FS with the most changes. 
+/* Add all extension_info_t* entries of TO_ADD not already in TARGET to
+ * TARGET.
+ */
+static void
+merge_by_extension(apr_array_header_t *target,
+                   apr_array_header_t *to_add)
+{
+  int i, k, count;
+
+  count = target->nelts;
+  for (i = 0; i < to_add->nelts; ++i)
+    {
+      extension_info_t *info = APR_ARRAY_IDX(to_add, i, extension_info_t *);
+      for (k = 0; k < count; ++k)
+        if (info == APR_ARRAY_IDX(target, k, extension_info_t *))
+          break;
+
+      if (k == count)
+        APR_ARRAY_PUSH(target, extension_info_t*) = info;
+    }
+}
+
+/* Print the (up to) 16 extensions in FS with the most changes.
  * Use POOL for allocations.
  */
 static void
@@ -1900,6 +1922,9 @@ print_histograms_by_extension(fs_fs_t *f
   apr_array_header_t *data = get_by_extensions(fs, compare_count, pool);
   int i;
 
+  merge_by_extension(data, get_by_extensions(fs, compare_node_size, pool));
+  merge_by_extension(data, get_by_extensions(fs, compare_rep_size, pool));
+
   for (i = 0; i < data->nelts; ++i)
     {
       extension_info_t *info = APR_ARRAY_IDX(data, i, extension_info_t *);
@@ -2145,7 +2170,7 @@ int main(int argc, const char *argv[])
   printf("\n");
 
   print_stats(fs, pool);
-  
+
   if (svn_err)
     {
       svn_handle_error2(svn_err, stdout, FALSE, ERROR_TAG);

Modified: subversion/branches/verify-keep-going/tools/server-side/mod_dontdothat/mod_dontdothat.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/server-side/mod_dontdothat/mod_dontdothat.c?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/server-side/mod_dontdothat/mod_dontdothat.c (original)
+++ subversion/branches/verify-keep-going/tools/server-side/mod_dontdothat/mod_dontdothat.c Wed Jun  5 09:22:43 2013
@@ -584,7 +584,8 @@ dontdothat_insert_filters(request_rec *r
 
       /* XXX is there a way to error out from this point?  Would be nice... */
 
-      err = svn_config_read2(&config, cfg->config_file, TRUE, FALSE, r->pool);
+      err = svn_config_read3(&config, cfg->config_file, TRUE,
+                             FALSE, TRUE, r->pool);
       if (err)
         {
           char buff[256];

Modified: subversion/branches/verify-keep-going/tools/server-side/svnauthz.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/server-side/svnauthz.c?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/server-side/svnauthz.c (original)
+++ subversion/branches/verify-keep-going/tools/server-side/svnauthz.c Wed Jun  5 09:22:43 2013
@@ -65,7 +65,7 @@ static const apr_getopt_option_t options
      "                             "
      "   rw    write access (which also implies read)\n"
      "                             "
-     "    r    read-only access\n" 
+     "    r    read-only access\n"
      "                             "
      "   no    no access\n")
   },
@@ -341,7 +341,7 @@ subcommand_accessof(apr_getopt_t *os, vo
           /* Check that --is argument matches.
            * The errors returned here are not strictly correct, but
            * none of the other code paths will generate them and they
-           * roughly mean what we're saying here. */ 
+           * roughly mean what we're saying here. */
           if (check_rw && !write_access)
             err = svn_error_createf(SVN_ERR_AUTHZ_UNWRITABLE, NULL,
                                     ("%s is '%s', not writable"),
@@ -584,7 +584,7 @@ sub_main(int argc, const char *argv[], a
           if (opt_state.version)
             {
               /* Use the "help" subcommand to handle the "--version" option. */
-              static const svn_opt_subcommand_desc2_t pseudo_cmd = 
+              static const svn_opt_subcommand_desc2_t pseudo_cmd =
                 { "--version", subcommand_help, {0}, "",
                   {svnauthz__version /* must accept its own option */ } };
 
@@ -631,7 +631,7 @@ sub_main(int argc, const char *argv[], a
               err = svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
                                      ("Repository and authz file arguments "
                                       "required"));
-              return EXIT_ERROR(err, EXIT_FAILURE); 
+              return EXIT_ERROR(err, EXIT_FAILURE);
             }
 
           SVN_INT_ERR(svn_utf_cstring_to_utf8(&opt_state.repos_path, os->argv[os->ind],
@@ -646,7 +646,7 @@ sub_main(int argc, const char *argv[], a
         {
           err = svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
                                  ("Authz file argument required"));
-          return EXIT_ERROR(err, EXIT_FAILURE); 
+          return EXIT_ERROR(err, EXIT_FAILURE);
         }
 
       /* Grab AUTHZ_FILE from argv. */
@@ -725,7 +725,7 @@ sub_main(int argc, const char *argv[], a
            * match. */
           return EXIT_ERROR(err, 3);
         }
-                   
+
 
       return EXIT_ERROR(err, EXIT_FAILURE);
     }

Modified: subversion/branches/verify-keep-going/tools/server-side/svnpubsub/commit-hook.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/server-side/svnpubsub/commit-hook.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/server-side/svnpubsub/commit-hook.py (original)
+++ subversion/branches/verify-keep-going/tools/server-side/svnpubsub/commit-hook.py Wed Jun  5 09:22:43 2013
@@ -19,8 +19,10 @@
 SVNLOOK="/usr/local/svn-install/current/bin/svnlook"
 #SVNLOOK="/usr/local/bin/svnlook"
 
+HOST="127.0.0.1"
+PORT=2069
+
 import sys
-import subprocess
 try:
     import simplejson as json
 except ImportError:
@@ -28,37 +30,34 @@ except ImportError:
 
 import urllib2
 
-HOST="127.0.0.1"
-PORT=2069
-
-def svncmd(cmd):
-    return subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
+import svnpubsub.util
 
-def svncmd_uuid(repo):
-    cmd = "%s uuid %s" % (SVNLOOK, repo)
-    p = svncmd(cmd)
-    return p.stdout.read().strip()
-
-def svncmd_info(repo, revision):
-    cmd = "%s info -r %s %s" % (SVNLOOK, revision, repo)
-    p = svncmd(cmd)
-    data = p.stdout.read().split("\n")
+def svnlook(cmd, **kwargs):
+    args = [SVNLOOK] + cmd
+    return svnpubsub.util.check_output(args, **kwargs)
+
+def svnlook_uuid(repo):
+    cmd = ["uuid", "--", repo]
+    return svnlook(cmd).strip()
+
+def svnlook_info(repo, revision):
+    cmd = ["info", "-r", revision, "--", repo]
+    data = svnlook(cmd, universal_newlines=True).split("\n")
     #print data
     return {'author': data[0].strip(),
             'date': data[1].strip(),
             'log': "\n".join(data[3:]).strip()}
 
-def svncmd_changed(repo, revision):
-    cmd = "%s changed -r %s %s" % (SVNLOOK, revision, repo)
-    p = svncmd(cmd)
-    changed = {} 
-    while True:
-        line = p.stdout.readline()
-        if not line:
-            break
+def svnlook_changed(repo, revision):
+    cmd = ["changed", "-r", revision, "--", repo]
+    lines = svnlook(cmd, universal_newlines=True).split("\n")
+    changed = {}
+    for line in lines:
         line = line.strip()
+        if not line:
+            continue
         (flags, filename) = (line[0:3], line[4:])
-        changed[filename] = {'flags': flags} 
+        changed[filename] = {'flags': flags}
     return changed
 
 def do_put(body):
@@ -71,23 +70,23 @@ def do_put(body):
 
 def main(repo, revision):
     revision = revision.lstrip('r')
-    i = svncmd_info(repo, revision)
+    i = svnlook_info(repo, revision)
     data = {'type': 'svn',
             'format': 1,
             'id': int(revision),
             'changed': {},
-            'repository': svncmd_uuid(repo),
+            'repository': svnlook_uuid(repo),
             'committer': i['author'],
             'log': i['log'],
             'date': i['date'],
             }
-    data['changed'].update(svncmd_changed(repo, revision))
+    data['changed'].update(svnlook_changed(repo, revision))
     body = json.dumps(data)
     do_put(body)
 
 if __name__ == "__main__":
-    if len(sys.argv) != 3:
-        print "invalid args"
-        sys.exit(0)
+    if len(sys.argv) not in (3, 4):
+        sys.stderr.write("invalid args\n")
+        sys.exit(1)
 
-    main(sys.argv[1], sys.argv[2])
+    main(*sys.argv[1:3])

Modified: subversion/branches/verify-keep-going/tools/server-side/svnpubsub/irkerbridge.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/tools/server-side/svnpubsub/irkerbridge.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/tools/server-side/svnpubsub/irkerbridge.py (original)
+++ subversion/branches/verify-keep-going/tools/server-side/svnpubsub/irkerbridge.py Wed Jun  5 09:22:43 2013
@@ -30,7 +30,7 @@
 #   Space separated list of URLs to streams.
 #   This option should only be in the DEFAULT section, is ignored in
 #   all other sections.
-# irker=hostname:port 
+# irker=hostname:port
 #   The hostname/port combination of the irker daemon.  If port is
 #   omitted it defaults to 6659.  Irker is connected to over UDP.
 # match=What to use to decide if the commit should be sent to irker.
@@ -42,7 +42,7 @@
 #   Space separated list of URLs (any URL that Irker will accept) to
 #   send the resulting message to.  At current Irker only supports IRC.
 # template=string
-#   A string to use to format the output.  The string is a Python 
+#   A string to use to format the output.  The string is a Python
 #   string Template.  The following variables are available:
 #   $committer, $id, $date, $repository, $log, $log_firstline,
 #   $log_firstparagraph, $dirs_changed, $dirs_count, $dirs_count_s,
@@ -61,13 +61,13 @@
 # section other than the [DEFAULT] section consists of a configuration that
 # may match and send a message to irker to deliver.  All matching sections
 # will generate a message.
-# 
+#
 # Interpolation of values within the config file is allowed by including
 # %(name)s within a value.  For example I can reference the UUID of a repo
 # repeatedly by doing:
 # [DEFAULT]
 # ASF_REPO=13f79535-47bb-0310-9956-ffa450edef68
-# 
+#
 # [#commits]
 # match=%(ASF_REPO)s/
 #
@@ -143,7 +143,7 @@ class BigDoEverythingClass(object):
     if hasattr(commit, 'dirs_changed') or not hasattr(commit, 'changed'):
       return
 
-    dirs_changed = set() 
+    dirs_changed = set()
     for p in commit.changed:
       if p[-1] == '/' and commit.changed[p]['flags'][1] == 'U':
         # directory with property changes add the directory itself.
@@ -302,14 +302,14 @@ def main(args):
       logfile = os.path.abspath(options.logfile)
     else:
       parser.error('LOGFILE is required when running as a daemon')
-  
+
     if options.pidfile:
       pidfile = os.path.abspath(options.pidfile)
     else:
       parser.error('PIDFILE is required when running as a daemon')
 
 
-  config = ReloadableConfig(config_file) 
+  config = ReloadableConfig(config_file)
   bdec = BigDoEverythingClass(config, options)
 
   d = Daemon(logfile, pidfile, bdec)