subversion-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From hwri...@apache.org
Subject svn commit: r1449262 [2/25] - in /subversion/branches/ev2-export: ./ build/ build/ac-macros/ build/generator/ build/generator/swig/ build/generator/templates/ build/win32/ contrib/server-side/fsfsfixer/fixer/ contrib/server-side/svncutter/ notes/ notes...
Date Sat, 23 Feb 2013 01:25:44 GMT
Modified: subversion/branches/ev2-export/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c?rev=1449262&r1=1449261&r2=1449262&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c (original)
+++ subversion/branches/ev2-export/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c Sat Feb 23 01:25:38 2013
@@ -36,6 +36,7 @@
 
 #include "svn_pools.h"
 #include "svn_opt.h"
+#include "svn_time.h"
 #include "svn_private_config.h"
 
 #include "swig_perl_external_runtime.swg"
@@ -313,6 +314,68 @@ SV *svn_swig_pl_revnums_to_list(const ap
                          NULL);
 } 
 
+/* perl -> c svn_opt_revision_t conversion */
+svn_opt_revision_t *svn_swig_pl_set_revision(svn_opt_revision_t *rev, SV *source)
+{
+    if (source == NULL || source == &PL_sv_undef || !SvOK(source)) {
+        rev->kind = svn_opt_revision_unspecified;
+    }
+    else if (sv_isobject(source) && sv_derived_from(source, "_p_svn_opt_revision_t")) {
+        /* this will assign to rev */
+        SWIG_ConvertPtr(source, (void **)&rev, _SWIG_TYPE("svn_opt_revision_t *"), 0);
+    }
+    else if (looks_like_number(source)) {
+        rev->kind = svn_opt_revision_number;
+        rev->value.number = SvIV(source);
+    }
+    else if (SvPOK(source)) {
+        char *input = SvPV_nolen(source);
+        if (svn_cstring_casecmp(input, "BASE") == 0)
+            rev->kind = svn_opt_revision_base;
+        else if (svn_cstring_casecmp(input, "HEAD") == 0)
+            rev->kind = svn_opt_revision_head;
+        else if (svn_cstring_casecmp(input, "WORKING") == 0)
+            rev->kind = svn_opt_revision_working;
+        else if (svn_cstring_casecmp(input, "COMMITTED") == 0)
+            rev->kind = svn_opt_revision_committed;
+        else if (svn_cstring_casecmp(input, "PREV") == 0)
+            rev->kind = svn_opt_revision_previous;
+        else if (*input == '{') {
+            svn_boolean_t matched;
+            apr_time_t tm;
+            svn_error_t *err;
+
+            char *end = strchr(input,'}');
+            if (!end)
+                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);
+            }
+            if (!matched)
+                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);
+    } 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");
+
+    return rev;
+}
+
 /* put the va_arg in stack and invoke caller_func with func.
    fmt:
    * O: perl object

Modified: subversion/branches/ev2-export/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h?rev=1449262&r1=1449261&r2=1449262&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h (original)
+++ subversion/branches/ev2-export/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h Sat Feb 23 01:25:38 2013
@@ -106,6 +106,8 @@ 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);
+
 /* thunked log receiver function.  */
 svn_error_t * svn_swig_pl_thunk_log_receiver(void *py_receiver,
                                              apr_hash_t *changed_paths,

Modified: subversion/branches/ev2-export/subversion/bindings/swig/perl/native/Core.pm
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/bindings/swig/perl/native/Core.pm?rev=1449262&r1=1449261&r2=1449262&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/bindings/swig/perl/native/Core.pm (original)
+++ subversion/branches/ev2-export/subversion/bindings/swig/perl/native/Core.pm Sat Feb 23 01:25:38 2013
@@ -774,8 +774,8 @@ use SVN::Base qw(Core svn_opt_revision_t
 
 =cut
 
-package _p_svn_opt_revision_t_value;
-use SVN::Base qw(Core svn_opt_revision_t_value_);
+package _p_svn_opt_revision_value_t;
+use SVN::Base qw(Core svn_opt_revision_value_t_);
 
 package _p_svn_config_t;
 use SVN::Base qw(Core svn_config_);

Modified: subversion/branches/ev2-export/subversion/bindings/swig/perl/native/Ra.pm
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/bindings/swig/perl/native/Ra.pm?rev=1449262&r1=1449261&r2=1449262&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/bindings/swig/perl/native/Ra.pm (original)
+++ subversion/branches/ev2-export/subversion/bindings/swig/perl/native/Ra.pm Sat Feb 23 01:25:38 2013
@@ -257,9 +257,9 @@ on the directory.  This means I<all> pro
 the user and stored in the repository fs, but non-tweakable ones
 generated by the SCM system itself (e.g. 'wcprops', 'entryprops', etc).
 
-    my ($dirents, undef, $props) = $ra->get_dir('/trunk/dir', 123);
+    my ($dirents, undef, $props) = $ra->get_dir('trunk/dir', 123);
     my ($dirents, $fetched_revnum, $props) = $ra->get_dir(
-        '/trunk/dir', $SVN::Core::INVALID_REVNUM);
+        'trunk/dir', $SVN::Core::INVALID_REVNUM);
 
 =item $ra-E<gt>get_file($path, $revnum, $fh)
 
@@ -281,15 +281,15 @@ the user and stored in the repository fs
 generated by the SCM system itself (e.g. 'wcprops', 'entryprops', etc).
 
     my (undef, $props) = $ra->get_file(
-        '/trunk/foo', 123, undef);
+        'trunk/foo', 123, undef);
 
     open my $fh, '>', 'tmp_out'
         or die "error opening file: $!";
     my (undef, $props) = $ra->get_file(
-        '/trunk/foo', 123, $fh);
+        'trunk/foo', 123, $fh);
 
     my ($fetched_revnum, $props) = $ra->get_file(
-        '/trunk/foo', $SVN::Core::INVALID_REVNUM, $fh);
+        'trunk/foo', $SVN::Core::INVALID_REVNUM, $fh);
 
 =item $ra-E<gt>get_file_revs($path, $start, $end, \&callback)
 

Modified: subversion/branches/ev2-export/subversion/bindings/swig/perl/native/Wc.pm
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/bindings/swig/perl/native/Wc.pm?rev=1449262&r1=1449261&r2=1449262&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/bindings/swig/perl/native/Wc.pm (original)
+++ subversion/branches/ev2-export/subversion/bindings/swig/perl/native/Wc.pm Sat Feb 23 01:25:38 2013
@@ -13,12 +13,29 @@ SVN::Wc - Subversion working copy functi
 
 Incomplete
 
-=head1 OBJECTS
-
 =cut
 
 swig_init_asp_dot_net_hack($SVN::Core::gpool);
 
+=head1 FUNCTIONS
+
+=over 4
+
+=item SVN::Wc::parse_externals_description3($parent_directory, $desc, $canonicalize_url, $pool);
+
+Parse the string $desc as an C<svn:externals> value and return a reference 
+to an array of L<_p_svn_wc_external_item2_t|svn_wc_external_item2_t> objects. 
+If $canonicalize_url is true, canonicalize the C<url> member of those objects.  
+$parent_directory is only used in constructing error strings.
+
+=back
+
+=cut
+
+=head1 OBJECTS
+
+=cut
+
 package _p_svn_wc_t;
 
 =head2 svn_wc_status2_t
@@ -228,6 +245,42 @@ package _p_svn_wc_entry_t;
 # as method.
 use SVN::Base qw(Wc svn_wc_entry_t_);
 
+=head2 svn_wc_external_item2_t
+
+=over 4
+
+=item $ext-E<gt>target_dir()
+
+The name of the subdirectory into which this external should be
+checked out.  This is relative to the parent directory that
+holds this external item.  
+
+=item $ext-E<gt>url()
+
+Where to check out from. This is possibly a relative external URL, as
+allowed in externals definitions, but without the peg revision.
+
+=item $ext-E<gt>revision()
+
+What revision to check out,
+a L<svn_opt_revision_t|SVN::Core/svn_opt_revision_t> object.
+The only valid kind()s for this are $SVN::Core::opt_revision_number,
+$SVN::Core::opt_revision_date, and $SVN::Core::opt_revision_head.
+
+=item $ext-E<gt>peg_revision()
+
+The peg revision to use when checking out, 
+a L<svn_opt_revision_t|SVN::Core/svn_opt_revision_t> object.
+The only valid kind()s for this are $SVN::Core::opt_revision_number,
+$SVN::Core::opt_revision_date, and $SVN::Core::opt_revision_head.
+
+=back
+
+=cut
+
+package _p_svn_wc_external_item2_t;
+use SVN::Base qw(Wc svn_wc_external_item2_t_);
+
 =head1 CONSTANTS
 
 =head2 SVN::Wc::Notify::Action

Modified: subversion/branches/ev2-export/subversion/bindings/swig/perl/native/t/3client.t
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/bindings/swig/perl/native/t/3client.t?rev=1449262&r1=1449261&r2=1449262&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/bindings/swig/perl/native/t/3client.t (original)
+++ subversion/branches/ev2-export/subversion/bindings/swig/perl/native/t/3client.t Sat Feb 23 01:25:38 2013
@@ -20,7 +20,7 @@
 #
 #
 
-use Test::More tests => 221;
+use Test::More tests => 223;
 use strict;
 
 # shut up about variables that are only used once.
