You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2013/02/23 02:25:44 UTC
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...
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;