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 [2/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/build/generator/gen_make.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/build/generator/gen_make.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/build/generator/gen_make.py (original)
+++ subversion/branches/verify-keep-going/build/generator/gen_make.py Wed Jun  5 09:22:43 2013
@@ -371,23 +371,26 @@ class Generator(gen_base.GeneratorBase):
       # get the output files for these targets, sorted in dependency order
       files = gen_base._sorted_files(self.graph, area)
 
-      ezt_area = _eztdata(type=area, files=[ ], apache_files=[ ],
-                          extra_install=None)
+      ezt_area_type = (area == 'apache-mod' and 'mods-shared' or area)
+      ezt_area = _eztdata(type=ezt_area_type, files=[], extra_install=None)
+
+      def file_to_eztdata(file):
+          # cd to dirname before install to work around libtool 1.4.2 bug.
+          dirname, fname = build_path_splitfile(file.filename)
+          return _eztdata(mode=None,
+                          dirname=dirname, fullname=file.filename,
+                          filename=fname, when=file.when)
 
       def apache_file_to_eztdata(file):
           # cd to dirname before install to work around libtool 1.4.2 bug.
           dirname, fname = build_path_splitfile(file.filename)
           base, ext = os.path.splitext(fname)
           name = base.replace('mod_', '')
-          return _eztdata(fullname=file.filename, dirname=dirname,
+          return _eztdata(mode='apache-mod',
+                          fullname=file.filename, dirname=dirname,
                           name=name, filename=fname, when=file.when)
-      if area == 'apache-mod':
-        data.areas.append(ezt_area)
 
-        for file in files:
-          ezt_area.files.append(apache_file_to_eztdata(file))
-
-      elif area != 'test' and area != 'bdb-test':
+      if area != 'test' and area != 'bdb-test':
         data.areas.append(ezt_area)
 
         area_var = area.replace('-', '_')
@@ -395,31 +398,20 @@ class Generator(gen_base.GeneratorBase):
         ezt_area.varname = area_var
         ezt_area.uppervar = upper_var
 
-        # ### TODO: This is a hack.  See discussion here:
-        # ### email to dev@, 2012-03-16, from Daniel Shahaf, subject
-        # ### "[1.7.x] build.conf += install-tools of an apache-mod",
-        # ### http://mid.gmane.org/20120316191639.GA28451@daniel3.local
-        apache_files = [gen_base.FileInfo(t.filename, t.when)
-                        for t in inst_targets
-                        if isinstance(t, gen_base.TargetApacheMod)]
-
-        files = [f for f in files if f not in apache_files]
-        for file in apache_files:
-          ezt_area.apache_files.append(apache_file_to_eztdata(file))
         for file in files:
-          # cd to dirname before install to work around libtool 1.4.2 bug.
-          dirname, fname = build_path_splitfile(file.filename)
-          ezt_file = _eztdata(dirname=dirname, fullname=file.filename,
-                              filename=fname, when=file.when)
-          if area == 'locale':
-            lang, objext = os.path.splitext(fname)
-            installdir = '$(DESTDIR)$(%sdir)/%s/LC_MESSAGES' % (area_var, lang)
-            ezt_file.installdir = installdir
-            ezt_file.objext = objext
+          if isinstance(file.target, gen_base.TargetApacheMod):
+            ezt_file = apache_file_to_eztdata(file)
           else:
-            ezt_file.install_fname = build_path_join('$(%sdir)' % area_var,
-                                                     fname)
-
+            ezt_file = file_to_eztdata(file)
+            if area == 'locale':
+              lang, objext = os.path.splitext(ezt_file.filename)
+              installdir = ('$(DESTDIR)$(%sdir)/%s/LC_MESSAGES'
+                            % (area_var, lang))
+              ezt_file.installdir = installdir
+              ezt_file.objext = objext
+            else:
+              ezt_file.install_fname = build_path_join('$(%sdir)' % area_var,
+                                                       ezt_file.filename)
           ezt_area.files.append(ezt_file)
 
         # certain areas require hooks for extra install rules defined

Modified: subversion/branches/verify-keep-going/build/generator/gen_win.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/build/generator/gen_win.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/build/generator/gen_win.py (original)
+++ subversion/branches/verify-keep-going/build/generator/gen_win.py Wed Jun  5 09:22:43 2013
@@ -212,7 +212,8 @@ class GeneratorBase(gen_base.GeneratorBa
 
   def _find_bdb(self):
     "Find the Berkeley DB library and version"
-    for ver in ("48", "47", "46", "45", "44", "43", "42", "41", "40"):
+    for ver in ("53", "52", "51", "50", "48", "47", "46",
+                "45", "44", "43", "42", "41", "40"):
       lib = "libdb" + ver
       path = os.path.join(self.bdb_path, "lib")
       if os.path.exists(os.path.join(path, lib + ".lib")):
@@ -336,6 +337,11 @@ class WinGeneratorBase(GeneratorBase):
     else:
       print("%s not found; skipping SWIG file generation..." % self.swig_exe)
 
+  def errno_filter(self, codes):
+    "Callback for gen_base.write_errno_table()."
+    # Filter out apr_errno.h SOC* codes, which alias the windows API names.
+    return set(filter(lambda code: not (10000 <= code <= 10100), codes))
+
   def find_rootpath(self):
     "Gets the root path as understand by the project system"
     return os.path.relpath('.', self.projfilesdir) + "\\"
@@ -966,7 +972,7 @@ class WinGeneratorBase(GeneratorBase):
     if target.name == "libsvnjavahl" and self.jdk_path:
       fakeincludes.append(os.path.join(self.jdk_path, 'include'))
       fakeincludes.append(os.path.join(self.jdk_path, 'include', 'win32'))
-      
+
     if target.name.find('cxxhl') != -1:
       fakeincludes.append(self.path("subversion/bindings/cxxhl/include"))
 
@@ -1253,7 +1259,9 @@ class WinGeneratorBase(GeneratorBase):
     self.ruby_version = None
     self.ruby_major_version = None
     self.ruby_minor_version = None
-    proc = os.popen('ruby -rrbconfig -e ' + escape_shell_arg(
+    # Pass -W0 to stifle the "-e:1: Use RbConfig instead of obsolete
+    # and deprecated Config." warning if we are using Ruby 1.9.
+    proc = os.popen('ruby -rrbconfig -W0 -e ' + escape_shell_arg(
                     "puts Config::CONFIG['ruby_version'];"
                     "puts Config::CONFIG['LIBRUBY'];"
                     "puts Config::CONFIG['archdir'];"
@@ -1465,7 +1473,7 @@ class WinGeneratorBase(GeneratorBase):
 
   def _find_apr(self):
     "Find the APR library and version"
-    
+
     minimal_apr_version = (0, 9, 0)
 
     version_file_path = os.path.join(self.apr_path, 'include',
@@ -1479,16 +1487,16 @@ class WinGeneratorBase(GeneratorBase):
     fp = open(version_file_path)
     txt = fp.read()
     fp.close()
-    
+
     vermatch = re.search(r'^\s*#define\s+APR_MAJOR_VERSION\s+(\d+)', txt, re.M)
     major = int(vermatch.group(1))
-    
+
     vermatch = re.search(r'^\s*#define\s+APR_MINOR_VERSION\s+(\d+)', txt, re.M)
     minor = int(vermatch.group(1))
-    
+
     vermatch = re.search(r'^\s*#define\s+APR_PATCH_VERSION\s+(\d+)', txt, re.M)
     patch = int(vermatch.group(1))
-    
+
     version = (major, minor, patch)
     self.apr_version = '%d.%d.%d' % version
 
@@ -1500,7 +1508,7 @@ class WinGeneratorBase(GeneratorBase):
       self.apr_lib = 'apr%s.lib' % suffix
     else:
       self.apr_lib = 'libapr%s.lib' % suffix
-      
+
     if version < minimal_apr_version:
       sys.stderr.write("ERROR: apr %s or higher is required "
                        "(%s found)\n" % (
@@ -1525,16 +1533,16 @@ class WinGeneratorBase(GeneratorBase):
     fp = open(version_file_path)
     txt = fp.read()
     fp.close()
-    
+
     vermatch = re.search(r'^\s*#define\s+APU_MAJOR_VERSION\s+(\d+)', txt, re.M)
     major = int(vermatch.group(1))
-    
+
     vermatch = re.search(r'^\s*#define\s+APU_MINOR_VERSION\s+(\d+)', txt, re.M)
     minor = int(vermatch.group(1))
-    
+
     vermatch = re.search(r'^\s*#define\s+APU_PATCH_VERSION\s+(\d+)', txt, re.M)
     patch = int(vermatch.group(1))
-   
+
     version = (major, minor, patch)
     self.aprutil_version = '%d.%d.%d' % version
 
@@ -1546,7 +1554,7 @@ class WinGeneratorBase(GeneratorBase):
       self.aprutil_lib = 'aprutil%s.lib' % suffix
     else:
       self.aprutil_lib = 'libaprutil%s.lib' % suffix
-      
+
     if version < minimal_aprutil_version:
       sys.stderr.write("ERROR: aprutil %s or higher is required "
                        "(%s found)\n" % (
@@ -1588,7 +1596,7 @@ class WinGeneratorBase(GeneratorBase):
     vermatch = re.search(r'^\s*#define\s+SQLITE_VERSION\s+"(\d+)\.(\d+)\.(\d+)(?:\.(\d))?"', txt, re.M)
 
     version = vermatch.groups()
-    
+
     # Sqlite doesn't add patch numbers for their ordinary releases
     if not version[3]:
       version = version[0:3]

Modified: subversion/branches/verify-keep-going/build/generator/templates/build-outputs.mk.ezt
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/build/generator/templates/build-outputs.mk.ezt?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/build/generator/templates/build-outputs.mk.ezt (original)
+++ subversion/branches/verify-keep-going/build/generator/templates/build-outputs.mk.ezt Wed Jun  5 09:22:43 2013
@@ -44,7 +44,9 @@ check-deps test-deps: [for test_helpers]
 MANPAGES =[for manpages] [manpages][end]
 
 CLEAN_FILES =[for cfiles] [cfiles][end]
-EXTRACLEAN_FILES =[for sql] [sql.header][end]
+EXTRACLEAN_FILES =[for sql] [sql.header][end] \
+  $(abs_builddir)/subversion/libsvn_subr/errorcode.inc \
+  $(abs_srcdir)/compile_commands.json
 
 SWIG_INCLUDES = -I$(abs_builddir)/subversion \
   -I$(abs_srcdir)/subversion/include \
@@ -127,16 +129,13 @@ $([target.varname]_OBJECTS): $([target.v
 # Section 7: Install-Group install targets
 ########################################
 [for areas]
-[is areas.type "apache-mod"]install-mods-shared:[for areas.files] [areas.files.fullname][end][for areas.files]
-	[if-any areas.files.when]if $([areas.files.when]) ; then [else][end]cd [areas.files.dirname] ; $(MKDIR) "$(APACHE_LIBEXECDIR)" ; $(INSTALL_MOD_SHARED) -n [areas.files.name] [areas.files.filename][if-any areas.files.when] ; fi[else][end][end]
-[else]install-[areas.type]: [for areas.files][if-index areas.files first][else] [end][areas.files.fullname][end] [for areas.apache_files] [areas.apache_files.fullname][end]
-	$(MKDIR) $(DESTDIR)$([areas.varname]dir)[for areas.files][is areas.type "locale"]
-	$(MKDIR) [areas.files.installdir]
-	[if-any areas.files.when]if $([areas.files.when]) ; then [else][end]cd [areas.files.dirname] ; $(INSTALL_[areas.uppervar]) [areas.files.filename] [areas.files.installdir]/$(PACKAGE_NAME)[areas.files.objext][if-any areas.files.when] ; fi[else][end][else]
-	[if-any areas.files.when]if $([areas.files.when]) ; then [else][end]cd [areas.files.dirname] ; $(INSTALL_[areas.uppervar]) [areas.files.filename] $(DESTDIR)[areas.files.install_fname][if-any areas.files.when] ; fi[else][end][end][end][for areas.apache_files]
-	[if-any areas.apache_files.when]if $([areas.apache_files.when]) ; then [else][end]cd [areas.apache_files.dirname] ; $(MKDIR) "$(APACHE_LIBEXECDIR)" ; $(INSTALL_MOD_SHARED) -n [areas.apache_files.name] [areas.apache_files.filename][if-any areas.apache_files.when] ; fi[else][end][end]
-[if-any areas.extra_install]	$(INSTALL_EXTRA_[areas.uppervar])
-[end][end][end]
+install-[areas.type]: [for areas.files][if-index areas.files first][else] [end][areas.files.fullname][end]
+[if-any areas.files][for areas.files]	[is areas.files.mode "apache-mod"][if-any areas.files.when]if $([areas.files.when]) ; then [else][end]cd [areas.files.dirname] ; $(MKDIR) "$(APACHE_LIBEXECDIR)" ; $(INSTALL_MOD_SHARED) -n [areas.files.name] [areas.files.filename][if-any areas.files.when] ; fi[else][end][else][if-index areas.files first]$(MKDIR) $(DESTDIR)$([areas.varname]dir)
+	[else][end][is areas.type "locale"]$(MKDIR) [areas.files.installdir]
+	[if-any areas.files.when]if $([areas.files.when]) ; then [else][end]cd [areas.files.dirname] ; $(INSTALL_[areas.uppervar]) [areas.files.filename] [areas.files.installdir]/$(PACKAGE_NAME)[areas.files.objext][if-any areas.files.when] ; fi[else][end][else][if-any areas.files.when]if $([areas.files.when]) ; then [else][end]cd [areas.files.dirname] ; $(INSTALL_[areas.uppervar]) [areas.files.filename] $(DESTDIR)[areas.files.install_fname][if-any areas.files.when] ; fi[else][end][end][end]
+[end][else]	$(MKDIR) $(DESTDIR)$([areas.varname]dir)
+[end][if-any areas.extra_install]	$(INSTALL_EXTRA_[areas.uppervar])
+[end][end]
 
 ########################################
 # Section 8: The install-include rule

Modified: subversion/branches/verify-keep-going/build/run_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/build/run_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/build/run_tests.py (original)
+++ subversion/branches/verify-keep-going/build/run_tests.py Wed Jun  5 09:22:43 2013
@@ -43,7 +43,7 @@ separated list of test numbers; the defa
 '''
 
 # A few useful constants
-SVN_VER_MINOR = 8
+SVN_VER_MINOR = 9
 
 import os, re, subprocess, sys, imp, threading
 from datetime import datetime

Modified: subversion/branches/verify-keep-going/configure.ac
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/configure.ac?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/configure.ac (original)
+++ subversion/branches/verify-keep-going/configure.ac Wed Jun  5 09:22:43 2013
@@ -144,7 +144,9 @@ fi
 dnl Find Apache with a recent-enough magic module number
 SVN_FIND_APACHE(20020903)
 
-dnl Search for SQLite
+dnl Search for SQLite.  If you change SQLITE_URL from a .zip to
+dnl something else also update build/ac-macros/sqlite.m4 to reflect
+dnl the correct command to unpack the downloaded file.
 SQLITE_MINIMUM_VER="3.7.12"
 SQLITE_RECOMMENDED_VER="3.7.15.1"
 SQLITE_URL="http://www.sqlite.org/sqlite-amalgamation-$(printf %d%02d%02d%02d $(echo ${SQLITE_RECOMMENDED_VER} | sed -e 's/\./ /g')).zip"
@@ -1084,7 +1086,8 @@ if test "$enable_optimization" = "yes"; 
         SVN_CFLAGS_ADD_IFELSE([-O2],[],[
           SVN_CFLAGS_ADD_IFELSE([-O1],[],[
             SVN_CFLAGS_ADD_IFELSE([-O])])])])
-      SVN_CFLAGS_ADD_IFELSE([-flto -Wno-clobbered])
+      SVN_CFLAGS_ADD_IFELSE([-Wno-clobbered])
+      SVN_CFLAGS_ADD_IFELSE([-flto])
       SVN_CFLAGS_ADD_IFELSE([-fwhole-program])
     fi
   fi
@@ -1100,7 +1103,8 @@ if test "$enable_optimization" = "yes"; 
         SVN_CXXFLAGS_ADD_IFELSE([-O2],[],[
           SVN_CXXFLAGS_ADD_IFELSE([-O1],[],[
             SVN_CXXFLAGS_ADD_IFELSE([-O])])])])
-      SVN_CXXFLAGS_ADD_IFELSE([-flto -Wno-clobbered])
+      SVN_CXXFLAGS_ADD_IFELSE([-Wno-clobbered])
+      SVN_CXXFLAGS_ADD_IFELSE([-flto])
       SVN_CXXFLAGS_ADD_IFELSE([-fwhole-program])
     fi
   fi
@@ -1113,6 +1117,13 @@ elif test "$enable_optimization" = "no";
 #   # do nothing
 fi
 
+dnl Dump the current compiler options
+AC_MSG_NOTICE([C compiler flags: $CFLAGS])
+AC_MSG_NOTICE([    user-defined: $CUSERFLAGS])
+AC_MSG_NOTICE([ maintainer-mode: $CMAINTAINERFLAGS])
+AC_MSG_NOTICE([C++ compiler flags: $CXXFLAGS])
+AC_MSG_NOTICE([      user-defined: $CXXUSERFLAGS])
+AC_MSG_NOTICE([   maintainer-mode: $CXXMAINTAINERFLAGS])
 
 AC_ARG_ENABLE(full-version-match,
 AS_HELP_STRING([--disable-full-version-match],

Modified: subversion/branches/verify-keep-going/contrib/hook-scripts/check-mime-type.pl
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/contrib/hook-scripts/check-mime-type.pl?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/contrib/hook-scripts/check-mime-type.pl (original)
+++ subversion/branches/verify-keep-going/contrib/hook-scripts/check-mime-type.pl Wed Jun  5 09:22:43 2013
@@ -120,7 +120,7 @@ foreach my $path ( @files_added )
 		# Parse the complete list of property values of the file $path to extract
 		# the mime-type and eol-style
 		foreach my $prop (&read_from_process($svnlook, 'proplist', $repos, '-t',
-		                  $txn, '--verbose', $path))
+		                  $txn, '--verbose', '--', $path))
 			{
 				if ($prop =~ /^\s*svn:mime-type : (\S+)/)
 					{
@@ -187,7 +187,7 @@ sub safe_read_from_pipe
       croak "$0: safe_read_from_pipe passed no arguments.\n";
     }
   print "Running @_\n";
-  my $pid = open(SAFE_READ, '-|');
+  my $pid = open(SAFE_READ, '-|', @_);
   unless (defined $pid)
     {
       die "$0: cannot fork: $!\n";

Modified: subversion/branches/verify-keep-going/contrib/hook-scripts/detect-merge-conflicts.sh
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/contrib/hook-scripts/detect-merge-conflicts.sh?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/contrib/hook-scripts/detect-merge-conflicts.sh (original)
+++ subversion/branches/verify-keep-going/contrib/hook-scripts/detect-merge-conflicts.sh Wed Jun  5 09:22:43 2013
@@ -1,8 +1,8 @@
 #!/bin/sh
 #
 # A pre-commit hook to detect changes that look like forgotten
-# conflict markers. If any additions starting with '>>>>>>>',
-# '=======' or '<<<<<<<' are found, the commit is aborted with a nice
+# conflict markers.  If any added line starting with '<<<<<<< .'
+# or '>>>>>>> .' is found, the commit is aborted with a nice
 # error message.
 #
 # $HeadURL$
@@ -23,7 +23,10 @@ fi
 
 # We scan through the transaction diff, looking for things that look
 # like conflict markers.  If we find one, we abort the commit.
-SUSPICIOUS=$($SVNLOOK diff -t "$TXN" "$REPOS" | grep -E '^\+(<{7} \.|={7}$|>{7} \.)' | wc -l)
+# (We only look for the conflict beginning and end markers, but not for
+# the separator line "=======" because that line occurs reasonably often
+# in normal text files.)
+SUSPICIOUS=$($SVNLOOK diff -t "$TXN" "$REPOS" | grep -E '^\+(<{7} \.|>{7} \.)' | wc -l)
 
 if [ $SUSPICIOUS -ne 0 ]; then
   echo "Some parts of your commit look suspiciously like merge" >&2

Modified: subversion/branches/verify-keep-going/contrib/hook-scripts/svn-keyword-check.pl
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/contrib/hook-scripts/svn-keyword-check.pl?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/contrib/hook-scripts/svn-keyword-check.pl (original)
+++ subversion/branches/verify-keep-going/contrib/hook-scripts/svn-keyword-check.pl Wed Jun  5 09:22:43 2013
@@ -141,7 +141,7 @@ sub check {
                 return 1;
             } else {
                 my @keywords = get_svnkeywords($file);
-                my $fh = _pipe("$svnlook cat $flag $value $repos $file");
+                my $fh = _pipe($svnlook, qw/cat/, $flag, $value, $repos, '--', $file);
                 while (my $line = <$fh>) {
                     foreach my $keyword (@keywords) {
                         if ($line =~ m/$keyword/) {
@@ -168,7 +168,7 @@ sub file_is_binary {
         return 0;
     }
     if (has_svn_property($file, "svn:mime-type")) {
-        my ($mimetype) = read_from_process("$svnlook propget $flag $value $repos svn:mime-type $file");
+        my ($mimetype) = read_from_process($svnlook, qw/propget/, $flag, $value, $repos, 'svn:mime-type', '--', $file);
         chomp($mimetype);
         $mimetype =~ s/^\s*(.*)/$1/;
         if ($mimetype =~ m/^text\//) {
@@ -186,7 +186,7 @@ sub file_is_binary {
 # Return a list of svn:keywords on a file
 sub get_svnkeywords {
     my $file = shift;
-    my @lines = read_from_process("$svnlook propget $flag $value $repos svn:keywords $file");
+    my @lines = read_from_process($svnlook, qw/propget/, $flag, $value, $repos, 'svn:keywords', '--', $file);
     my @returnlines;
     foreach my $line (@lines) {
         $line =~ s/\s+/ /;
@@ -199,7 +199,7 @@ sub get_svnkeywords {
 sub has_svn_property {
     my $file = shift;
     my $keyword = shift;
-    my @proplist = read_from_process("$svnlook proplist $flag $value $repos $file");
+    my @proplist = read_from_process($svnlook, qw/proplist/, $flag, $value, $repos, '--', $file);
     foreach my $prop (@proplist) {
         chomp($prop);
         if ($prop =~ m/\b$keyword\b/) {
@@ -241,7 +241,7 @@ sub safe_read_from_pipe {
 # Return the filehandle as a glob so we can loop over it elsewhere.
 sub _pipe {
     local *SAFE_READ;
-    my $pid = open(SAFE_READ, '-|');
+    my $pid = open(SAFE_READ, '-|', @_);
     unless (defined $pid) {
         die "$0: cannot fork: $!\n";
     }

Modified: subversion/branches/verify-keep-going/contrib/server-side/fsfsfixer/fix-repo
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/contrib/server-side/fsfsfixer/fix-repo?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/contrib/server-side/fsfsfixer/fix-repo (original)
+++ subversion/branches/verify-keep-going/contrib/server-side/fsfsfixer/fix-repo Wed Jun  5 09:22:43 2013
@@ -1,6 +1,6 @@
 #!/bin/sh
-USAGE="Fix some kinds of corruption in a Subversion repository
-by running './fixer/fix-rev.py' on each revision.
+USAGE="Fix some kinds of corruption in a Subversion FSFS repository.
+This script runs './fixer/fix-rev.py' on each revision.
 Usage: $0 REPO-DIR START-REV
 
 Backup your repository before running these scripts."

Modified: subversion/branches/verify-keep-going/contrib/server-side/fsfsfixer/fixer/find_good_id.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/contrib/server-side/fsfsfixer/fixer/find_good_id.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/contrib/server-side/fsfsfixer/fixer/find_good_id.py (original)
+++ subversion/branches/verify-keep-going/contrib/server-side/fsfsfixer/fixer/find_good_id.py Wed Jun  5 09:22:43 2013
@@ -1,12 +1,5 @@
 #!/usr/bin/env python
 
-# PER-REPOSITORY CONFIGURATION
-#
-# The number of revs per shard of the repository being accessed, or None if
-# it is not sharded.
-# TODO: Read this from the db/format file.
-REVS_PER_SHARD=None
-
 usage = """
 Print the correct FSFS node-rev id, given one that is correct except for
 its byte-offset part.
@@ -21,6 +14,7 @@ Example:
 """
 
 import os, sys
+from fixer_config import *
 
 class FixError(Exception):
   """An exception for any kind of inablility to repair the repository."""

Modified: subversion/branches/verify-keep-going/contrib/server-side/fsfsfixer/fixer/fix-rev.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/contrib/server-side/fsfsfixer/fixer/fix-rev.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/contrib/server-side/fsfsfixer/fixer/fix-rev.py (original)
+++ subversion/branches/verify-keep-going/contrib/server-side/fsfsfixer/fixer/fix-rev.py Wed Jun  5 09:22:43 2013
@@ -210,7 +210,7 @@ def fix_one_error(repo_dir, rev):
     if handle_one_error(repo_dir, rev, svnlook_err):
       return True
 
-  raise FixError("unfixable error:\n  " + "\n  ".join(svnadmin_err))
+  raise FixError("unrecognized error message, and so unable to fix:\n  " + "\n  ".join(svnadmin_err))
 
 def check_formats(repo_dir):
   """Check that REPO_DIR isn't newer than we know how to handle."""

Modified: subversion/branches/verify-keep-going/contrib/server-side/fsfsfixer/fixer/fixer_config.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/contrib/server-side/fsfsfixer/fixer/fixer_config.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/contrib/server-side/fsfsfixer/fixer/fixer_config.py (original)
+++ subversion/branches/verify-keep-going/contrib/server-side/fsfsfixer/fixer/fixer_config.py Wed Jun  5 09:22:43 2013
@@ -8,3 +8,17 @@ SVNLOOK = 'svnlook'
 
 # Verbosity: True for verbose, or False for quiet
 VERBOSE = True
+
+# PER-REPOSITORY CONFIGURATION
+
+# The number of revs per shard of the repository being accessed, or 'None'
+# for a linear (that is, non-sharded) layout.  This is 1000 for almost all
+# repositories in practice.
+#
+# The correct value can be found in the 'db/format' file in the repository.
+# The second line of that file will say something like 'layout sharded 1000'
+# or 'layout linear'.
+#
+# TODO: Read this value automatically from the db/format file.
+REVS_PER_SHARD=1000
+

Modified: subversion/branches/verify-keep-going/gen-make.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/gen-make.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/gen-make.py (original)
+++ subversion/branches/verify-keep-going/gen-make.py Wed Jun  5 09:22:43 2013
@@ -64,6 +64,7 @@ def main(fname, gentype, verfname=None,
 
   generator.write()
   generator.write_sqlite_headers()
+  generator.write_errno_table()
 
   if ('--debug', '') in other_options:
     for dep_type, target_dict in generator.graph.deps.items():

Modified: subversion/branches/verify-keep-going/get-deps.sh
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/get-deps.sh?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/get-deps.sh (original)
+++ subversion/branches/verify-keep-going/get-deps.sh Wed Jun  5 09:22:43 2013
@@ -23,19 +23,34 @@
 # get-deps.sh -- download the dependencies useful for building Subversion
 #
 
-APR=apr-1.4.6
-APR_UTIL=apr-util-1.5.1
-SERF=serf-1.2.0
-ZLIB=zlib-1.2.7
-SQLITE_VERSION=3.7.15.1
+# If changing this file please take care to try to make your changes as
+# portable as possible.  That means at a minimum only use POSIX supported
+# features and functions.  However, it may be desirable to use an even
+# more narrow set of features than POSIX, e.g. Solaris /bin/sh only has
+# a subset of the POSIX shell features.  If in doubt, limit yourself to
+# features already used in the file.  Reviewing the history of changes
+# may be useful as well.
+
+APR_VERSION=${APR_VERSION:-"1.4.6"}
+APU_VERSION=${APU_VERSION:-"1.5.1"}
+SERF_VERSION=${SERF_VERSION:-"1.2.0"}
+ZLIB_VERSION=${ZLIB_VERSION:-"1.2.8"}
+SQLITE_VERSION=${SQLITE_VERSION:-"3.7.15.1"}
+GTEST_VERSION=${GTEST_VERSION:-"1.6.0"}
+HTTPD_VERSION=${HTTPD_VERSION:-"2.4.3"}
+APR_ICONV_VERSION=${APR_ICONV_VERSION:-"1.2.1"}
+
+APR=apr-${APR_VERSION}
+APR_UTIL=apr-util-${APU_VERSION}
+SERF=serf-${SERF_VERSION}
+ZLIB=zlib-${ZLIB_VERSION}
 SQLITE_VERSION_LIST=`echo $SQLITE_VERSION | sed -e 's/\./ /g'`
 SQLITE=sqlite-amalgamation-`printf %d%02d%02d%02d $SQLITE_VERSION_LIST`
-GTEST_VERSION=1.6.0
 GTEST=gtest-${GTEST_VERSION}
 GTEST_URL=http://googletest.googlecode.com/files/
 
-HTTPD=httpd-2.4.3
-APR_ICONV=apr-iconv-1.2.1
+HTTPD=httpd-${HTTPD_VERSION}
+APR_ICONV=apr-iconv-${APR_ICONV_VERSION}
 
 BASEDIR=`pwd`
 TEMPDIR=$BASEDIR/temp
@@ -86,10 +101,10 @@ get_zlib() {
     test -d $BASEDIR/zlib && return
 
     cd $TEMPDIR
-    $HTTP_FETCH http://www.zlib.net/$ZLIB.tar.bz2
+    $HTTP_FETCH http://www.zlib.net/$ZLIB.tar.gz
     cd $BASEDIR
 
-    bzip2 -dc $TEMPDIR/$ZLIB.tar.bz2 | tar -xf -
+    gzip -dc $TEMPDIR/$ZLIB.tar.gz | tar -xf -
 
     mv $ZLIB zlib
 }

Propchange: subversion/branches/verify-keep-going/get-deps.sh
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: subversion/branches/verify-keep-going/notes/dump-load-format.txt
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/notes/dump-load-format.txt?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/notes/dump-load-format.txt (original)
+++ subversion/branches/verify-keep-going/notes/dump-load-format.txt Wed Jun  5 09:22:43 2013
@@ -215,7 +215,7 @@ is the payload of program source code, d
 that a version control system actually manages.
 
 A Node record describes a change in properties, the addition or deletion
-of a flow, or a change in content.  It nust do at least one of these things,
+of a flow, or a change in content.  It must do at least one of these things,
 otherwise it would be a no-op and omitted.
 
 When no copyfrom is present, and the action isn't an add or copy, then
@@ -341,7 +341,7 @@ to the same directory. 
 
 The properties section of a Revision record consists of some subset
 of the three reserved per-commit properties: svn:author, svn:date,
-and svn.log. These properties do not persist to later revisions.
+and svn:log. These properties do not persist to later revisions.
 
 The key thing to know about Node properties is that they are 
 persistent, once set, until modified by a future property 
@@ -485,8 +485,10 @@ that (1) properties with the same value 
 the flow are not printed, and (2) deleted properties will be written
 out as
 
+-------------------------------------------------------------------
 D <name length>
 <name>
+-------------------------------------------------------------------
 
 just as a regular property is printed, but with the "K " changed to a
 "D " and with no value part.

Modified: subversion/branches/verify-keep-going/subversion/bindings/ctypes-python/setup.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/ctypes-python/setup.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/ctypes-python/setup.py (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/ctypes-python/setup.py Wed Jun  5 09:22:43 2013
@@ -58,7 +58,7 @@ class clean(_clean):
         if not self.dry_run:
           os.remove(f)
       else:
-        log.warn("'%s' does not exist -- can't clean it", os.path.normpath(f))
+        log.debug("'%s' does not exist -- can't clean it", os.path.normpath(f))
 
     # Run standard clean command
     _clean.run(self)

Modified: subversion/branches/verify-keep-going/subversion/bindings/ctypes-python/test/svntypes.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/ctypes-python/test/svntypes.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/ctypes-python/test/svntypes.py (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/ctypes-python/test/svntypes.py Wed Jun  5 09:22:43 2013
@@ -35,7 +35,8 @@ class SvnDateTestCase(unittest.TestCase)
     def test_as_human_string(self):
         d1 = SvnDate('1999-12-31T23:59:59.000000Z')
         s1 = d1.as_human_string()
-        self.assertEqual(s1[:27], '1999-12-31 23:59:59 +0000 (')
+        self.assertRegexpMatches(s1[:27],
+            r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} [+-]\d{4} \(')
 
 
 class HashTestCase(unittest.TestCase):

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/native/CreateJ.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/native/CreateJ.cpp?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/native/CreateJ.cpp (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/native/CreateJ.cpp Wed Jun  5 09:22:43 2013
@@ -151,7 +151,8 @@ CreateJ::ConflictVersion(const svn_wc_co
   static jmethodID ctor = 0;
   if (ctor == 0)
     {
-      ctor = env->GetMethodID(clazz, "<init>", "(Ljava/lang/String;J"
+      ctor = env->GetMethodID(clazz, "<init>", "(Ljava/lang/String;"
+                                               "Ljava/lang/String;J"
                                                "Ljava/lang/String;"
                                                "L"JAVA_PACKAGE"/types/NodeKind;"
                                                ")V");
@@ -162,6 +163,9 @@ CreateJ::ConflictVersion(const svn_wc_co
   jstring jreposURL = JNIUtil::makeJString(version->repos_url);
   if (JNIUtil::isJavaExceptionThrown())
     POP_AND_RETURN_NULL;
+  jstring jreposUUID = JNIUtil::makeJString(version->repos_uuid);
+  if (JNIUtil::isJavaExceptionThrown())
+    POP_AND_RETURN_NULL;
   jstring jpathInRepos = JNIUtil::makeJString(version->path_in_repos);
   if (JNIUtil::isJavaExceptionThrown())
     POP_AND_RETURN_NULL;
@@ -169,7 +173,7 @@ CreateJ::ConflictVersion(const svn_wc_co
   if (JNIUtil::isJavaExceptionThrown())
     POP_AND_RETURN_NULL;
 
-  jobject jversion = env->NewObject(clazz, ctor, jreposURL,
+  jobject jversion = env->NewObject(clazz, ctor, jreposURL, jreposUUID,
                                     (jlong)version->peg_rev, jpathInRepos,
                                     jnodeKind);
   if (JNIUtil::isJavaExceptionThrown())
@@ -835,7 +839,8 @@ CreateJ::CommitItem(svn_client_commit_it
                                         "(Ljava/lang/String;"
                                         "L"JAVA_PACKAGE"/types/NodeKind;"
                                         "ILjava/lang/String;"
-                                        "Ljava/lang/String;J)V");
+                                        "Ljava/lang/String;J"
+                                        "Ljava/lang/String;)V");
       if (JNIUtil::isExceptionThrown())
         POP_AND_RETURN_NULL;
     }
@@ -862,6 +867,12 @@ CreateJ::CommitItem(svn_client_commit_it
   if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_IS_COPY)
     jstateFlags |=
       org_apache_subversion_javahl_CommitItemStateFlags_IsCopy;
+  if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_LOCK_TOKEN)
+    jstateFlags |=
+      org_apache_subversion_javahl_CommitItemStateFlags_LockToken;
+  if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_MOVED_HERE)
+    jstateFlags |=
+      org_apache_subversion_javahl_CommitItemStateFlags_MovedHere;
 
   jstring jurl = JNIUtil::makeJString(item->url);
   if (JNIUtil::isJavaExceptionThrown())
@@ -871,12 +882,16 @@ CreateJ::CommitItem(svn_client_commit_it
   if (JNIUtil::isJavaExceptionThrown())
     POP_AND_RETURN_NULL;
 
+  jstring jmovedFromPath = JNIUtil::makeJString(item->moved_from_abspath);
+  if (JNIUtil::isJavaExceptionThrown())
+    POP_AND_RETURN_NULL;
+
   jlong jcopyRevision = item->revision;
 
   // create the Java object
   jobject jitem = env->NewObject(clazz, midConstructor, jpath,
                                  jnodeKind, jstateFlags, jurl,
-                                 jcopyUrl, jcopyRevision);
+                                 jcopyUrl, jcopyRevision, jmovedFromPath);
   if (JNIUtil::isJavaExceptionThrown())
     POP_AND_RETURN_NULL;
 

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/native/JNIUtil.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/native/JNIUtil.cpp?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/native/JNIUtil.cpp (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/native/JNIUtil.cpp Wed Jun  5 09:22:43 2013
@@ -179,7 +179,7 @@ bool JNIUtil::JNIGlobalInit(JNIEnv *env)
       apr_allocator_max_free_set(allocator, 1);
     }
 
-  svn_utf_initialize(g_pool); /* Optimize character conversions */
+  svn_utf_initialize2(FALSE, g_pool); /* Optimize character conversions */
   svn_fs_initialize(g_pool); /* Avoid some theoretical issues */
   svn_ra_initialize(g_pool);
 

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_types_VersionExtended.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_types_VersionExtended.cpp?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_types_VersionExtended.cpp (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_types_VersionExtended.cpp Wed Jun  5 09:22:43 2013
@@ -113,12 +113,12 @@ getLinkedLib(JNIEnv *env, jobject jthis)
     {
       fid = env->GetFieldID(env->GetObjectClass(jthis), "index", "I");
       if (JNIUtil::isJavaExceptionThrown())
-        return NULL;      
+        return NULL;
     }
 
   const int index = env->GetIntField(jthis, fid);
   if (JNIUtil::isJavaExceptionThrown())
-    return NULL;      
+    return NULL;
 
   const VersionExtended *const vx =
     VersionExtended::getCppObjectFromLinkedLib(jthis);
@@ -173,12 +173,12 @@ getLoadedLib(JNIEnv *env, jobject jthis)
     {
       fid = env->GetFieldID(env->GetObjectClass(jthis), "index", "I");
       if (JNIUtil::isJavaExceptionThrown())
-        return NULL;      
+        return NULL;
     }
 
   const int index = env->GetIntField(jthis, fid);
   if (JNIUtil::isJavaExceptionThrown())
-    return NULL;      
+    return NULL;
 
   const VersionExtended *const vx =
     VersionExtended::getCppObjectFromLoadedLib(jthis);

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientNotifyInformation.java
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientNotifyInformation.java?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientNotifyInformation.java (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientNotifyInformation.java Wed Jun  5 09:22:43 2013
@@ -559,7 +559,15 @@ public class ClientNotifyInformation ext
         conflict_resolver_done ("conflict resolver done"),
 
         /** Operation left local modifications. */
-        left_local_modifications ("left local modifications");
+        left_local_modifications ("left local modifications"),
+
+        /** A copy from a foreign repository has started
+         * @since New in 1.8. */
+        foreign_copy_begin ("foreign copy begin"),
+
+        /** A move in the working copy has been broken
+         * @since New in 1.8. */
+        move_broken ("move broken");
 
         /**
          * The description of the action.

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItem.java
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItem.java?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItem.java (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItem.java Wed Jun  5 09:22:43 2013
@@ -70,6 +70,11 @@ public class CommitItem implements java.
     long revision;
 
     /**
+     * the source of the move
+     */
+    String movedFromPath;
+
+    /**
      * This constructor will be only called from the jni code.
      * @param p     path to the commit item
      * @param nk    kind of node (see NodeKind)
@@ -77,8 +82,9 @@ public class CommitItem implements java.
      * @param u     url of the item
      * @param cu    copy source url
      * @param r     revision number
+     * @param mf    move source abspath
      */
-    public CommitItem(String p, NodeKind nk, int sf, String u, String cu, long r)
+    CommitItem(String p, NodeKind nk, int sf, String u, String cu, long r, String mf)
     {
         path = p;
         nodeKind = nk;
@@ -86,6 +92,7 @@ public class CommitItem implements java.
         url = u;
         copyUrl = cu;
         revision = r;
+        movedFromPath = mf;
     }
 
     /**
@@ -149,4 +156,13 @@ public class CommitItem implements java.
     {
         return revision;
     }
+
+    /**
+     * @return the absolute path of the source of a move.
+     * @since 1.8
+     */
+    public String getMovedFromPath()
+    {
+        return movedFromPath;
+    }
 }

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItemStateFlags.java
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItemStateFlags.java?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItemStateFlags.java (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItemStateFlags.java Wed Jun  5 09:22:43 2013
@@ -53,4 +53,15 @@ public interface CommitItemStateFlags
      * the item has been copied
      */
     public static final int IsCopy=16;
+
+    /**
+     * the item has a lock token
+     */
+    public static final int LockToken = 32;
+
+    /**
+     * the item was moved to this location
+     * @since 1.8
+     */
+    public static int MovedHere = 64;
 }

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java Wed Jun  5 09:22:43 2013
@@ -592,6 +592,7 @@ public interface ISVNClient
      * @param localPath     target local path
      * @param dryRun        do not change anything
      * @throws ClientException
+     * @deprecated Will be removed in a future release
      */
     void mergeReintegrate(String path, Revision pegRevision,
                           String localPath, boolean dryRun)

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java Wed Jun  5 09:22:43 2013
@@ -131,10 +131,10 @@ public class NativeResources
     {
         initNativeLibrary();
         version = new Version();
-        if (!version.isAtLeast(1, 7, 0))
+        if (!version.isAtLeast(1, 9, 0))
         {
             throw new LinkageError("Native library version must be at least " +
-                                   "1.7.0, but is only " + version);
+                                   "1.9.0, but is only " + version);
         }
     }
 

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java Wed Jun  5 09:22:43 2013
@@ -309,6 +309,7 @@ public class SVNClient implements ISVNCl
     }
 
 
+    /** @deprecated */
     public native void mergeReintegrate(String path, Revision pegRevision,
                                         String localPath, boolean dryRun)
             throws ClientException;

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/ConflictVersion.java
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/ConflictVersion.java?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/ConflictVersion.java (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/ConflictVersion.java Wed Jun  5 09:22:43 2013
@@ -31,16 +31,19 @@ package org.apache.subversion.javahl.typ
 public class ConflictVersion
 {
     private String reposURL;
+    private String reposUUID;
     private long pegRevision;
     private String pathInRepos;
 
     private NodeKind nodeKind;
 
     /** This constructor should only be called from JNI code. */
-    public ConflictVersion(String reposURL, long pegRevision, String pathInRepos,
+    ConflictVersion(String reposURL, String reposUUID,
+                    long pegRevision, String pathInRepos,
                     NodeKind nodeKind)
     {
         this.reposURL = reposURL;
+        this.reposUUID = reposUUID;
         this.pegRevision = pegRevision;
         this.pathInRepos = pathInRepos;
         this.nodeKind = nodeKind;
@@ -51,6 +54,12 @@ public class ConflictVersion
         return reposURL;
     }
 
+    /** @since 1.8 */
+    public String getReposUUID()
+    {
+        return reposUUID;
+    }
+
     public long getPegRevision()
     {
         return pegRevision;

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/LogDate.java
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/LogDate.java?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/LogDate.java (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/LogDate.java Wed Jun  5 09:22:43 2013
@@ -51,7 +51,11 @@ public class LogDate implements java.io.
         {
             throw new ParseException("String is not a valid Subversion date", 0);
         }
-        Date date = formatter.parse(datestr.substring(0, 23) + " UTC");
+        Date date;
+        synchronized(formatter)
+        {
+            date = formatter.parse(datestr.substring(0, 23) + " UTC");
+        }
         this.cachedString = datestr;
         cachedDate = Calendar.getInstance(UTC);
         cachedDate.setTime(date);

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/tigris/subversion/javahl/LogDate.java
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/tigris/subversion/javahl/LogDate.java?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/tigris/subversion/javahl/LogDate.java (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/src/org/tigris/subversion/javahl/LogDate.java Wed Jun  5 09:22:43 2013
@@ -53,7 +53,11 @@ public class LogDate implements java.io.
         {
             throw new ParseException("String is not a valid Subversion date", 0);
         }
-        Date date = formatter.parse(datestr.substring(0, 23) + " UTC");
+        Date date;
+        synchronized(formatter)
+        {
+            date = formatter.parse(datestr.substring(0, 23) + " UTC");
+        }
         this.cachedString = datestr;
         cachedDate = Calendar.getInstance(UTC);
         cachedDate.setTime(date);

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java Wed Jun  5 09:22:43 2013
@@ -3408,6 +3408,7 @@ public class BasicTests extends SVNTests
         ConflictDescriptor conflict = conflicts.iterator().next();
 
         assertNotNull("Conflict should not be null", conflict);
+        assertNotNull("Repository UUID must be set", conflict.getSrcLeftVersion().getReposUUID());
 
         assertEquals(conflict.getSrcLeftVersion().getNodeKind(), NodeKind.file);
         assertEquals(conflict.getSrcLeftVersion().getReposURL() + "/" +
@@ -3416,6 +3417,8 @@ public class BasicTests extends SVNTests
 
         if (conflict.getSrcRightVersion() != null)
         {
+            assertEquals(conflict.getSrcLeftVersion().getReposUUID(),
+                         conflict.getSrcRightVersion().getReposUUID());
             assertEquals(conflict.getSrcRightVersion().getNodeKind(), NodeKind.none);
             assertEquals(conflict.getSrcRightVersion().getReposURL(), tcTest.getUrl().toString());
             assertEquals(conflict.getSrcRightVersion().getPegRevision(), 2L);

Modified: subversion/branches/verify-keep-going/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java Wed Jun  5 09:22:43 2013
@@ -148,12 +148,12 @@ class SVNTests extends TestCase
      * Username to use in tests
      */
     protected final static String USERNAME = "jrandom";
-    
+
     /**
      * Password to use in tests
      */
     protected final static String PASSWORD = "rayjandom";
-    
+
     /**
      * Create a JUnit <code>TestCase</code> instance.
      */

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/core.i
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/core.i?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/core.i (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/core.i Wed Jun  5 09:22:43 2013
@@ -251,6 +251,30 @@
 
 %ignore svn_opt_args_to_target_array;
 
+/* svn_cmdline.h */
+%ignore svn_cmdline_auth_plaintext_passphrase_prompt;
+%ignore svn_cmdline_auth_plaintext_prompt;
+%ignore svn_cmdline_auth_simple_prompt;
+%ignore svn_cmdline_auth_ssl_client_cert_prompt;
+%ignore svn_cmdline_auth_ssl_client_cert_pw_prompt;
+%ignore svn_cmdline_auth_ssl_server_trust_prompt;
+%ignore svn_cmdline_auth_username_prompt;
+%ignore svn_cmdline_cstring_from_utf8;
+%ignore svn_cmdline_cstring_from_utf8_fuzzy;
+%ignore svn_cmdline_cstring_to_utf8;
+%ignore svn_cmdline_fflush;
+%ignore svn_cmdline_fprintf;
+%ignore svn_cmdline_fputs;
+%ignore svn_cmdline_handle_exit_error;
+%ignore svn_cmdline_output_encoding;
+%ignore svn_cmdline_path_local_style_from_utf8;
+%ignore svn_cmdline_printf;
+%ignore svn_cmdline_prompt_baton2_t;
+%ignore svn_cmdline_prompt_baton_t;
+%ignore svn_cmdline_prompt_user2;
+%ignore svn_cmdline_prompt_user;
+%ignore svn_cmdline_setup_auth_baton;
+
 /* Ugliness because the constants are typedefed and SWIG ignores them
    as a result. */
 %constant svn_revnum_t SWIG_SVN_INVALID_REVNUM = -1;
@@ -331,19 +355,22 @@
 };
 #endif
 
-
 /* -----------------------------------------------------------------------
-   handle the default value of svn_config_get().and the
-   config directory of svn_config_read_auth_data() and
-   svn_config_write_auth_data().
+   allowable null values
 */
 %apply const char *MAY_BE_NULL {
+    /* svn_config_get */
     const char *default_value,
-    const char *config_dir,
+    /* svn_config_read_auth_data */
+    const char *config_dir, 
+    /* svn_diff_file_output_merge */
     const char *conflict_original,
     const char *conflict_modified,
     const char *conflict_latest,
-    const char *conflict_separator
+    const char *conflict_separator,
+    /* svn_cmdline_create_auth_baton */
+    const char *username,
+    const char *password
 };
 
 /* -----------------------------------------------------------------------
@@ -707,11 +734,11 @@ svn_swig_pl_set_current_pool (apr_pool_t
 
 #ifdef SWIGPYTHON
 /* pl and rb aren't yet implemented */
-%callback_typemap_maybenull(svn_auth_cleanup_func_t cleanup_func,
-                            void *cleanup_baton,
-                            svn_swig_py_auth_cleanup_func,
-                            svn_swig_pl_auth_cleanup_func,
-                            svn_swig_rb_auth_cleanup_func)
+%callback_typemap_maybenull(svn_config_auth_walk_func_t walk_func,
+                            void *walk_baton,
+                            svn_swig_py_config_auth_walk_func,
+                            svn_swig_pl_config_auth_walk_func,
+                            svn_swig_rb_config_auth_walk_func)
 #endif
 
 /* -----------------------------------------------------------------------
@@ -787,6 +814,7 @@ svn_swig_pl_set_current_pool (apr_pool_t
 #pragma SWIG nowarn=+305
 
 %include svn_opt_h.swg
+%include svn_cmdline_h.swg
 %include svn_auth_h.swg
 %include svn_config_h.swg
 %include svn_utf_h.swg

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/include/svn_containers.swg
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/include/svn_containers.swg?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/include/svn_containers.swg (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/include/svn_containers.swg Wed Jun  5 09:22:43 2013
@@ -265,6 +265,27 @@
 
 #endif
 
+#ifdef SWIGPERL
+%typemap(in) apr_hash_t *PROPHASH
+  (apr_pool_t *_global_pool = NULL)
+{
+  if (_global_pool == NULL)
+    _global_pool = svn_swig_pl_make_pool((SV *)NULL);
+  $1 = svn_swig_pl_hash_to_prophash($input, _global_pool);  
+}
+%typemap(out) apr_hash_t *PROPHASH
+{
+  %append_output(svn_swig_pl_prophash_to_hash($1));
+}
+
+%typemap(out) apr_hash_t *changed_paths2
+{
+  %append_output(
+    ($1) ? svn_swig_pl_convert_hash($1, $descriptor(svn_log_changed_path2_t *))
+         : &PL_sv_undef);
+}
+#endif
+
 #ifdef SWIGRUBY
 %typemap(in) apr_hash_t *PROPHASH
 {
@@ -291,7 +312,6 @@
 }
 #endif
 
-#if defined(SWIGPYTHON) || defined(SWIGRUBY)
 %apply apr_hash_t *PROPHASH {
   apr_hash_t *target_props,
   apr_hash_t *source_props,
@@ -300,7 +320,6 @@
   apr_hash_t *revprop_table,
   apr_hash_t *revprops
 };
-#endif
 
 #ifdef SWIGRUBY
 %typemap(out) apr_hash_t *CHANGED_PATH_HASH
@@ -581,9 +600,13 @@
 #endif
 #ifdef SWIGPERL
 %typemap(in) const apr_array_header_t *STRINGLIST {
-    $1 = (apr_array_header_t *) svn_swig_pl_strings_to_array($input,
+    $1 = svn_swig_pl_strings_to_array($input,
                                                              _global_pool);
 }
+%typemap(in) const apr_array_header_t *STRINGLIST_MAY_BE_NULL {
+    $1 = SvOK($input) ? svn_swig_pl_strings_to_array(
+        $input, _global_pool) : NULL;
+}
 #endif
 #ifdef SWIGRUBY
 %typemap(in) const apr_array_header_t *STRINGLIST {
@@ -612,7 +635,7 @@
   apr_array_header_t *preserved_exts
 };
 
-#ifdef SWIGRUBY
+#if defined(SWIGPERL) || defined(SWIGRUBY)
 %apply const apr_array_header_t *STRINGLIST_MAY_BE_NULL {
   apr_array_header_t *revprops
 };
@@ -623,7 +646,7 @@
 */
 #ifdef SWIGPERL
 %typemap(in) apr_array_header_t *providers {
-    $1 = (apr_array_header_t *) svn_swig_pl_objs_to_array($input,
+    $1 = svn_swig_pl_objs_to_array($input,
       $descriptor(svn_auth_provider_object_t *), _global_pool);
 }
 #endif
@@ -761,6 +784,12 @@
 }
 #endif
 
+#ifdef SWIGPERL
+%typemap(in) apr_array_header_t *REVISION_RANGE_LIST {
+  $1 = svn_swig_pl_array_to_apr_array_revision_range($input, _global_pool);
+}
+#endif
+
 #ifdef SWIGRUBY
 %typemap(in) apr_array_header_t *REVISION_RANGE_LIST {
   $1 = svn_swig_rb_array_to_apr_array_revision_range($input, _global_pool);

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/include/svn_types.swg
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/include/svn_types.swg?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/include/svn_types.swg (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/include/svn_types.swg Wed Jun  5 09:22:43 2013
@@ -708,28 +708,10 @@ svn_ ## TYPE ## _swig_rb_closed(VALUE se
    svn_repos_get_logs()
 */
 
-#ifdef SWIGPYTHON
-%typemap(in) (svn_log_message_receiver_t receiver,
-                      void *receiver_baton) {
-    $1 = svn_swig_py_log_receiver;
-    $2 = (void *)$input;
-}
-#endif
-#ifdef SWIGPERL
-%typemap(in) (svn_log_message_receiver_t receiver,
-                     void *receiver_baton) {
-    $1 = svn_swig_pl_thunk_log_receiver;
-    $2 = (void *)$input;
-}
-#endif
-
-#ifdef SWIGRUBY
-%typemap(in) (svn_log_message_receiver_t receiver,
-                    void *receiver_baton) {
-    $1 = svn_swig_rb_log_receiver;
-    $2 = (void *)svn_swig_rb_make_baton($input, _global_svn_swig_rb_pool);
-}
-#endif
+%callback_typemap(svn_log_message_receiver_t receiver, void *receiver_baton,
+                  svn_swig_py_log_receiver,
+                  svn_swig_pl_thunk_log_receiver,
+                  svn_swig_rb_log_receiver)
 
 /* -----------------------------------------------------------------------
    Callback: svn_log_entry_receiver_t
@@ -738,21 +720,10 @@ svn_ ## TYPE ## _swig_rb_closed(VALUE se
    svn_repos_get_logs4()
 */
 
-#ifdef SWIGPYTHON
-%typemap(in) (svn_log_entry_receiver_t receiver,
-                      void *receiver_baton) {
-    $1 = svn_swig_py_log_entry_receiver;
-    $2 = (void *)$input;
-}
-#endif
-
-#ifdef SWIGRUBY
-%typemap(in) (svn_log_entry_receiver_t receiver, void *receiver_baton)
-{
-  $1 = svn_swig_rb_log_entry_receiver;
-  $2 = (void *)svn_swig_rb_make_baton($input, _global_svn_swig_rb_pool);
-}
-#endif
+%callback_typemap(svn_log_entry_receiver_t receiver, void *receiver_baton,
+                  svn_swig_py_log_entry_receiver,
+                  svn_swig_pl_thunk_log_entry_receiver,
+                  svn_swig_rb_log_entry_receiver)
 
 /* -----------------------------------------------------------------------
    Callback: svn_commit_callback_t
@@ -909,7 +880,7 @@ svn_ ## TYPE ## _swig_rb_closed(VALUE se
    Callback: svn_repos_freeze_func_t
 */
 #ifdef SWIGPYTHON
-%typemap(in) (svn_repos_freeze_func_t freeze_body, void *baton)
+%typemap(in) (svn_repos_freeze_func_t freeze_func, void *freeze_baton)
 {
   $1 = svn_swig_py_repos_freeze_func;
   $2 = (void *)$input;
@@ -917,6 +888,17 @@ svn_ ## TYPE ## _swig_rb_closed(VALUE se
 #endif
 
 /* -----------------------------------------------------------------------
+   Callback: svn_fs_freeze_func_t
+*/
+#ifdef SWIGPYTHON
+%typemap(in) (svn_fs_freeze_func_t freeze_func, void *freeze_baton)
+{
+  $1 = svn_swig_py_fs_freeze_func;
+  $2 = (void *)$input;
+}
+#endif
+
+/* -----------------------------------------------------------------------
    Callback: svn_proplist_receiver2_t
 */
 #ifdef SWIGPYTHON
@@ -1191,7 +1173,7 @@ svn_ ## TYPE ## _swig_rb_closed(VALUE se
 */
 #ifdef SWIGPERL
 %typemap(in) svn_opt_revision_t * (svn_opt_revision_t rev) {
-    $1 = svn_swig_pl_set_revision(&rev, $input);
+  $1 = svn_swig_pl_set_revision(&rev, $input, TRUE);
 }
 #endif
 

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c Wed Jun  5 09:22:43 2013
@@ -29,6 +29,10 @@
 #include <perl.h>
 #include <XSUB.h>
 
+/* Perl defines a _ macro, but SVN uses it for translations.
+ * So undefine _ after including the Perl headers. */
+#undef _
+
 #include <stdarg.h>
 #ifdef WIN32
 #include <io.h>
@@ -98,6 +102,71 @@ static void *convert_pl_revnum_t(SV *val
   return (void *)result;
 }
 
+static void *convert_pl_svn_string_t(SV *value, void *dummy, apr_pool_t *pool)
+{
+    svn_string_t *result = apr_palloc(pool, sizeof(svn_string_t));
+    /* just the in typemap for svn_string_t */
+    result->data = SvPV(value, result->len);
+    return (void *)result;
+}
+
+/* Convert a revision range and return a svn_opt_revision_range_t*.
+ * Value can be:
+ * - a _p_svn_opt_revision_range_t object
+ * - a reference to a two-element array, [start, end],
+ *   where start and end is anything accepted by svn_swig_pl_set_revision
+ * If value is not acceptable and *(svn_boolean_t *)ctx is FALSE,
+ * convert_pl_revision_range returns NULL, otherwise it croak()s.
+ */
+static void *convert_pl_revision_range(SV *value, void *ctx, apr_pool_t *pool)
+{
+    svn_boolean_t croak_on_error = *(svn_boolean_t *)ctx;
+
+    if (sv_isobject(value) && sv_derived_from(value, "_p_svn_opt_revision_range_t")) {
+        svn_opt_revision_range_t *range;
+        /* this will assign to range */
+        SWIG_ConvertPtr(value, (void **)&range, _SWIG_TYPE("svn_opt_revision_range_t *"), 0);
+        return range;
+    } 
+
+    if (SvROK(value) 
+        && SvTYPE(SvRV(value)) == SVt_PVAV
+        && av_len((AV *)SvRV(value)) == 1) {    
+        /* value is a two-element ARRAY */
+        AV* array = (AV *)SvRV(value);
+        svn_opt_revision_t temp_start, temp_end;
+        svn_opt_revision_t *start, *end;
+        svn_opt_revision_range_t *range;
+
+        /* Note: Due to how svn_swig_pl_set_revision works,
+         * either the passed in svn_opt_revision_t is modified
+         * (and the original pointer returned) or a different pointer 
+         * is returned. svn_swig_pl_set_revision may return NULL
+         * only if croak_on_error is FALSE.
+         */
+        start = svn_swig_pl_set_revision(&temp_start, 
+                                         *av_fetch(array, 0, 0), croak_on_error);
+        if (start == NULL)
+            return NULL;
+        end = svn_swig_pl_set_revision(&temp_end, 
+                                       *av_fetch(array, 1, 0), croak_on_error);
+        if (end == NULL)
+            return NULL;
+
+        /* allocate a new range and copy in start and end fields */
+        range = apr_palloc(pool, sizeof(*range));
+        range->start = *start;
+        range->end = *end;
+        return range;
+    } 
+
+    if (croak_on_error)
+        croak("unknown revision range: "
+              "must be an array of length 2 whose elements are acceptable "
+              "as opt_revision_t or a _p_svn_opt_revision_range_t object");
+    return NULL;
+}
+
 /* perl -> c hash convertors */
 static apr_hash_t *svn_swig_pl_to_hash(SV *source,
                                        pl_element_converter_t cv,
@@ -156,11 +225,15 @@ apr_hash_t *svn_swig_pl_objs_to_hash_of_
                              NULL, pool);
 }
 
+apr_hash_t *svn_swig_pl_hash_to_prophash(SV *source, apr_pool_t *pool)
+{
+  return svn_swig_pl_to_hash(source, convert_pl_svn_string_t, NULL, pool);
+}
+
 /* perl -> c array convertors */
-static const
-apr_array_header_t *svn_swig_pl_to_array(SV *source,
-                                         pl_element_converter_t cv,
-                                         void *ctx, apr_pool_t *pool)
+static apr_array_header_t *svn_swig_pl_to_array(SV *source,
+                                                pl_element_converter_t cv,
+                                                void *ctx, apr_pool_t *pool)
 {
     int targlen;
     apr_array_header_t *temp;
@@ -189,21 +262,57 @@ apr_array_header_t *svn_swig_pl_to_array
     return temp;
 }
 
-const apr_array_header_t *svn_swig_pl_strings_to_array(SV *source,
+apr_array_header_t *svn_swig_pl_strings_to_array(SV *source,
                                                        apr_pool_t *pool)
 {
   return svn_swig_pl_to_array(source, convert_pl_string, NULL, pool);
 }
 
-const apr_array_header_t *svn_swig_pl_objs_to_array(SV *source,
-						    swig_type_info *tinfo,
-						    apr_pool_t *pool)
+apr_array_header_t *svn_swig_pl_objs_to_array(SV *source,
+					      swig_type_info *tinfo,
+					      apr_pool_t *pool)
 {
   return svn_swig_pl_to_array(source,
                               (pl_element_converter_t)convert_pl_obj,
                               tinfo, pool);
 }
 
+/* Convert a single revision range or an array of revisions ranges
+ * Note: We can't simply use svn_swig_pl_to_array() as is, since 
+ * it immediatley checks whether source is an array reference and then
+ * proceeds to treat this as the "array of ..." case. But a revision range
+ * may be specified as a (two-element) array. Hence we first try to
+ * convert source as a single revision range. Failing that and if it's
+ * an array we then call svn_swig_pl_to_array(). Otherwise we croak().
+ */
+apr_array_header_t *svn_swig_pl_array_to_apr_array_revision_range(
+        SV *source, apr_pool_t *pool)
+{
+    svn_boolean_t croak_on_error = FALSE;
+    svn_opt_revision_range_t *range;
+
+    if (range = convert_pl_revision_range(source, &croak_on_error, pool)) {
+        apr_array_header_t *temp = apr_array_make(pool, 1, 
+                                                  sizeof(svn_opt_revision_range_t *));
+        temp->nelts = 1;
+        APR_ARRAY_IDX(temp, 0, svn_opt_revision_range_t *) = range;
+        return temp;
+    }
+
+    if (SvROK(source) && SvTYPE(SvRV(source)) == SVt_PVAV) {
+        croak_on_error = TRUE;
+        return svn_swig_pl_to_array(source, convert_pl_revision_range, 
+                                    &croak_on_error, pool);
+    }
+
+    croak("must pass a single revision range or a reference to an array of revision ranges");
+
+    /* This return is actually unreachable because of the croak above,
+     * however, Visual Studio's compiler doesn't like if all paths don't have
+     * a return and errors out otherwise. */ 
+    return NULL;
+}
+
 /* element convertors for c -> perl */
 typedef SV *(*element_converter_t)(void *value, void *ctx);
 
@@ -313,11 +422,16 @@ SV *svn_swig_pl_revnums_to_list(const ap
 {
     return convert_array(array, (element_converter_t)convert_svn_revnum_t,
                          NULL);
-} 
+}
 
 /* perl -> c svn_opt_revision_t conversion */
-svn_opt_revision_t *svn_swig_pl_set_revision(svn_opt_revision_t *rev, SV *source)
+svn_opt_revision_t *svn_swig_pl_set_revision(svn_opt_revision_t *rev, 
+                                             SV *source, 
+                                             svn_boolean_t croak_on_error)
 {
+#define maybe_croak(argv) do { if (croak_on_error) croak argv; \
+                               else return NULL; } while (0)
+
     if (source == NULL || source == &PL_sv_undef || !SvOK(source)) {
         rev->kind = svn_opt_revision_unspecified;
     }
@@ -348,33 +462,34 @@ svn_opt_revision_t *svn_swig_pl_set_revi
 
             char *end = strchr(input,'}');
             if (!end)
-                croak("unknown opt_revision_t string \"%s\": "
-                      "missing closing brace for \"{DATE}\"", input);
+                maybe_croak(("unknown opt_revision_t string \"%s\": "
+                             "missing closing brace for \"{DATE}\"", input));
             *end = '\0';
             err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
                                   svn_swig_pl_make_pool ((SV *)NULL));
             if (err) {
                 svn_error_clear (err);
-                croak("unknown opt_revision_t string \"{%s}\": "
-                      "internal svn_parse_date error", input + 1);
+                maybe_croak(("unknown opt_revision_t string \"{%s}\": "
+                             "internal svn_parse_date error", input + 1));
             }
             if (!matched)
-                croak("unknown opt_revision_t string \"{%s}\": "
-                      "svn_parse_date failed to parse it", input + 1);
+                maybe_croak(("unknown opt_revision_t string \"{%s}\": "
+                             "svn_parse_date failed to parse it", input + 1));
 
             rev->kind = svn_opt_revision_date;
             rev->value.date = tm;
         } else
-            croak("unknown opt_revision_t string \"%s\": must be one of "
-                  "\"BASE\", \"HEAD\", \"WORKING\", \"COMMITTED\", "
-                  "\"PREV\" or a \"{DATE}\"", input);
+            maybe_croak(("unknown opt_revision_t string \"%s\": must be one of "
+                         "\"BASE\", \"HEAD\", \"WORKING\", \"COMMITTED\", "
+                         "\"PREV\" or a \"{DATE}\"", input));
     } else
-        croak("unknown opt_revision_t type: must be undef, a number, "
-              "a string (one of \"BASE\", \"HEAD\", \"WORKING\", "
-              "\"COMMITTED\", \"PREV\" or a \"{DATE}\") "
-              "or a _p_svn_opt_revision_t object");
+        maybe_croak(("unknown opt_revision_t type: must be undef, a number, "
+                     "a string (one of \"BASE\", \"HEAD\", \"WORKING\", "
+                     "\"COMMITTED\", \"PREV\" or a \"{DATE}\") "
+                     "or a _p_svn_opt_revision_t object"));
 
     return rev;
+#undef maybe_croak
 }
 
 /* put the va_arg in stack and invoke caller_func with func.
@@ -911,6 +1026,24 @@ svn_error_t *svn_swig_pl_thunk_log_recei
     return SVN_NO_ERROR;
 }
 
+svn_error_t *svn_swig_pl_thunk_log_entry_receiver(void *baton,
+                                                  svn_log_entry_t *log_entry,
+                                                  apr_pool_t *pool)
+{
+    SV *receiver = baton;
+
+    if (!SvOK(receiver))
+	return SVN_NO_ERROR;
+
+    svn_swig_pl_callback_thunk(CALL_SV,
+                               receiver, NULL,
+                               "SS", 
+                               log_entry, _SWIG_TYPE("svn_log_entry_t *"),
+                               pool, POOLINFO);
+
+    return SVN_NO_ERROR;
+}
+
 svn_error_t * svn_swig_pl_thunk_client_diff_summarize_func(
                      const svn_client_diff_summarize_t *diff,
                      void *baton,
@@ -983,7 +1116,7 @@ svn_error_t *svn_swig_pl_thunk_commit_ca
     return SVN_NO_ERROR;
 }
 
-svn_error_t *svn_swig_pl_thunk_commit_callback2(const svn_commit_info_t *commit_info, 
+svn_error_t *svn_swig_pl_thunk_commit_callback2(const svn_commit_info_t *commit_info,
                                                 void *baton,
                                                 apr_pool_t *pool)
 {

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h Wed Jun  5 09:22:43 2013
@@ -29,6 +29,10 @@
 #include <perl.h>
 #include <XSUB.h>
 
+/* Perl defines a _ macro, but SVN uses it for translations.
+ * So undefine _ after including the Perl headers. */
+#undef _
+
 #include <apr.h>
 #include <apr_pools.h>
 #include <apr_strings.h>
@@ -81,7 +85,7 @@ SV *svn_swig_pl_convert_hash(apr_hash_t 
 
 SV *svn_swig_pl_convert_hash_of_revnum_t(apr_hash_t *hash);
 
-const apr_array_header_t *svn_swig_pl_strings_to_array(SV *source,
+apr_array_header_t *svn_swig_pl_strings_to_array(SV *source,
                                                        apr_pool_t *pool);
 
 apr_hash_t *svn_swig_pl_strings_to_hash(SV *source,
@@ -93,9 +97,12 @@ apr_hash_t *svn_swig_pl_objs_to_hash_by_
                                              apr_pool_t *pool);
 apr_hash_t *svn_swig_pl_objs_to_hash_of_revnum_t(SV *source,
                                                  apr_pool_t *pool);
-const apr_array_header_t *svn_swig_pl_objs_to_array(SV *source,
+apr_hash_t *svn_swig_pl_hash_to_prophash(SV *source, apr_pool_t *pool);
+apr_array_header_t *svn_swig_pl_objs_to_array(SV *source,
                                                     swig_type_info *tinfo,
                                                     apr_pool_t *pool);
+apr_array_header_t *svn_swig_pl_array_to_apr_array_revision_range(
+        SV *source, apr_pool_t *pool);
 
 SV *svn_swig_pl_array_to_list(const apr_array_header_t *array);
 /* Formerly used by pre-1.0 APIs. Now unused
@@ -106,10 +113,12 @@ SV *svn_swig_pl_convert_array(const apr_
 
 SV *svn_swig_pl_revnums_to_list(const apr_array_header_t *array);
 
-svn_opt_revision_t *svn_swig_pl_set_revision(svn_opt_revision_t *rev, SV *source);
+svn_opt_revision_t *svn_swig_pl_set_revision(svn_opt_revision_t *rev, 
+                                             SV *source,
+                                             svn_boolean_t croak_on_error);
 
-/* thunked log receiver function.  */
-svn_error_t * svn_swig_pl_thunk_log_receiver(void *py_receiver,
+/* thunked log_message receiver function.  */
+svn_error_t * svn_swig_pl_thunk_log_receiver(void *baton,
                                              apr_hash_t *changed_paths,
                                              svn_revnum_t rev,
                                              const char *author,
@@ -117,6 +126,11 @@ svn_error_t * svn_swig_pl_thunk_log_rece
                                              const char *msg,
                                              apr_pool_t *pool);
 
+/* thunked log_entry receiver function.  */
+svn_error_t * svn_swig_pl_thunk_log_entry_receiver(void *baton,
+                                                   svn_log_entry_t *log_entry,
+                                                   apr_pool_t *pool);
+
 /* thunked diff summarize callback.  */
 svn_error_t * svn_swig_pl_thunk_client_diff_summarize_func(
                      const svn_client_diff_summarize_t *diff,