@@ -388,6 +388,28 @@ is($ctx->log("$reposurl/dir1/new",$curre
    'log returns undef');
 
 # TEST
+my $opt_revision_head = SVN::_Core::new_svn_opt_revision_t();
+$opt_revision_head->kind($SVN::Core::opt_revision_head);
+is_deeply(get_log2($opt_revision_head),      # got
+          get_log2("HEAD"));                 # expected
+# TEST
+my $opt_revision_number = SVN::_Core::new_svn_opt_revision_t();
+$opt_revision_number->kind($SVN::Core::opt_revision_number);
+$opt_revision_number->value->number($current_rev);
+is_deeply(get_log2($opt_revision_number),    # got
+          get_log2($current_rev));           # expected
+
+sub get_log2 {
+    my ($rev) = @_;
+    my @log;
+    $ctx->log2($reposurl, $rev, $rev, 0, 0, 0, sub { 
+        my (undef, $revision, $author, $date, $msg, undef) = @_; 
+        push @log, [ $revision, $author, $date, $msg ];
+    });
+    return \@log;
+}
+
+# TEST
 is($ctx->update($wcpath,'HEAD',1),$current_rev,
    'Return from update is the current rev');
 

Modified: subversion/branches/ev2-export/subversion/bindings/swig/python/README
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/bindings/swig/python/README?rev=1449262&r1=1449261&r2=1449262&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/bindings/swig/python/README (original)
+++ subversion/branches/ev2-export/subversion/bindings/swig/python/README Sat Feb 23 01:25:38 2013
@@ -13,30 +13,51 @@ TRANSLATING PARAMETER LISTS
        pointers with new data (you know, values that are returned to
        the caller, but not as "return values") will return those
        values directly in Python.  So:
-   
-          error = foo (object **returned_obj, int blah);
-   
+
+          object_t *returned_obj;
+          SVN_ERR(svn_client_foo(&returned_obj, blah));
+
+       becomes:
+
+          returned_obj = svn.client.foo(blah)
+
+       and:
+
+          err = svn_client_foo(&returned_obj, blah);
+          if (err && err->apr_err == SVN_ERR_...)
+            /* handle it */
+
        becomes:
    
           try:
-              returned_obj = foo (blah)
+              returned_obj = svn.client.foo(blah)
           except:
               # handle it
    
      - Callback function/baton pairs get reduced to just callback
        functions, and the benefit you get from batons is gotten
-       instead through Python default arguments:
-   
-          error = foo (callback_t function, void *baton);
-   
+       instead through defining the callback function locally and
+       passing the 'baton' data in through Python default arguments.  So:
+
+          struct baton_t { userdata1, ... };
+
+          svn_error_t *cb_func(cb_arg1, ..., void *baton)
+          {
+            baton_t *b = baton;
+            /* do stuff here with b->userdata1... etc. */
+          }
+
+          /* Now use it: */
+          {
+            baton_t *b = { whatever, ... };
+            error = svn_client_foo(cb_func, b);
+          }
+
        becomes:
-   
-          try:
-              def function(callback_arg1, ..., userdata1=whatever, ...):
-                  # do stuff here
-              foo(function)
-          except:
-              # handle it
+
+          def cb_func(cb_arg1, ..., userdata1=whatever, ...):
+              # do stuff here with userdata1 etc.
+          svn.client.foo(cb_func)
 
 
 RUNNING THE TESTS

Modified: subversion/branches/ev2-export/subversion/bindings/swig/ruby/test/test_wc.rb
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/bindings/swig/ruby/test/test_wc.rb?rev=1449262&r1=1449261&r2=1449262&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/bindings/swig/ruby/test/test_wc.rb (original)
+++ subversion/branches/ev2-export/subversion/bindings/swig/ruby/test/test_wc.rb Sat Feb 23 01:25:38 2013
@@ -742,20 +742,13 @@ EOE
           adm.crawl_revisions(dir_path, reporter)
 
           property_info = {
-            :dir_changed_prop_names => [
-                                        "svn:entry:committed-date",
-                                        "svn:entry:uuid",
-                                        "svn:entry:last-author",
-                                        "svn:entry:committed-rev"
-                                       ],
             :file_changed_prop_name => prop_name,
             :file_changed_prop_value => prop_value,
           }
           sorted_result = callbacks.result.sort_by {|r| r.first.to_s}
           expected_props, actual_result = yield(property_info, sorted_result)
-          dir_changed_props, file_changed_props, empty_changed_props = expected_props
+          file_changed_props, empty_changed_props = expected_props
           assert_equal([
-                        [:dir_props_changed, @wc_path, dir_changed_props],
                         [:file_added, path2, empty_changed_props],
                         [:file_changed, path1, file_changed_props],
                        ],
@@ -767,35 +760,25 @@ EOE
 
   def test_diff_callbacks_for_backward_compatibility
     assert_diff_callbacks(:diff_editor) do |property_info, result|
-      dir_changed_prop_names = property_info[:dir_changed_prop_names]
-      dir_changed_props = dir_changed_prop_names.sort.collect do |name|
-        Svn::Core::Prop.new(name, nil)
-      end
       prop_name = property_info[:file_changed_prop_name]
       prop_value = property_info[:file_changed_prop_value]
       file_changed_props = [Svn::Core::Prop.new(prop_name, prop_value)]
       empty_changed_props = []
 
       sorted_result = result.dup
-      dir_prop_changed = sorted_result.assoc(:dir_props_changed)
-      dir_prop_changed[2] = dir_prop_changed[2].sort_by {|prop| prop.name}
 
-      [[dir_changed_props, file_changed_props, empty_changed_props],
+      [[file_changed_props, empty_changed_props],
        sorted_result]
     end
   end
 
   def test_diff_callbacks
     assert_diff_callbacks(:diff_editor2) do |property_info, result|
-      dir_changed_props = {}
-      property_info[:dir_changed_prop_names].each do |name|
-        dir_changed_props[name] = nil
-      end
       prop_name = property_info[:file_changed_prop_name]
       prop_value = property_info[:file_changed_prop_value]
       file_changed_props = {prop_name => prop_value}
       empty_changed_props = {}
-      [[dir_changed_props, file_changed_props, empty_changed_props],
+      [[file_changed_props, empty_changed_props],
        result]
     end
   end

Modified: subversion/branches/ev2-export/subversion/include/private/svn_client_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/include/private/svn_client_private.h?rev=1449262&r1=1449261&r2=1449262&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/include/private/svn_client_private.h (original)
+++ subversion/branches/ev2-export/subversion/include/private/svn_client_private.h Sat Feb 23 01:25:38 2013
@@ -226,19 +226,40 @@ svn_client__wc_node_get_origin(svn_clien
                                apr_pool_t *result_pool,
                                apr_pool_t *scratch_pool);
 
-/* Produce a diff between two files or two directories at LOCAL_ABSPATH1
- * and LOCAL_ABSPATH2, using the provided diff callbacks to show changes
- * in files. The files and directories involved may be part of a working
- * copy or they may be unversioned. For versioned files, show property
- * changes, too. */
+/* Produce a diff with depth DEPTH between two files or two directories at
+ * LOCAL_ABSPATH1 and LOCAL_ABSPATH2, using the provided diff callbacks to
+ * show changes in files. The files and directories involved may be part of
+ * a working copy or they may be unversioned. For versioned files, show
+ * property changes, too. */
 svn_error_t *
 svn_client__arbitrary_nodes_diff(const char *local_abspath1,
                                  const char *local_abspath2,
+                                 svn_depth_t depth,
                                  const svn_wc_diff_callbacks4_t *callbacks,
                                  void *callback_baton,
                                  svn_client_ctx_t *ctx,
                                  apr_pool_t *scratch_pool);
 
+/* Copy the file or directory on URL in some repository to DST_ABSPATH,
+ * copying node information and properties. Resolve URL using PEG_REV and
+ * REVISION.
+ *
+ * If URL specifies a directory, create the copy using depth DEPTH.
+ *
+ * If MAKE_PARENTS is TRUE and DST_ABSPATH doesn't have an added parent
+ * create missing parent directories
+ */
+svn_error_t *
+svn_client__copy_foreign(const char *url,
+                         const char *dst_abspath,
+                         svn_opt_revision_t *peg_revision,
+                         svn_opt_revision_t *revision,
+                         svn_depth_t depth,
+                         svn_boolean_t make_parents,
+                         svn_boolean_t already_locked,
+                         svn_client_ctx_t *ctx,
+                         apr_pool_t *scratch_pool);
+
 
 #ifdef __cplusplus
 }

Modified: subversion/branches/ev2-export/subversion/include/private/svn_fs_util.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/include/private/svn_fs_util.h?rev=1449262&r1=1449261&r2=1449262&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/include/private/svn_fs_util.h (original)
+++ subversion/branches/ev2-export/subversion/include/private/svn_fs_util.h Sat Feb 23 01:25:38 2013
@@ -30,21 +30,25 @@
 #include "svn_types.h"
 #include "svn_error.h"
 #include "svn_fs.h"
-#include "svn_dirent_uri.h"
-#include "svn_path.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif /* __cplusplus */
 
-/* Return a canonicalized version of a filesystem PATH, allocated in
-   POOL.  While the filesystem API is pretty flexible about the
-   incoming paths (they must be UTF-8 with '/' as separators, but they
-   don't have to begin with '/', and multiple contiguous '/'s are
-   ignored) we want any paths that are physically stored in the
-   underlying database to look consistent.  Specifically, absolute
-   filesystem paths should begin with '/', and all redundant and trailing '/'
-   characters be removed.
+/* Returns whether PATH is in canonical form as defined by
+   svn_fs__canonicalize_abspath().
+ */
+svn_boolean_t
+svn_fs__is_canonical_abspath(const char *path);
+
+/* Return a canonicalized version of a filesystem PATH, allocated in POOL.
+
+   While the filesystem API is pretty flexible about the incoming paths
+   (they must be UTF-8 with '/' as separators, but they don't have to
+   begin with '/', and multiple contiguous '/'s are ignored) we want any
+   paths that are physically stored in the underlying database to look
+   consistent.  Specifically, absolute filesystem paths should begin with
+   '/', and all redundant and trailing '/' characters be removed.
 
    This is similar to svn_fspath__canonicalize() but doesn't treat "."
    segments as special.
@@ -52,12 +56,6 @@ extern "C" {
 const char *
 svn_fs__canonicalize_abspath(const char *path, apr_pool_t *pool);
 
-/* Return FALSE, if a svn_fs__canonicalize_abspath will return a
-   different value than PATH (despite creating a copy).
-*/
-svn_boolean_t
-svn_fs__is_canonical_abspath(const char *path);
-
 /* If EXPECT_OPEN, verify that FS refers to an open database;
    otherwise, verify that FS refers to an unopened database.  Return
    an appropriate error if the expectation fails to match the

Modified: subversion/branches/ev2-export/subversion/include/private/svn_sqlite.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/include/private/svn_sqlite.h?rev=1449262&r1=1449261&r2=1449262&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/include/private/svn_sqlite.h (original)
+++ subversion/branches/ev2-export/subversion/include/private/svn_sqlite.h Sat Feb 23 01:25:38 2013
@@ -169,8 +169,8 @@ svn_sqlite__get_statement(svn_sqlite__st
    b     const void *              Blob data
          apr_size_t                Blob length
    r     svn_revnum_t              Revision number
-   t     const svn_token_t *       Token mapping table
-         int value                 Token value
+   t     const svn_token_map_t *   Token mapping table
+         int                       Token value
 
   Each character in FMT maps to one SQL parameter, and one or two function
   parameters, in the order they appear.
@@ -246,17 +246,25 @@ svn_sqlite__bind_checksum(svn_sqlite__st
 */
 
 /* Wrapper around sqlite3_column_blob and sqlite3_column_bytes. The return
-   value will be NULL if the column is null. If RESULT_POOL is not NULL,
-   allocate the return value (if any) in it. Otherwise, the value will
-   become invalid on the next invocation of svn_sqlite__column_* */
+   value will be NULL if the column is null.
+
+   If RESULT_POOL is not NULL, allocate the return value (if any) in it.
+   If RESULT_POOL is NULL, the return value will be valid until an
+   invocation of svn_sqlite__column_* performs a data type conversion (as
+   described in the SQLite documentation) or the statement is stepped or
+   reset or finalized. */
 const void *
 svn_sqlite__column_blob(svn_sqlite__stmt_t *stmt, int column,
                         apr_size_t *len, apr_pool_t *result_pool);
 
 /* Wrapper around sqlite3_column_text. If the column is null, then the
-   return value will be NULL. If RESULT_POOL is not NULL, allocate the
-   return value (if any) in it. Otherwise, the value will become invalid
-   on the next invocation of svn_sqlite__column_* */
+   return value will be NULL.
+
+   If RESULT_POOL is not NULL, allocate the return value (if any) in it.
+   If RESULT_POOL is NULL, the return value will be valid until an
+   invocation of svn_sqlite__column_* performs a data type conversion (as
+   described in the SQLite documentation) or the statement is stepped or
+   reset or finalized. */
 const char *
 svn_sqlite__column_text(svn_sqlite__stmt_t *stmt, int column,
                         apr_pool_t *result_pool);
@@ -298,7 +306,7 @@ svn_sqlite__column_token_null(svn_sqlite
                               int null_val);
 
 /* Return the column as a hash of const char * => const svn_string_t *.
-   If the column is null, then NULL will be stored into *PROPS. The
+   If the column is null, then set *PROPS to NULL. The
    results will be allocated in RESULT_POOL, and any temporary allocations
    will be made in SCRATCH_POOL. */
 svn_error_t *
@@ -310,7 +318,7 @@ svn_sqlite__column_properties(apr_hash_t
 
 /* Return the column as an array of depth-first ordered array of
    svn_prop_inherited_item_t * structures.  If the column is null, then
-   *props is set to NULL. The results will be allocated in RESULT_POOL,
+   set *IPROPS to NULL. The results will be allocated in RESULT_POOL,
    and any temporary allocations will be made in SCRATCH_POOL. */
 svn_error_t *
 svn_sqlite__column_iprops(apr_array_header_t **iprops,

Modified: subversion/branches/ev2-export/subversion/include/private/svn_temp_serializer.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/include/private/svn_temp_serializer.h?rev=1449262&r1=1449261&r2=1449262&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/include/private/svn_temp_serializer.h (original)
+++ subversion/branches/ev2-export/subversion/include/private/svn_temp_serializer.h Sat Feb 23 01:25:38 2013
@@ -31,8 +31,7 @@
 #ifndef SVN_TEMP_SERIALIZER_H
 #define SVN_TEMP_SERIALIZER_H
 
-#include <apr.h>
-#include "svn_types.h"
+#include "svn_string.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -42,6 +41,14 @@ extern "C" {
 struct svn_stringbuf_t;
 
 /**
+ * The amount of extra memory allocated by #svn_temp_serializer__init for
+ * the internal buffer in addition to its suggested_buffer_size parameter.
+ * To allocate a 512 buffer, including overhead, just specify a size of
+ * 512 - SVN_TEMP_SERIALIZER__OVERHEAD.
+ */
+#define SVN_TEMP_SERIALIZER__OVERHEAD (sizeof(svn_stringbuf_t) + 1)
+
+/**
  * Opaque structure controlling the serialization process and holding the
  * intermediate as well as final results.
  */
@@ -68,7 +75,7 @@ typedef struct svn_temp_serializer__cont
  * serialized. This scheme allows only for tree-like, i.e. non-circular
  * data structures.
  *
- * @return the serization context.
+ * @return the serialization context.
  */
 svn_temp_serializer__context_t *
 svn_temp_serializer__init(const void *source_struct,
@@ -94,7 +101,7 @@ svn_temp_serializer__init(const void *so
  * @a source_struct first, get the result from svn_temp_serializer__get()
  * and call svn_temp_serializer__init_append for the next part.
  *
- * @return the serization context.
+ * @return the serialization context.
  */
 svn_temp_serializer__context_t *
 svn_temp_serializer__init_append(void *buffer,
@@ -126,7 +133,7 @@ svn_temp_serializer__push(svn_temp_seria
 
 /**
  * End the serialization of the current sub-structure. The serialization
- * @a context will be focussed back on the parent structure. You may then
+ * @a context will be focused back on the parent structure. You may then
  * add further sub-structures starting from that level.
  *
  * It is not necessary to call this function just for symmetry at the end
@@ -179,7 +186,7 @@ svn_temp_serializer__get(svn_temp_serial
  * automatically) and resolve all pointers to sub-structures.
  *
  * To do the latter, call this function for each of these pointers, giving
- * the start address of the copyied buffer in @a buffer and a reference to
+ * the start address of the copied buffer in @a buffer and a reference to
  * the pointer to resolve in @a ptr.
  */
 void

Modified: subversion/branches/ev2-export/subversion/include/private/svn_wc_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/include/private/svn_wc_private.h?rev=1449262&r1=1449261&r2=1449262&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/include/private/svn_wc_private.h (original)
+++ subversion/branches/ev2-export/subversion/include/private/svn_wc_private.h Sat Feb 23 01:25:38 2013
@@ -39,6 +39,7 @@
 
 #include "svn_types.h"
 #include "svn_wc.h"
+#include "private/svn_diff_tree.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -301,6 +302,12 @@ svn_wc__get_tree_conflict(const svn_wc_c
 /** Record the tree conflict described by @a conflict in the WC for
  * @a conflict->local_abspath.  Use @a scratch_pool for all temporary
  * allocations.
+ *
+ * Returns an SVN_ERR_WC_PATH_UNEXPECTED_STATUS error when
+ * CONFLICT->LOCAL_ABSPATH is already tree conflicted.
+ *
+ * ### This function can't set moved_away, moved_here conflicts for
+ *     any operation, except merges.
  */
 svn_error_t *
 svn_wc__add_tree_conflict(svn_wc_context_t *wc_ctx,
@@ -414,18 +421,21 @@ svn_wc__node_get_children(const apr_arra
 
 
 /**
- * Fetch the repository root information for the working version
- * of the node at @a local_abspath into @a *repos_root_url
- * and @a *repos_uuid. Use @a wc_ctx to access the working copy
- * for @a local_abspath, @a scratch_pool for all temporary allocations,
- * @a result_pool for result allocations. Note: the results will be NULL if
- * the node does not exist or is not under version control. If the node is
- * locally added, return the repository root it will have if committed.
+ * Fetch the repository information for the working version
+ * of the node at @a local_abspath into @a *revision, @a *repos_relpath,
+ * @a *repos_root_url and @a *repos_uuid. Use @a wc_ctx to access the working
+ * copy. Allocate results in @a result_pool.
  *
- * Either output argument may be NULL, indicating no interest.
+ * @a *revision will be set to SVN_INVALID_REVNUM for any shadowed node (including
+ * added and deleted nodes). All other output values will be set to the current
+ * values or those they would have after a commit.
+ *
+ * All output argument may be NULL, indicating no interest.
  */
 svn_error_t *
-svn_wc__node_get_repos_info(const char **repos_root_url,
+svn_wc__node_get_repos_info(svn_revnum_t *revision,
+                            const char **repos_relpath,
+                            const char **repos_root_url,
                             const char **repos_uuid,
                             svn_wc_context_t *wc_ctx,
                             const char *local_abspath,
@@ -516,22 +526,6 @@ svn_wc__node_get_origin(svn_boolean_t *i
                         apr_pool_t *result_pool,
                         apr_pool_t *scratch_pool);
 
-
-/**
- * Set @a *repos_relpath to the corresponding repos_relpath for @a
- * local_abspath, using @a wc_ctx. If the node is added, return the
- * repos_relpath it will have in the repository.
- *
- * If @a local_abspath is not in the working copy, return @c
- * SVN_ERR_WC_PATH_NOT_FOUND.
- * */
-svn_error_t *
-svn_wc__node_get_repos_relpath(const char **repos_relpath,
-                               svn_wc_context_t *wc_ctx,
-                               const char *local_abspath,
-                               apr_pool_t *result_pool,
-                               apr_pool_t *scratch_pool);
-
 /**
  * Set @a *is_deleted to TRUE if @a local_abspath is deleted, using
  * @a wc_ctx.  If @a local_abspath is not in the working copy, return
@@ -570,6 +564,8 @@ svn_wc__node_get_deleted_ancestor(const 
  * @a local_abspath has status svn_wc__db_status_excluded. Set
  * @a *server_excluded to TRUE when @a local_abspath has status
  * svn_wc__db_status_server_excluded. Otherwise set these values to FALSE.
+ * If @a base_only is TRUE then only the base node will be examined,
+ * otherwise the current base or working node will be examined.
  *
  * If a value is not interesting you can pass #NULL.
  *
@@ -583,6 +579,7 @@ svn_wc__node_is_not_present(svn_boolean_
                             svn_boolean_t *server_excluded,
                             svn_wc_context_t *wc_ctx,
                             const char *local_abspath,
+                            svn_boolean_t base_only,
                             apr_pool_t *scratch_pool);
 
 /**
@@ -619,14 +616,14 @@ svn_wc__node_has_working(svn_boolean_t *
 /**
  * Get the repository location of the base node at @a local_abspath.
  *
- * Set *REVISION, *REPOS_RELPATH, *REPOS_ROOT_URL and *REPOS_UUID to the
- * location that this node was checked out at or last updated/switched to,
- * regardless of any uncommitted changes (delete, replace and/or
- * copy-here/move-here).
+ * Set *REVISION, *REPOS_RELPATH, *REPOS_ROOT_URL *REPOS_UUID and *LOCK_TOKEN
+ * to the location that this node was checked out at or last updated/switched
+ * to, regardless of any uncommitted changes (delete, replace and/or copy-here/
+ * move-here).
  *
  * If there is no base node at @a local_abspath (such as when there is a
  * locally added/copied/moved-here node that is not part of a replace),
- * return @c SVN_INVALID_REVNUM/NULL/NULL/NULL.
+ * return @c SVN_INVALID_REVNUM/NULL/NULL/NULL/NULL.
  *
  * All output arguments may be NULL.
  *
@@ -638,6 +635,7 @@ svn_wc__node_get_base(svn_revnum_t *revi
                       const char **repos_relpath,
                       const char **repos_root_url,
                       const char **repos_uuid,
+                      const char **lock_token,
                       svn_wc_context_t *wc_ctx,
                       const char *local_abspath,
                       apr_pool_t *result_pool,
@@ -678,30 +676,6 @@ svn_wc__node_get_pre_ng_status_data(svn_
                                     apr_pool_t *scratch_pool);
 
 /**
- * Fetch lock information (if any) for @a local_abspath using @a wc_ctx:
- *
- *   Set @a *lock_token to the lock token (or NULL)
- *   Set @a *lock_owner to the owner of the lock (or NULL)
- *   Set @a *lock_comment to the comment associated with the lock (or NULL)
- *   Set @a *lock_date to the timestamp of the lock (or 0)
- *
- * Any of the aforementioned return values may be NULL to indicate
- * that the caller doesn't care about those values.
- *
- * If @a local_abspath is not in the working copy, return @c
- * SVN_ERR_WC_PATH_NOT_FOUND.
- */
-svn_error_t *
-svn_wc__node_get_lock_info(const char **lock_token,
-                           const char **lock_owner,
-                           const char **lock_comment,
-                           apr_time_t *lock_date,
-                           svn_wc_context_t *wc_ctx,
-                           const char *local_abspath,
-                           apr_pool_t *result_pool,
-                           apr_pool_t *scratch_pool);
-
-/**
  * Acquire a recursive write lock for @a local_abspath.  If @a lock_anchor
  * is true, determine if @a local_abspath has an anchor that should be locked
  * instead; otherwise, @a local_abspath must be a versioned directory.
@@ -1135,6 +1109,12 @@ svn_wc__get_not_present_descendants(cons
  * If DELETED is not NULL, set *DELETED to TRUE if the node is marked as
  * deleted in the working copy.
  *
+ * If EXCLUDED is not NULL, set *EXCLUDED to TRUE if the node is marked as
+ * user or server excluded.
+ *
+ * If PARENT_DEPTH is not NULL, set *PARENT_DEPTH to the depth stored on the
+ * parent. (Set to svn_depth_unknown if LOCAL_ABSPATH itself exists as node)
+ *
  * All output arguments except OBSTRUCTION_STATE can be NULL to ommit the
  * result.
  *
@@ -1144,6 +1124,8 @@ svn_error_t *
 svn_wc__check_for_obstructions(svn_wc_notify_state_t *obstruction_state,
                                svn_node_kind_t *kind,
                                svn_boolean_t *deleted,
+                               svn_boolean_t *excluded,
+                               svn_depth_t *parent_depth,
                                svn_wc_context_t *wc_ctx,
                                const char *local_abspath,
                                svn_boolean_t no_wcroot_check,
@@ -1697,6 +1679,56 @@ svn_wc__get_diff_editor(const svn_delta_
                         apr_pool_t *result_pool,
                         apr_pool_t *scratch_pool);
 
+/** Callback for the svn_diff_tree_processor_t wrapper, to allow handling
+ *  notifications like how the repos diff in libsvn_client does.
+ *
+ * Probably only necessary while transitioning to svn_diff_tree_processor_t
+ */
+typedef svn_error_t *
+        (*svn_wc__diff_state_handle_t)(svn_boolean_t tree_conflicted,
+                                       svn_wc_notify_state_t *state,
+                                       svn_wc_notify_state_t *prop_state,
+                                       const char *relpath,
+                                       svn_kind_t kind,
+                                       svn_boolean_t before_op,
+                                       svn_boolean_t for_add,
+                                       svn_boolean_t for_delete,
+                                       void *state_baton,
+                                       apr_pool_t *scratch_pool);
+
+/** Callback for the svn_diff_tree_processor_t wrapper, to allow handling
+ *  notifications like how the repos diff in libsvn_client does.
+ *
+ * Probably only necessary while transitioning to svn_diff_tree_processor_t
+ */
+typedef svn_error_t *
+        (*svn_wc__diff_state_close_t)(const char *relpath,
+                                      svn_kind_t kind,
+                                      void *state_baton,
+                                      apr_pool_t *scratch_pool);
+
+/** Callback for the svn_diff_tree_processor_t wrapper, to allow handling
+ *  absent nodes.
+ *
+ * Probably only necessary while transitioning to svn_diff_tree_processor_t
+ */
+typedef svn_error_t *
+        (*svn_wc__diff_state_absent_t)(const char *relpath,
+                                       void *state_baton,
+                                       apr_pool_t *scratch_pool);
+
+/** Obtains a diff processor that will drive the diff callbacks when it
+ * is invoked.
+ */
+svn_error_t *
+svn_wc__wrap_diff_callbacks(const svn_diff_tree_processor_t **diff_processor,
+                            const svn_wc_diff_callbacks4_t *callbacks,
+                            void *callback_baton,
+                            svn_boolean_t walk_deleted_dirs,
+                            apr_pool_t *result_pool,
+                            apr_pool_t *scratch_pool);
+
+
 /**
  * Assuming @a local_abspath itself or any of its children are under version
  * control or a tree conflict victim and in a state of conflict, take these
@@ -1814,6 +1846,26 @@ svn_wc__move2(svn_wc_context_t *wc_ctx,
               void *notify_baton,
               apr_pool_t *scratch_pool);
 
+
+/* During merge when we encounter added directories, we add them using
+   svn_wc_add4(), recording its original location, etc. But at that time
+   we don't have its original properties. This function allows updating the
+   BASE properties of such a special added node, but only before it receives
+   other changes.
+
+   NEW_ORIGINAL_PROPS is a new set of properties, including entry props that
+   will be applied to LOCAL_ABSPATH as pristine properties.
+
+   The copyfrom_* arguments are used to verify (some of) the assumptions of
+   this function */
+svn_error_t *
+svn_wc__complete_directory_add(svn_wc_context_t *wc_ctx,
+                               const char *local_abspath,
+                               apr_hash_t *new_original_props,
+                               const char *copyfrom_url,
+                               svn_revnum_t copyfrom_rev,
+                               apr_pool_t *scratch_pool);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: subversion/branches/ev2-export/subversion/include/svn_auth.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/include/svn_auth.h?rev=1449262&r1=1449261&r2=1449262&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/include/svn_auth.h (original)
+++ subversion/branches/ev2-export/subversion/include/svn_auth.h Sat Feb 23 01:25:38 2013
@@ -590,19 +590,25 @@ svn_auth_get_parameter(svn_auth_baton_t 
 
 /** @brief Indicates whether providers may save passwords to disk in
  * plaintext. Property value can be either SVN_CONFIG_TRUE,
- * SVN_CONFIG_FALSE, or SVN_CONFIG_ASK. */
+ * SVN_CONFIG_FALSE, or SVN_CONFIG_ASK.
+ * @since New in 1.6.
+ */
 #define SVN_AUTH_PARAM_STORE_PLAINTEXT_PASSWORDS  SVN_AUTH_PARAM_PREFIX \
                                                   "store-plaintext-passwords"
 
 /** @brief The application doesn't want any providers to save passphrase
  * to disk. Property value is irrelevant; only property's existence
- * matters. */
+ * matters.
+ * @since New in 1.6.
+ */
 #define SVN_AUTH_PARAM_DONT_STORE_SSL_CLIENT_CERT_PP \
   SVN_AUTH_PARAM_PREFIX "dont-store-ssl-client-cert-pp"
 
 /** @brief Indicates whether providers may save passphrase to disk in
  * plaintext. Property value can be either SVN_CONFIG_TRUE,
- * SVN_CONFIG_FALSE, or SVN_CONFIG_ASK. */
+ * SVN_CONFIG_FALSE, or SVN_CONFIG_ASK.
+ * @since New in 1.6.
+ */
 #define SVN_AUTH_PARAM_STORE_SSL_CLIENT_CERT_PP_PLAINTEXT \
   SVN_AUTH_PARAM_PREFIX "store-ssl-client-cert-pp-plaintext"
 
@@ -769,6 +775,40 @@ svn_auth_get_simple_provider2(
   void *prompt_baton,
   apr_pool_t *pool);
 
+/** Callback for svn_auth_cleanup_walk().
+ *
+ * Called for each credential to allow selectively removing credentials.
+ *
+ * @a cred_kind and @a realmstring specify the key of the credential (see
+ * svn_auth_first_credentials()).
+ *
+ * @a provider specifies which provider currently holds the credential.
+ *
+ * Before returning set @a *delete_cred to TRUE to remove the credential from
+ * the cache; leave @a *delete_cred unchanged or set it to FALSE to keep the
+ * credential.
+ *
+ * @since New in 1.8.
+ */
+typedef svn_error_t * (*svn_auth_cleanup_callback)(svn_boolean_t *delete_cred,
+                                                   void *cleanup_baton,
+                                                   const char *cred_kind,
+                                                   const char *realmstring,
+                                                   const char *provider,
+                                                   apr_pool_t *scratch_pool);
+
+/** Call @a cleanup with information describing each currently cached
+ * credential (in providers that support iterating). If the callback
+ * confirms that the credential should be deleted, delete it.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_auth_cleanup_walk(svn_auth_baton_t *auth_baton,
+                      svn_auth_cleanup_callback cleanup,
+                      void *cleanup_baton,
+                      apr_pool_t *scratch_pool);
+
 /** Like svn_auth_get_simple_provider2, but without the ability to
  * call the svn_auth_plaintext_prompt_func_t callback, and the provider
  * always assumes that it is allowed to store the password in plaintext.

Modified: subversion/branches/ev2-export/subversion/include/svn_client.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/include/svn_client.h?rev=1449262&r1=1449261&r2=1449262&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/include/svn_client.h (original)
+++ subversion/branches/ev2-export/subversion/include/svn_client.h Sat Feb 23 01:25:38 2013
@@ -367,7 +367,7 @@ typedef struct svn_client_proplist_item_
  *
  * The #svn_prop_inherited_item_t->path_or_url members of the
  * #svn_prop_inherited_item_t * structures in @a inherited_props are
- * URLs if @a path is a URL or if @path is a working copy path but the
+ * URLs if @a path is a URL or if @a path is a working copy path but the
  * property represented by the structure is above the working copy root (i.e.
  * the inherited property is from the cache).  In all other cases the
  * #svn_prop_inherited_item_t->path_or_url members are absolute working copy
@@ -3502,7 +3502,7 @@ svn_client_find_automatic_merge_no_wc(
  * the WC at @a target_wcpath.  The @a merge structure would typically come
  * from calling svn_client_find_automatic_merge().
  *
- * The other parameters are as in svn_client_merge4().
+ * The other parameters are as in svn_client_merge5().
  *
  * @since New in 1.8.
  */
@@ -3510,6 +3510,7 @@ svn_error_t *
 svn_client_do_automatic_merge(const svn_client_automatic_merge_t *merge,
                               const char *target_wcpath,
                               svn_depth_t depth,
+                              svn_boolean_t diff_ignore_ancestry,
                               svn_boolean_t force_delete,
                               svn_boolean_t record_only,
                               svn_boolean_t dry_run,
@@ -3588,16 +3589,14 @@ svn_client_automatic_merge_get_locations
  *
  * If @a depth is #svn_depth_unknown, use the depth of @a target_wcpath.
  *
- * @a ignore_ancestry has both of the following meanings:
+ * If @a ignore_mergeinfo is true, disable merge tracking, by treating the
+ * two sources as unrelated even if they actually have a common ancestor.
  *
- *   (1) Disable merge tracking, by treating the two sources as unrelated
- *   even if they actually have a common ancestor.
- *
- *   (2) Diff unrelated nodes as if related.  If @a ignore_ancestry is true,
- *   the 'left' and 'right' versions of a node (if they are the same kind)
- *   will be diffed as if they were related even if they are not related.
- *   Otherwise, unrelated items will be diffed as a deletion of one thing
- *   and the addition of another.
+ * If @a diff_ignore_ancestry is true, diff unrelated nodes as if related:
+ * that is, diff the 'left' and 'right' versions of a node as if they were
+ * related (if they are the same kind) even if they are not related.
+ * Otherwise, diff unrelated items as a deletion of one thing and the
+ * addition of another.
  *
  * If @a force_delete is false and the merge involves deleting a file whose
  * content differs from the source-left version, or a locally modified
@@ -3628,8 +3627,33 @@ svn_client_automatic_merge_get_locations
  * The authentication baton cached in @a ctx is used to communicate with the
  * repository.
  *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_client_merge5(const char *source1,
+                  const svn_opt_revision_t *revision1,
+                  const char *source2,
+                  const svn_opt_revision_t *revision2,
+                  const char *target_wcpath,
+                  svn_depth_t depth,
+                  svn_boolean_t ignore_mergeinfo,
+                  svn_boolean_t diff_ignore_ancestry,
+                  svn_boolean_t force_delete,
+                  svn_boolean_t record_only,
+                  svn_boolean_t dry_run,
+                  svn_boolean_t allow_mixed_rev,
+                  const apr_array_header_t *merge_options,
+                  svn_client_ctx_t *ctx,
+                  apr_pool_t *pool);
+
+/**
+ * Similar to svn_client_merge5(), but the single @a ignore_ancestry
+ * parameter maps to both @c ignore_mergeinfo and @c diff_ignore_ancestry.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
  * @since New in 1.7.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_client_merge4(const char *source1,
                   const svn_opt_revision_t *revision1,
@@ -3718,49 +3742,16 @@ svn_client_merge(const char *source1,
 
 
 /**
- * Determine the URLs and revisions needed to perform a reintegrate merge
- * from @a source_path_or_url at @a source_peg_revision into the working
- * copy at @a target_wcpath.
- *
- * Set @a *url1_p and @a *rev1_p to the left side, and @a *url2_p and
- * @a *rev2_p to the right side, URLs and revisions of the source of the
- * required two-URL merge.
- *
- * If no merge should be performed, set @a *url1_p to NULL and @a *rev1_p
- * to #SVN_INVALID_REVNUM.
- *
- * The authentication baton cached in @a ctx is used to communicate with the
- * repository.
- *
- * Allocate all the results in @a result_pool.  Use @a scratch_pool for
- * temporary allocations.
- *
- * @since New in 1.8.
- */
-svn_error_t *
-svn_client_find_reintegrate_merge(const char **url1_p,
-                                  svn_revnum_t *rev1_p,
-                                  const char **url2_p,
-                                  svn_revnum_t *rev2_p,
-                                  /* inputs */
-                                  const char *source_path_or_url,
-                                  const svn_opt_revision_t *source_peg_revision,
-                                  const char *target_wcpath,
-                                  svn_client_ctx_t *ctx,
-                                  apr_pool_t *result_pool,
-                                  apr_pool_t *scratch_pool);
-
-/**
  * Perform a reintegration merge of @a source_path_or_url at @a source_peg_revision
  * into @a target_wcpath.
  * @a target_wcpath must be a single-revision, #svn_depth_infinity,
  * pristine, unswitched working copy -- in other words, it must
  * reflect a single revision tree, the "target".  The mergeinfo on @a
  * source_path_or_url must reflect that all of the target has been merged into it.
- * Then this behaves like a merge with svn_client_merge4() from the
+ * Then this behaves like a merge with svn_client_merge5() from the
  * target's URL to the source.
  *
- * All other options are handled identically to svn_client_merge4().
+ * All other options are handled identically to svn_client_merge5().
  * The depth of the merge is always #svn_depth_infinity.
  *
  * @since New in 1.5.
@@ -3787,10 +3778,34 @@ svn_client_merge_reintegrate(const char 
  * list of provided ranges has an `unspecified' or unrecognized
  * `kind', return #SVN_ERR_CLIENT_BAD_REVISION.
  *
- * All other options are handled identically to svn_client_merge4().
+ * All other options are handled identically to svn_client_merge5().
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_client_merge_peg5(const char *source_path_or_url,
+                      const apr_array_header_t *ranges_to_merge,
+                      const svn_opt_revision_t *source_peg_revision,
+                      const char *target_wcpath,
+                      svn_depth_t depth,
+                      svn_boolean_t ignore_mergeinfo,
+                      svn_boolean_t diff_ignore_ancestry,
+                      svn_boolean_t force_delete,
+                      svn_boolean_t record_only,
+                      svn_boolean_t dry_run,
+                      svn_boolean_t allow_mixed_rev,
+                      const apr_array_header_t *merge_options,
+                      svn_client_ctx_t *ctx,
+                      apr_pool_t *pool);
+
+/**
+ * Similar to svn_client_merge_peg5(), but the single @a ignore_ancestry
+ * parameter maps to both @c ignore_mergeinfo and @c diff_ignore_ancestry.
  *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
  * @since New in 1.7.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_client_merge_peg4(const char *source_path_or_url,
                       const apr_array_header_t *ranges_to_merge,
@@ -4249,6 +4264,11 @@ svn_client_resolved(const char *path,
  *   - #svn_wc_conflict_choose_mine_conflict
  *     ###...
  *
+ *   - svn_wc_conflict_choose_unspecified
+ *     invoke @a ctx->conflict_func2 with @a ctx->conflict_baton2 to obtain
+ *     a resolution decision for each conflict.  This can be used to
+ *     implement interactive conflict resolution.
+ *
  * #svn_wc_conflict_choose_theirs_conflict and
  * #svn_wc_conflict_choose_mine_conflict are not legal for binary
  * files or properties.
@@ -4256,6 +4276,7 @@ svn_client_resolved(const char *path,
  * If @a path is not in a state of conflict to begin with, do nothing.
  * If @a path's conflict state is removed and @a ctx->notify_func2 is non-NULL,
  * call @a ctx->notify_func2 with @a ctx->notify_baton2 and @a path.
+ * ### with what notification parameters?
  *
  * If @a depth is #svn_depth_empty, act only on @a path; if
  * #svn_depth_files, resolve @a path and its conflicted file
@@ -4944,7 +4965,7 @@ svn_client_revprop_set(const char *propn
  *
  * The #svn_prop_inherited_item_t->path_or_url members of the
  * #svn_prop_inherited_item_t * structures in @a *inherited_props are
- * URLs if @a target is a URL or if @target is a working copy path but the
+ * URLs if @a target is a URL or if @a target is a working copy path but the
  * property represented by the structure is above the working copy root (i.e.
  * the inherited property is from the cache).  In all other cases the
  * #svn_prop_inherited_item_t->path_or_url members are absolute working copy

Modified: subversion/branches/ev2-export/subversion/include/svn_cmdline.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/include/svn_cmdline.h?rev=1449262&r1=1449261&r2=1449262&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/include/svn_cmdline.h (original)
+++ subversion/branches/ev2-export/subversion/include/svn_cmdline.h Sat Feb 23 01:25:38 2013
@@ -159,7 +159,7 @@ svn_cmdline_handle_exit_error(svn_error_
                               apr_pool_t *pool,
                               const char *prefix);
 
-/** A cancellation function/baton pair, and the path to the configuration
+/** A prompt function/baton pair, and the path to the configuration
  * directory. To be passed as the baton argument to the
  * @c svn_cmdline_*_prompt functions.
  *

Modified: subversion/branches/ev2-export/subversion/include/svn_config.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/include/svn_config.h?rev=1449262&r1=1449261&r2=1449262&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/include/svn_config.h (original)
+++ subversion/branches/ev2-export/subversion/include/svn_config.h Sat Feb 23 01:25:38 2013
@@ -127,6 +127,7 @@ typedef struct svn_config_t svn_config_t
 #define SVN_CONFIG_SECTION_WORKING_COPY         "working-copy"
 /** @since New in 1.8. */
 #define SVN_CONFIG_OPTION_SQLITE_EXCLUSIVE      "exclusive-locking"
+#define SVN_CONFIG_OPTION_SQLITE_EXCLUSIVE_CLIENTS  "exclusive-locking-clients"
 /** @} */
 
 /** @name Repository conf directory configuration files strings
@@ -149,6 +150,7 @@ typedef struct svn_config_t svn_config_t
 #define SVN_CONFIG_OPTION_USE_SASL                  "use-sasl"
 #define SVN_CONFIG_OPTION_MIN_SSF                   "min-encryption"
 #define SVN_CONFIG_OPTION_MAX_SSF                   "max-encryption"
+#define SVN_CONFIG_OPTION_GROUPS_DB                 "groups-db"
 
 /* For repository password database */
 #define SVN_CONFIG_SECTION_USERS                "users"

Modified: subversion/branches/ev2-export/subversion/include/svn_dav.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/include/svn_dav.h?rev=1449262&r1=1449261&r2=1449262&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/include/svn_dav.h (original)
+++ subversion/branches/ev2-export/subversion/include/svn_dav.h Sat Feb 23 01:25:38 2013
@@ -198,6 +198,13 @@ extern "C" {
  * @since New in 1.8.   */
 #define SVN_DAV_ALLOW_BULK_UPDATES "SVN-Allow-Bulk-Updates"
 
+/** Assuming the request target is a Subversion repository resource,
+ * this header is returned in the OPTIONS response to indicate whether
+ * the repository supports the merge tracking feature ("yes") or not
+ * ("no").
+ * @since New in 1.8.  */
+#define SVN_DAV_REPOSITORY_MERGEINFO "SVN-Repository-MergeInfo"
+
 /**
  * @name Fulltext MD5 headers
  *
@@ -293,33 +300,37 @@ extern "C" {
 #define SVN_DAV_NS_DAV_SVN_LOG_REVPROPS SVN_DAV_PROP_NS_DAV "svn/log-revprops"
 
 /** Presence of this in a DAV header in an OPTIONS response indicates
- * that the transmitter (in this case, the server) knows how to enforce
- * old-value atomicity in PROPPATCH (for editing revprops). */
-#define SVN_DAV_NS_DAV_SVN_ATOMIC_REVPROPS\
-            SVN_DAV_PROP_NS_DAV "svn/atomic-revprops"
-
-/** Presence of this in a DAV header in an OPTIONS response indicates
  * that the transmitter (in this case, the server) knows how to handle
  * a replay of a directory in the repository (not root). */
 #define SVN_DAV_NS_DAV_SVN_PARTIAL_REPLAY\
             SVN_DAV_PROP_NS_DAV "svn/partial-replay"
 
 /** Presence of this in a DAV header in an OPTIONS response indicates
+ * that the transmitter (in this case, the server) knows how to enforce
+ * old-value atomicity in PROPPATCH (for editing revprops).
+ * @since New in 1.7 */
+#define SVN_DAV_NS_DAV_SVN_ATOMIC_REVPROPS\
+            SVN_DAV_PROP_NS_DAV "svn/atomic-revprops"
+
+/** Presence of this in a DAV header in an OPTIONS response indicates
  * that the transmitter (in this case, the server) knows how to get
- * inherited properties. */
+ * inherited properties. 
+ * @since New in 1.8. */
 #define SVN_DAV_NS_DAV_SVN_INHERITED_PROPS \
   SVN_DAV_PROP_NS_DAV "svn/inherited-props"
 
 /** Presence of this in a DAV header in an OPTIONS response indicates
  * that the transmitter (in this case, the server) knows how to
  * properly handle ephemeral (that is, deleted-just-before-commit) FS
- * transaction properties. */
+ * transaction properties.
+ * @since New in 1.8. */
 #define SVN_DAV_NS_DAV_SVN_EPHEMERAL_TXNPROPS\
             SVN_DAV_PROP_NS_DAV "svn/ephemeral-txnprops"
 
 /** Presence of this in a DAV header in an OPTIONS response indicates
  * that the transmitter (in this case, the server) supports serving properties
- * inline in update editor when 'send-all' is 'false'. */
+ * inline in update editor when 'send-all' is 'false'.
+ * @since New in 1.8. */
 #define SVN_DAV_NS_DAV_SVN_INLINE_PROPS\
             SVN_DAV_PROP_NS_DAV "svn/inline-props"
 
@@ -330,6 +341,13 @@ extern "C" {
 #define SVN_DAV_NS_DAV_SVN_REPLAY_REV_RESOURCE\
             SVN_DAV_PROP_NS_DAV "svn/replay-rev-resource"
 
+/** Presence of this in a DAV header in an OPTIONS response indicates
+ * that the transmitter (in this case, the server) knows how to handle
+ * a reversed fetch of file versions.
+ * @since New in 1.8. */
+#define SVN_DAV_NS_DAV_SVN_GET_FILE_REVS_REVERSE\
+            SVN_DAV_PROP_NS_DAV "svn/get-file-revs-rvrs"
+
 
 /** @} */
 

Modified: subversion/branches/ev2-export/subversion/include/svn_fs.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/include/svn_fs.h?rev=1449262&r1=1449261&r2=1449262&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/include/svn_fs.h (original)
+++ subversion/branches/ev2-export/subversion/include/svn_fs.h Sat Feb 23 01:25:38 2013
@@ -277,9 +277,13 @@ typedef void (*svn_fs_progress_notify_fu
 
 /**
  * Perform backend-specific data consistency and correctness validations
- * to the Subversion filesystem located in the directory @a path.
- * Use @a scratch_pool for temporary allocations.
+ * to the Subversion filesystem (mainly the meta-data) located in the
+ * directory @a path.  Use @a scratch_pool for temporary allocations.
  *
+ * @a start and @a end are used to limit the amount of checks being done
+ * to data that is relevant to that range of revisions.  However, this is
+ * only a lower limit to the actual amount of checks being done.  The
+ * backend may not even be able to limit the errors begin reported.
  * @a start and @a end may be #SVN_INVALID_REVNUM, in which case
  * svn_repos_verify_fs2()'s semantics apply.  When @c r0 is being
  * verified, global invariants may be verified as well.
@@ -289,20 +293,30 @@ typedef void (*svn_fs_progress_notify_fu
  * order and more than once for the same revision, i.e. r2, r1, r2 would
  * be a valid sequence.
  *
+ * The optional @a cancel_func callback will be invoked as usual to allow
+ * the user to preempt this potentially lengthy operation.
+ *
  * @note You probably don't want to use this directly.  Take a look at
  * svn_repos_verify_fs2() instead, which does non-backend-specific
  * verifications as well.
  *
+ * @note To ensure a full verification using all tests and covering all
+ * revisions, you must call this function *and* #svn_fs_verify_rev.
+ * 
+ * @note Implementors, please do tests that can be done efficiently for
+ * a single revision to #svn_fs_verify_rev.  This function is meant for
+ * global checks or tests that require an expensive context setup.
+ *
  * @since New in 1.8.
  */
 svn_error_t *
 svn_fs_verify(const char *path,
-              svn_cancel_func_t cancel_func,
-              void *cancel_baton,
-              svn_fs_progress_notify_func_t notify_func,
-              void *notify_baton,
               svn_revnum_t start,
               svn_revnum_t end,
+              svn_fs_progress_notify_func_t notify_func,
+              void *notify_baton,
+              svn_cancel_func_t cancel_func,
+              void *cancel_baton,
               apr_pool_t *scratch_pool);
 
 /**
@@ -314,6 +328,13 @@ svn_fs_verify(const char *path,
  * svn_repos_verify_fs2() instead, which does non-backend-specific
  * verifications as well.
  *
+* @note To ensure a full verification using all tests and covering all
+ * revisions, you must call this function *and* #svn_fs_verify.
+ *
+ * @note Implementors, please do tests that cannot be done efficiently for
+ * a single revision to #svn_fs_verify.  This function is meant for local
+ * checks that don't require an expensive context setup.
+ *
  * @since New in 1.8.
  */
 svn_error_t *

Modified: subversion/branches/ev2-export/subversion/include/svn_hash.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/include/svn_hash.h?rev=1449262&r1=1449261&r2=1449262&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/include/svn_hash.h (original)
+++ subversion/branches/ev2-export/subversion/include/svn_hash.h Sat Feb 23 01:25:38 2013
@@ -240,6 +240,20 @@ svn_hash_from_cstring_keys(apr_hash_t **
                            const apr_array_header_t *keys,
                            apr_pool_t *pool);
 
+/* Shortcut for apr_hash_get() with a const char * key.
+ *
+ * @since New in 1.8.
+ */
+#define svn_hash_gets(ht, key) \
+            apr_hash_get(ht, key, APR_HASH_KEY_STRING)
+
+/* Shortcut for apr_hash_set() with a const char * key.
+ *
+ * @since New in 1.8.
+ */
+#define svn_hash_sets(ht, key, val) \
+            apr_hash_set(ht, key, APR_HASH_KEY_STRING, val)
+
 /** @} */
 
 /** @} */

Modified: subversion/branches/ev2-export/subversion/include/svn_props.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/include/svn_props.h?rev=1449262&r1=1449261&r2=1449262&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/include/svn_props.h (original)
+++ subversion/branches/ev2-export/subversion/include/svn_props.h Sat Feb 23 01:25:38 2013
@@ -661,18 +661,20 @@ svn_prop_name_is_valid(const char *prop_
  * @{
  */
 
-/** The prefix used for all (ephemeral) transaction properties. */
+/** The prefix used for all (ephemeral) transaction properties.
+ * @since New in 1.8. */
 #define SVN_PROP_TXN_PREFIX  SVN_PROP_PREFIX "txn-"
 
 /** Identifies the client version compability level.  For clients
  * compiled against Subversion libraries, this is @c SVN_VER_NUMBER.
  * Third-party implementations are advised to use similar formatting
  * for values of this property.
- */
+ * @since New in 1.8. */
 #define SVN_PROP_TXN_CLIENT_COMPAT_VERSION \
             SVN_PROP_TXN_PREFIX "client-compat-version"
     
-/** Identifies the client's user agent string, if any. */
+/** Identifies the client's user agent string, if any.
+ * @since New in 1.8. */
 #define SVN_PROP_TXN_USER_AGENT \
             SVN_PROP_TXN_PREFIX "user-agent"
 
@@ -683,7 +685,7 @@ svn_prop_name_is_valid(const char *prop_
  * to new properties named @c SVN_PROP_REVISION_PREFIX + "something",
  * allowing that information to survive the commit-time removal of
  * ephemeral transaction properties.
- */
+ * @since New in 1.8. */
 #define SVN_PROP_REVISION_PREFIX  SVN_PROP_PREFIX "revision-"
 
 

Modified: subversion/branches/ev2-export/subversion/include/svn_ra.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/include/svn_ra.h?rev=1449262&r1=1449261&r2=1449262&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/include/svn_ra.h (original)
+++ subversion/branches/ev2-export/subversion/include/svn_ra.h Sat Feb 23 01:25:38 2013
@@ -1675,6 +1675,10 @@ svn_ra_get_location_segments(svn_ra_sess
  * server doesn't implement it, an alternative (but much slower)
  * implementation based on svn_ra_get_log2() is used.
  *
+ * On subversion 1.8 and newer servers this function has been enabled
+ * to support reversion of the revision range for @a include_merged_revision
+ * @c FALSE reporting by switching  @a end with @a start.
+ *
  * @since New in 1.5.
  */
 svn_error_t *
@@ -2036,6 +2040,14 @@ svn_ra_has_capability(svn_ra_session_t *
 #define SVN_RA_CAPABILITY_EPHEMERAL_TXNPROPS "ephemeral-txnprops"
 
 /**
+ * The capability of a server to walk revisions backwards in
+ * svn_ra_get_file_revs2
+ *
+ * @since New in 1.8.
+ */
+#define SVN_RA_CAPABILITY_GET_FILE_REVS_REVERSE "get-file-revs-reversed"
+
+/**
  * The capability to respond to requests using Ev2, as well as accept
  * data provided by Ev2 drivers.  See svn_editor.h for further details.
  *
@@ -2043,6 +2055,7 @@ svn_ra_has_capability(svn_ra_session_t *
  */
 #define SVN_RA_CAPABILITY_EDITOR_V2 "editor-v2"
 
+
 /*       *** PLEASE READ THIS IF YOU ADD A NEW CAPABILITY ***
  *
  * RA layers generally fetch all capabilities when asked about any

Modified: subversion/branches/ev2-export/subversion/include/svn_ra_svn.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/include/svn_ra_svn.h?rev=1449262&r1=1449261&r2=1449262&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/include/svn_ra_svn.h (original)
+++ subversion/branches/ev2-export/subversion/include/svn_ra_svn.h Sat Feb 23 01:25:38 2013
@@ -66,6 +66,9 @@ extern "C" {
 #define SVN_RA_SVN_CAP_INHERITED_PROPS "inherited-props"
 /* maps to SVN_RA_CAPABILITY_EPHEMERAL_TXNPROPS */
 #define SVN_RA_SVN_CAP_EPHEMERAL_TXNPROPS "ephemeral-txnprops"
+/* maps to SVN_RA_CAPABILITY_GET_FILE_REVS_REVERSE */
+#define SVN_RA_SVN_CAP_GET_FILE_REVS_REVERSE "file-revs-reverse"
+
 
 /** ra_svn passes @c svn_dirent_t fields over the wire as a list of
  * words, these are the values used to represent each field.

Modified: subversion/branches/ev2-export/subversion/include/svn_repos.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/include/svn_repos.h?rev=1449262&r1=1449261&r2=1449262&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/include/svn_repos.h (original)
+++ subversion/branches/ev2-export/subversion/include/svn_repos.h Sat Feb 23 01:25:38 2013
@@ -247,7 +247,7 @@ typedef enum svn_repos_notify_action_t
   /** A revision was skipped during loading. @since New in 1.8. */
   svn_repos_notify_load_skipped_rev,
 
-  /** The structure of a revision is begin verified.  @since New in 1.8. */
+  /** The structure of a revision is being verified.  @since New in 1.8. */
   svn_repos_notify_verify_struc_rev
 
 } svn_repos_notify_action_t;
@@ -657,15 +657,17 @@ svn_repos_recover(const char *path,
                   apr_pool_t *pool);
 
 /**
- * Take an exclusive lock on @a path to prevent commits and then
- * invoke @a freeze_body passing @a baton.  The repository may be
- * readable by Subversion while frozen, or it may be unreadable,
- * depending on which FS backend the repository uses.
+ * Take an exclusive lock on each of the repositories in @a paths to
+ * prevent commits and then while holding all the locks invoke
+ * @a freeze_body passing @a baton.  The repositories may be readable
+ * by Subversion while frozen, or it may be unreadable, depending on
+ * which FS backend the repository uses.  Repositories are locked
+ * in array order from zero.
  *
  * @since New in 1.8.
  */
 svn_error_t *
-svn_repos_freeze(const char *path,
+svn_repos_freeze(apr_array_header_t *paths,
                  svn_error_t *(*freeze_body)(void *baton, apr_pool_t *pool),
                  void *baton,
                  apr_pool_t *pool);
@@ -1909,6 +1911,10 @@ svn_repos_fs_get_mergeinfo(svn_mergeinfo
  * If @a include_merged_revisions is TRUE, revisions which a included as a
  * result of a merge between @a start and @a end will be included.
  *
+ * Since Subversion 1.8 this function has been enabled to support reversion
+ * the revision range for @a include_merged_revision @c FALSE reporting by
+ * switching @a start with @a end.
+ *
  * @since New in 1.5.
  */
 svn_error_t *
@@ -3171,19 +3177,25 @@ svn_repos_authz_read(svn_authz_t **authz
  * url, an absolute file url, or a registry path) into @a *authz_p,
  * allocated in @a pool.
  *
- * If @a path is not a valid authz rule file, then return 
+ * If @a groups_path (a file, repos relative url, an absolute file url,
+ * or a registry path) is set, use the global groups parsed from it.
+ *
+ * If @a path or @a groups_path is not a valid authz rule file, then return
  * #SVN_ERR_AUTHZ_INVALID_CONFIG.  The contents of @a *authz_p is then
- * undefined.  If @a must_exist is TRUE, a missing authz file is also
- * an error.
+ * undefined.  If @a must_exist is TRUE, a missing authz or groups file
+ * is also an error other than #SVN_ERR_AUTHZ_INVALID_CONFIG (exact error
+ * depends on the access type).
  *
  * If @a path is a repos relative URL then @a repos_root must be set to
  * the root of the repository the authz configuration will be used with.
+ * The same applies to @a groups_path if it is being used.
  *
  * @since New in 1.8
  */
 svn_error_t *
 svn_repos_authz_read2(svn_authz_t **authz_p,
                       const char *path,
+                      const char *groups_path,
                       svn_boolean_t must_exist,
                       const char *repos_root,
                       apr_pool_t *pool);
@@ -3193,11 +3205,14 @@ svn_repos_authz_read2(svn_authz_t **auth
  * Read authz configuration data from @a stream into @a *authz_p,
  * allocated in @a pool.
  *
+ * If @a groups_stream is set, use the global groups parsed from it.
+ *
  * @since New in 1.8
  */
 svn_error_t *
 svn_repos_authz_parse(svn_authz_t **authz_p,
                       svn_stream_t *stream, 
+                      svn_stream_t *groups_stream,
                       apr_pool_t *pool);
 
 /**

Modified: subversion/branches/ev2-export/subversion/include/svn_sorts.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/include/svn_sorts.h?rev=1449262&r1=1449261&r2=1449262&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/include/svn_sorts.h (original)
+++ subversion/branches/ev2-export/subversion/include/svn_sorts.h Sat Feb 23 01:25:38 2013
@@ -208,6 +208,12 @@ svn_sort__array_delete(apr_array_header_
                        int delete_index,
                        int elements_to_delete);
 
+/* Reverse the order of elements in @a array, in place.
+ */
+void
+svn_sort__array_reverse(apr_array_header_t *array,
+                        apr_pool_t *scratch_pool);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: subversion/branches/ev2-export/subversion/include/svn_wc.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/include/svn_wc.h?rev=1449262&r1=1449261&r2=1449262&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/include/svn_wc.h (original)
+++ subversion/branches/ev2-export/subversion/include/svn_wc.h Sat Feb 23 01:25:38 2013
@@ -1245,7 +1245,11 @@ typedef enum svn_wc_notify_action_t
   /** The current operation left local changes of something that was deleted
    * The changes are available on (and below) the notified path
    * @since New in 1.8. */
-  svn_wc_notify_left_local_modifications
+  svn_wc_notify_left_local_modifications,
+
+  /** A copy from a foreign repository has started 
+   * @since New in 1.8. */
+  svn_wc_notify_foreign_copy_begin
 
 } svn_wc_notify_action_t;
 
@@ -6332,10 +6336,13 @@ svn_wc_canonicalize_svn_prop(const svn_s
  * @a show_copies_as_adds determines whether paths added with history will
  * appear as a diff against their copy source, or whether such paths will
  * appear as if they were newly added in their entirety.
+ * @a show_copies_as_adds implies not @a ignore_ancestry.
  *
  * If @a use_git_diff_format is TRUE, copied paths will be treated as added
  * if they weren't modified after being copied. This allows the callbacks
  * to generate appropriate --git diff headers for such files.
+ * @a use_git_diff_format implies @a show_copies_as_adds, and as such implies
+ * not @a ignore_ancestry.
  *
  * Normally, the difference from repository->working_copy is shown.
  * If @a reverse_order is TRUE, then show working_copy->repository diffs.
@@ -6790,10 +6797,20 @@ typedef enum svn_wc_merge_outcome_t
  * is returned in @a *merge_content_outcome.
  * ### (and what about @a *merge_props_state?)
  *
+ * ### BH: Two kinds of outcome is not how it should be.
+ *
+ * ### For text, we report the outcome as 'merged' if there was some
+ *     incoming change that we dealt with (even if we decided to no-op?)
+ *     but the callers then convert this outcome into a notification
+ *     of 'merged' only if there was already a local modification;
+ *     otherwise they notify it as simply 'updated'.  But for props
+ *     we report a notify state of 'merged' here if there was an
+ *     incoming change regardless of the local-mod state.  Inconsistent.
+ *
  * Use @a scratch_pool for any temporary allocation.
  *
  * @since New in 1.8.
- */ /* ### BH: Two kinds of outcome is not how it should be */
+ */
 svn_error_t *
 svn_wc_merge5(enum svn_wc_merge_outcome_t *merge_content_outcome,
               enum svn_wc_notify_state_t *merge_props_state,

Modified: subversion/branches/ev2-export/subversion/libsvn_client/blame.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_client/blame.c?rev=1449262&r1=1449261&r2=1449262&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_client/blame.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_client/blame.c Sat Feb 23 01:25:38 2013
@@ -54,9 +54,9 @@ struct rev
 /* One chunk of blame */
 struct blame
 {
-  struct rev *rev;    /* the responsible revision */
-  apr_off_t start;    /* the starting diff-token (line) */
-  struct blame *next; /* the next chunk */
+  const struct rev *rev;    /* the responsible revision */
+  apr_off_t start;          /* the starting diff-token (line) */
+  struct blame *next;       /* the next chunk */
 };
 
 /* A chain of blame chunks */
@@ -70,7 +70,7 @@ struct blame_chain
 /* The baton use for the diff output routine. */
 struct diff_baton {
   struct blame_chain *chain;
-  struct rev *rev;
+  const struct rev *rev;
 };
 
 /* The baton used for a file revision. */
@@ -79,7 +79,6 @@ struct file_rev_baton {
   const char *target;
   svn_client_ctx_t *ctx;
   const svn_diff_file_options_t *diff_options;
-  svn_boolean_t ignore_mime_type;
   /* name of file containing the previous revision of the file */
   const char *last_filename;
   struct rev *rev;     /* the rev for which blame is being assigned
@@ -107,7 +106,6 @@ struct delta_baton {
   svn_txdelta_window_handler_t wrapped_handler;
   void *wrapped_baton;
   struct file_rev_baton *file_rev_baton;
-  svn_stream_t *source_stream;  /* the delta source */
   const char *filename;
 };
 
@@ -118,7 +116,7 @@ struct delta_baton {
    at token START, and allocated in CHAIN->mainpool. */
 static struct blame *
 blame_create(struct blame_chain *chain,
-             struct rev *rev,
+             const struct rev *rev,
              apr_off_t start)
 {
   struct blame *blame;
@@ -217,7 +215,7 @@ blame_delete_range(struct blame_chain *c
    at token START and continuing for LENGTH tokens */
 static svn_error_t *
 blame_insert_range(struct blame_chain *chain,
-                   struct rev *rev,
+                   const struct rev *rev,
                    apr_off_t start,
                    apr_off_t length)
 {
@@ -273,8 +271,8 @@ static const svn_diff_output_fns_t outpu
         output_diff_modified
 };
 
-/* Add the blame for the diffs between LAST_FILE and CUR_FILE with the rev
-   specified in FRB.  LAST_FILE may be NULL in which
+/* Add the blame for the diffs between LAST_FILE and CUR_FILE to CHAIN,
+   for revision REV.  LAST_FILE may be NULL in which
    case blame is added for every line of CUR_FILE. */
 static svn_error_t *
 add_file_blame(const char *last_file,
@@ -306,6 +304,13 @@ add_file_blame(const char *last_file,
   return SVN_NO_ERROR;
 }
 
+/* The delta window handler for the text delta between the previously seen
+ * revision and the revision currently being handled.
+ *
+ * Record the blame information for this revision in BATON->file_rev_baton.
+ *
+ * Implements svn_txdelta_window_handler_t.
+ */
 static svn_error_t *
 window_handler(svn_txdelta_window_t *window, void *baton)
 {
@@ -320,13 +325,6 @@ window_handler(svn_txdelta_window_t *win
   if (window)
     return SVN_NO_ERROR;
 
-  /* Close the source file used for the delta.
-     It is important to do this early, since otherwise, they will be deleted
-     before all handles are closed, which leads to failures on some platforms
-     when new tempfiles are to be created. */
-  if (dbaton->source_stream)
-    SVN_ERR(svn_stream_close(dbaton->source_stream));
-
   /* If we are including merged revisions, we need to add each rev to the
      merged chain. */
   if (frb->include_merged_revisions)
@@ -376,29 +374,16 @@ window_handler(svn_txdelta_window_t *win
   return SVN_NO_ERROR;
 }
 
-/* Throw an SVN_ERR_CLIENT_IS_BINARY_FILE error if PROP_DIFFS indicates a
-   binary MIME type.  Else, return SVN_NO_ERROR. */
-static svn_error_t *
-check_mimetype(const apr_array_header_t *prop_diffs, const char *target,
-               apr_pool_t *pool)
-{
-  int i;
-
-  for (i = 0; i < prop_diffs->nelts; ++i)
-    {
-      const svn_prop_t *prop = &APR_ARRAY_IDX(prop_diffs, i, svn_prop_t);
-      if (strcmp(prop->name, SVN_PROP_MIME_TYPE) == 0
-          && prop->value
-          && svn_mime_type_is_binary(prop->value->data))
-        return svn_error_createf
-          (SVN_ERR_CLIENT_IS_BINARY_FILE, 0,
-           _("Cannot calculate blame information for binary file '%s'"),
-           svn_dirent_local_style(target, pool));
-    }
-  return SVN_NO_ERROR;
-}
-
 
+/* Calculate and record blame information for one revision of the file,
+ * by comparing the file content against the previously seen revision.
+ *
+ * This handler is called once for each interesting revision of the file.
+ *
+ * Record the blame information for this revision in (file_rev_baton) BATON.
+ *
+ * Implements svn_file_rev_handler_t.
+ */
 static svn_error_t *
 file_rev_handler(void *baton, const char *path, svn_revnum_t revnum,
                  apr_hash_t *rev_props,
@@ -417,10 +402,6 @@ file_rev_handler(void *baton, const char
   /* Clear the current pool. */
   svn_pool_clear(frb->currpool);
 
-  /* If this file has a non-textual mime-type, bail out. */
-  if (! frb->ignore_mime_type)
-    SVN_ERR(check_mimetype(prop_diffs, frb->target, frb->currpool));
-
   if (frb->ctx->notify_func2)
     {
       svn_wc_notify_t *notify
@@ -457,12 +438,10 @@ file_rev_handler(void *baton, const char
 
   /* Prepare the text delta window handler. */
   if (frb->last_filename)
-    SVN_ERR(svn_stream_open_readonly(&delta_baton->source_stream, frb->last_filename,
+    SVN_ERR(svn_stream_open_readonly(&last_stream, frb->last_filename,
                                      frb->currpool, pool));
   else
-    /* Means empty stream below. */
-    delta_baton->source_stream = NULL;
-  last_stream = svn_stream_disown(delta_baton->source_stream, pool);
+    last_stream = svn_stream_empty(frb->currpool);
 
   if (frb->include_merged_revisions && !frb->merged_revision)
     filepool = frb->filepool;
@@ -471,7 +450,7 @@ file_rev_handler(void *baton, const char
 
   SVN_ERR(svn_stream_open_unique(&cur_stream, &delta_baton->filename, NULL,
                                  svn_io_file_del_on_pool_cleanup,
-                                 filepool, filepool));
+                                 filepool, pool));
 
   /* Get window handler for applying delta. */
   svn_txdelta_apply(last_stream, cur_stream, NULL, NULL,
@@ -625,12 +604,43 @@ svn_client_blame5(const char *target,
       (SVN_ERR_CLIENT_BAD_REVISION, NULL,
        _("Start revision must precede end revision"));
 
+  /* We check the mime-type of the yougest revision before getting all
+     the older revisions. */
+  if (!ignore_mime_type)
+    {
+      apr_hash_t *props;
+      apr_hash_index_t *hi;
+
+      SVN_ERR(svn_client_propget5(&props, NULL, SVN_PROP_MIME_TYPE,
+                                  target_abspath_or_url,  peg_revision,
+                                  end, NULL, svn_depth_empty, NULL, ctx,
+                                  pool, pool));
+
+      /* props could be keyed on URLs or paths depending on the
+         peg_revision and end values so avoid using the key. */
+      hi = apr_hash_first(pool, props);
+      if (hi)
+        {
+          svn_string_t *value;
+
+          /* Should only be one value */
+          SVN_ERR_ASSERT(apr_hash_count(props) == 1);
+
+          value = svn__apr_hash_index_val(hi);
+          if (value && svn_mime_type_is_binary(value->data))
+            return svn_error_createf
+              (SVN_ERR_CLIENT_IS_BINARY_FILE, 0,
+               _("Cannot calculate blame information for binary file '%s'"),
+               (svn_path_is_url(target)
+                ? target : svn_dirent_local_style(target, pool)));
+        }
+    }
+
   frb.start_rev = start_revnum;
   frb.end_rev = end_revnum;
   frb.target = target;
   frb.ctx = ctx;
   frb.diff_options = diff_options;
-  frb.ignore_mime_type = ignore_mime_type;
   frb.include_merged_revisions = include_merged_revisions;
   frb.last_filename = NULL;
   frb.last_original_filename = NULL;



Mime
View raw message