You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by br...@apache.org on 2014/03/09 11:08:53 UTC

svn commit: r1575685 [3/13] - in /subversion/branches/fsfs-ucsnorm: ./ build/ build/ac-macros/ build/generator/ build/generator/templates/ contrib/cgi/ contrib/client-side/emacs/ contrib/client-side/svn2cl/ contrib/hook-scripts/ contrib/server-side/svn...

Modified: subversion/branches/fsfs-ucsnorm/subversion/include/svn_io.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/include/svn_io.h?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/include/svn_io.h (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/include/svn_io.h Sun Mar  9 10:08:46 2014
@@ -1217,6 +1217,14 @@ svn_stream_read_full(svn_stream_t *strea
                      char *buffer,
                      apr_size_t *len);
 
+
+/** Returns @c TRUE if the generic @c stream supports svn_stream_read2().
+ *
+ * @since New in 1.9.
+ */
+svn_boolean_t
+svn_stream_supports_partial_read(svn_stream_t *stream);
+
 /** Read all currently available upto @a *len into @a buffer. Use
  * svn_stream_read_full() if you want to wait for the buffer to be filled
  * or EOF. If the stream doesn't support limited reads this function will
@@ -1238,7 +1246,7 @@ svn_stream_read2(svn_stream_t *stream,
  * @note This function is a wrapper of svn_stream_read_full() now, which name
  * better documents the behavior of this function.
  *
- * @deprecated Provided for backward compatibilty with the 1.8 API
+ * @deprecated Provided for backward compatibility with the 1.8 API
  */
 SVN_DEPRECATED
 svn_error_t *

Modified: subversion/branches/fsfs-ucsnorm/subversion/include/svn_iter.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/include/svn_iter.h?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/include/svn_iter.h (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/include/svn_iter.h Sun Mar  9 10:08:46 2014
@@ -77,7 +77,7 @@ svn_iter_apr_hash(svn_boolean_t *complet
                   void *baton,
                   apr_pool_t *pool);
 
-/** Iteration callback used in conjuction with svn_iter_apr_array().
+/** Iteration callback used in conjunction with svn_iter_apr_array().
  *
  * Use @a pool for temporary allocation, it's cleared between invocations.
  *

Modified: subversion/branches/fsfs-ucsnorm/subversion/include/svn_mergeinfo.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/include/svn_mergeinfo.h?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/include/svn_mergeinfo.h (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/include/svn_mergeinfo.h Sun Mar  9 10:08:46 2014
@@ -145,7 +145,6 @@ typedef apr_hash_t *svn_mergeinfo_catalo
 
 /** Parse the mergeinfo from @a input into @a *mergeinfo.  If no
  * mergeinfo is available, return an empty mergeinfo (never @c NULL).
- * Perform temporary allocations in @a pool.
  *
  * If @a input is not a grammatically correct @c SVN_PROP_MERGEINFO
  * property, contains overlapping revision ranges of differing
@@ -160,6 +159,9 @@ typedef apr_hash_t *svn_mergeinfo_catalo
  * @a input may contain relative merge source paths, but these are
  * converted to absolute paths in @a *mergeinfo.
  *
+ * Allocate the result deeply in @a pool. Also perform temporary
+ * allocations in @a pool.
+ *
  * @since New in 1.5.
  */
 svn_error_t *
@@ -357,6 +359,8 @@ svn_rangelist_merge(svn_rangelist_t **ra
  * @c svn_merge_range_t inheritable field when comparing @a whiteboard's
  * and @a *eraser's rangelists for equality.  @see svn_mergeinfo_diff().
  *
+ * Allocate the entire output in @a pool.
+ *
  * @since New in 1.5.
  */
 svn_error_t *
@@ -411,6 +415,9 @@ svn_mergeinfo_intersect(svn_mergeinfo_t 
  * Note: @a rangelist1 and @a rangelist2 must be sorted as said by @c
  * svn_sort_compare_ranges(). @a *rangelist is guaranteed to be in sorted
  * order.
+ *
+ * Allocate the entire output in @a pool.
+ *
  * @since New in 1.5.
  */
 svn_error_t *
@@ -444,14 +451,21 @@ svn_rangelist_to_string(svn_string_t **o
                         const svn_rangelist_t *rangelist,
                         apr_pool_t *pool);
 
-/** Return a deep copy of @c svn_merge_range_t *'s in @a rangelist excluding
+/** Remove non-inheritable or inheritable revision ranges from a rangelist.
+ *
+ * Set @a *inheritable_rangelist to a deep copy of @a rangelist, excluding
  * all non-inheritable @c svn_merge_range_t if @a inheritable is TRUE or
- * excluding all inheritable @c svn_merge_range_t otherwise.  If @a start and
- * @a end are valid revisions and @a start is less than or equal to @a end,
- * then exclude only the non-inheritable revision ranges that intersect
- * inclusively with the range defined by @a start and @a end.  If
- * @a rangelist contains no elements, return an empty array.  Allocate the
- * copy in @a result_pool, use @a scratch_pool for temporary allocations.
+ * excluding all inheritable @c svn_merge_range_t otherwise.
+ *
+ * If @a start and @a end are valid revisions and @a start is less than or
+ * equal to @a end, then exclude only the (non-inheritable or inheritable)
+ * revision ranges that intersect inclusively with the range defined by
+ * @a start and @a end.
+ *
+ * If there are no remaining ranges, return an empty array.
+ *
+ * Allocate the copy in @a result_pool, and use @a scratch_pool for
+ * temporary allocations.
  *
  * @since New in 1.7.
  */
@@ -477,17 +491,26 @@ svn_rangelist_inheritable(svn_rangelist_
                           svn_revnum_t end,
                           apr_pool_t *pool);
 
-/** Return a deep copy of @a mergeinfo, excluding all non-inheritable
- * @c svn_merge_range_t if @a inheritable is TRUE or excluding all
- * inheritable @c svn_merge_range_t otherwise.  If @a start and @a end
- * are valid revisions and @a start is less than or equal to @a end,
- * then exclude only the non-inheritable revisions that intersect
- * inclusively with the range defined by @a start and @a end.  If @a path
- * is not NULL remove non-inheritable ranges only for @a path.  If all
- * ranges are removed for a given path then remove that path as well.
- * If all paths are removed or @a rangelist is empty then set
- * @a *inheritable_rangelist to an empty array.  Allocate the copy in
- * @a result_pool, use @a scratch_pool for temporary allocations.
+/** Remove non-inheritable or inheritable revision ranges from mergeinfo.
+ *
+ * Set @a *inheritable_mergeinfo to a deep copy of @a mergeinfo, excluding
+ * all non-inheritable @c svn_merge_range_t if @a inheritable is TRUE or
+ * excluding all inheritable @c svn_merge_range_t otherwise.
+ *
+ * If @a start and @a end are valid revisions and @a start is less than or
+ * equal to @a end, then exclude only the (non-inheritable or inheritable)
+ * revisions that intersect inclusively with the range defined by @a start
+ * and @a end.
+ *
+ * If @a path is not NULL remove (non-inheritable or inheritable) ranges
+ * only for @a path.
+ *
+ * If all ranges are removed for a given path then remove that path as well.
+ * If @a mergeinfo is initially empty or all paths are removed from it then
+ * set @a *inheritable_mergeinfo to an empty mergeinfo.
+ *
+ * Allocate the copy in @a result_pool, and use @a scratch_pool for
+ * temporary allocations.
  *
  * @since New in 1.7.
  */

Modified: subversion/branches/fsfs-ucsnorm/subversion/include/svn_props.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/include/svn_props.h?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/include/svn_props.h (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/include/svn_props.h Sun Mar  9 10:08:46 2014
@@ -671,7 +671,7 @@ svn_prop_name_is_valid(const char *prop_
  */
 #define SVN_PROP_TXN_PREFIX  SVN_PROP_PREFIX "txn-"
 
-/** Identifies the client version compability level.  For clients
+/** Identifies the client version compatibility 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.

Modified: subversion/branches/fsfs-ucsnorm/subversion/include/svn_ra.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/include/svn_ra.h?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/include/svn_ra.h (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/include/svn_ra.h Sun Mar  9 10:08:46 2014
@@ -1575,8 +1575,8 @@ svn_ra_do_diff(svn_ra_session_t *session
  * was added or deleted).  Each path is an <tt>const char *</tt>, relative
  * to the @a session's common parent.
  *
- * If @a limit is non-zero only invoke @a receiver on the first @a limit
- * logs.
+ * If @a limit is greater than zero only invoke @a receiver on the first
+ * @a limit logs.
  *
  * If @a discover_changed_paths, then each call to @a receiver passes a
  * <tt>const apr_hash_t *</tt> for the receiver's @a changed_paths argument;
@@ -1846,6 +1846,12 @@ svn_ra_get_location_segments(svn_ra_sess
  * to support reversion of the revision range for @a include_merged_revision
  * @c FALSE reporting by switching  @a end with @a start.
  *
+ * @note Prior to Subversion 1.9, this function may accept delta handlers
+ * from @handler even for empty text deltas.  Starting with 1.9, the
+ * delta handler / baton return arguments passed to @handler will be
+ * #NULL unless there is an actual difference in the file contents between
+ * the current and the previous call.
+ *
  * @since New in 1.5.
  */
 svn_error_t *

Modified: subversion/branches/fsfs-ucsnorm/subversion/include/svn_repos.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/include/svn_repos.h?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/include/svn_repos.h (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/include/svn_repos.h Sun Mar  9 10:08:46 2014
@@ -328,8 +328,9 @@ typedef struct svn_repos_notify_t
    * For #svn_fs_upgrade_format_bumped, the new format version. */
   svn_revnum_t revision;
 
-  /** For #svn_repos_notify_warning, the warning object. */
+  /** For #svn_repos_notify_warning, the warning message. */
   const char *warning_str;
+  /** For #svn_repos_notify_warning, the warning type. */
   svn_repos_notify_warning_t warning;
 
   /** For #svn_repos_notify_pack_shard_start,
@@ -1802,7 +1803,7 @@ svn_repos_node_location_segments(svn_rep
  * show all revisions regardless of what paths were changed in those
  * revisions.
  *
- * If @a limit is non-zero then only invoke @a receiver on the first
+ * If @a limit is greater than zero then only invoke @a receiver on the first
  * @a limit logs.
  *
  * If @a discover_changed_paths, then each call to @a receiver passes a
@@ -2036,6 +2037,12 @@ svn_repos_fs_get_mergeinfo(svn_mergeinfo
  * the revision range for @a include_merged_revision @c FALSE reporting by
  * switching @a start with @a end.
  *
+ * @note Prior to Subversion 1.9, this function may accept delta handlers
+ * from @handler even for empty text deltas.  Starting with 1.9, the
+ * delta handler / baton return arguments passed to @handler will be
+ * #NULL unless there is an actual difference in the file contents between
+ * the current and the previous call.
+ *
  * @since New in 1.5.
  */
 svn_error_t *
@@ -2653,34 +2660,65 @@ svn_repos_info_format(int *repos_format,
 /**
  * Verify the contents of the file system in @a repos.
  *
- * If @a feedback_stream is not @c NULL, write feedback to it (lines of
- * the form "* Verified revision %ld\n").
+ * Verify the revisions from @a start_rev to @a end_rev inclusive.  If
+ * @a start_rev is #SVN_INVALID_REVNUM, start at revision 0; if @a end_rev
+ * is #SVN_INVALID_REVNUM, end at the head revision.  @a start_rev must be
+ * older than or equal to @a end_rev.  If revision 0 is included in the
+ * range, then also verify "global invariants" of the repository, as
+ * described in svn_fs_verify().
  *
- * If @a start_rev is #SVN_INVALID_REVNUM, then start verifying at
- * revision 0.  If @a end_rev is #SVN_INVALID_REVNUM, then verify
- * through the @c HEAD revision.
- *
- * For every verified revision call @a notify_func with @a rev set to
- * the verified revision and @a warning_text @c NULL. For warnings call @a
- * notify_func with @a warning_text set.
- *
- * For every revision verification failure, if @a notify_func is not @c NULL,
- * call @a notify_func with @a rev set to the corrupt revision and @err set to
- * the corresponding error message.
+ * When a failure is found, if @a keep_going is @c TRUE then continue
+ * verification from the next revision, otherwise stop.
+ *
+ * If @a check_normalization is @c TRUE, report any name collisions
+ * within the same directory or svn:mergeinfo property where the names
+ * differ only in character representation, but are otherwise
+ * identical.
+ *
+ * If @a notify_func is not null, then call it with @a notify_baton and
+ * with a notification structure in which the fields are set as follows.
+ * (For a warning or error notification that does not apply to a specific
+ * revision, the revision number is #SVN_INVALID_REVNUM.)
+ *
+ *   For each FS-specific structure warning:
+ *      @c action = svn_repos_notify_verify_rev_structure
+ *      @c revision = the revision or #SVN_INVALID_REVNUM
+ *
+ *   For a FS-specific structure failure:
+ *      @c action = #svn_repos_notify_failure
+ *      @c revision = #SVN_INVALID_REVNUM
+ *      @c err = the corresponding error chain
+ *
+ *   For each revision verification failure:
+ *      @c action = #svn_repos_notify_failure
+ *      @c revision = the revision
+ *      @c err = the corresponding error chain
+ *
+ *   For each revision verification warning:
+ *      @c action = #svn_repos_notify_warning
+ *      @c warning and @c warning_str fields set accordingly
+ *        ### TODO: Set @c revision = the revision?
+ *
+ *   For each successfully verified revision:
+ *      @c action = #svn_repos_notify_verify_rev_end
+ *      @c revision = the revision
+ *
+ *   At the end:
+ *      @c action = svn_repos_notify_verify_end
+ *        ### Do we really need a callback to tell us the function we
+ *            called has reached its end and is about to return?
+ *        ### Not sent, currently, if a FS structure error is found.
  *
  * If @a cancel_func is not @c NULL, call it periodically with @a
  * cancel_baton as argument to see if the caller wishes to cancel the
  * verification.
  *
- * If @a keep_going is @c TRUE, the verify process notifies the error message
- * and continues. If @a notify_func is @c NULL, the verification failure is
- * not notified. Finally, return an error if there were any failures during
- * verification, or SVN_NO_ERROR if there were no failures.
+ * Use @a scratch_pool for temporary allocation.
  *
- * If @a check_normalization is @c TRUE, report any name collisions
- * within the same directory or svn:mergeinfo property where the names
- * differ only in character representation, but are otherwise
- * identical.
+ * Return an error if there were any failures during verification, or
+ * #SVN_NO_ERROR if there were no failures.  A failure means an event that,
+ * if a notification callback were provided, would send a notification
+ * with @c action = #svn_repos_notify_failure.
  *
  * @since New in 1.9.
  */
@@ -2716,7 +2754,10 @@ svn_repos_verify_fs2(svn_repos_t *repos,
 
 /**
  * Similar to svn_repos_verify_fs2(), but with a feedback_stream instead of
- * handling feedback via the notify_func handler
+ * handling feedback via the notify_func handler.
+ *
+ * If @a feedback_stream is not @c NULL, write feedback to it (lines of
+ * the form "* Verified revision %ld\n").
  *
  * @since New in 1.5.
  * @deprecated Provided for backward compatibility with the 1.6 API.
@@ -2733,15 +2774,13 @@ svn_repos_verify_fs(svn_repos_t *repos,
 
 /**
  * Dump the contents of the filesystem within already-open @a repos into
- * writable @a dumpstream.  Begin at revision @a start_rev, and dump every
- * revision up through @a end_rev.  Use @a pool for all allocation.  If
- * non-@c NULL, send feedback to @a feedback_stream.  If @a dumpstream is
+ * writable @a dumpstream.  If @a dumpstream is
  * @c NULL, this is effectively a primitive verify.  It is not complete,
- * however; svn_repos_verify_fs2() and svn_fs_verify().
+ * however; see instead svn_repos_verify_fs3().
  *
- * If @a start_rev is #SVN_INVALID_REVNUM, then start dumping at revision
- * 0.  If @a end_rev is #SVN_INVALID_REVNUM, then dump through the @c HEAD
- * revision.
+ * Begin at revision @a start_rev, and dump every revision up through
+ * @a end_rev.  If @a start_rev is #SVN_INVALID_REVNUM, start at revision
+ * 0.  If @a end_rev is #SVN_INVALID_REVNUM, end at the head revision.
  *
  * If @a incremental is @c TRUE, the first revision dumped will be a diff
  * against the previous revision (usually it looks like a full dump of
@@ -2754,14 +2793,37 @@ svn_repos_verify_fs(svn_repos_t *repos,
  * be done with full plain text.  A dump with @a use_deltas set cannot
  * be loaded by Subversion 1.0.x.
  *
- * If @a notify_func is not @c NULL, then for every dumped revision call
- * @a notify_func with @a rev set to the dumped revision and @a warning_text
- * @c NULL. For warnings call @a notify_func with @a warning_text.
+ * If @a notify_func is not null, then call it with @a notify_baton and
+ * with a notification structure in which the fields are set as follows.
+ * (For a warning or error notification that does not apply to a specific
+ * revision, the revision number is #SVN_INVALID_REVNUM.)
+ *
+ *   For each warning:
+ *      @c action = #svn_repos_notify_warning
+ *      @c warning and @c warning_str fields set accordingly
+ *        ### TODO: Set @c revision = the revision or #SVN_INVALID_REVNUM?
+ *
+ *   For each successfully dumped revision:
+ *      @c action = #svn_repos_notify_dump_rev_end
+ *      @c revision = the revision
+ *
+ *   At the end:
+ *      @c action = svn_repos_notify_verify_end
+ *        ### Do we really need a callback to tell us the function we
+ *            called has reached its end and is about to return?
+ *
+ *   At the end, if there were certain warnings previously:
+ *      @c action = #svn_repos_notify_warning
+ *      @c warning and @c warning_str fields set accordingly,
+ *            reiterating the existence of previous warnings
+ *        ### This is a presentation issue. Caller could do this itself.
  *
  * If @a cancel_func is not @c NULL, it is called periodically with
  * @a cancel_baton as argument to see if the client wishes to cancel
  * the dump.
  *
+ * Use @a scratch_pool for temporary allocation.
+ *
  * @since New in 1.7.
  */
 svn_error_t *
@@ -3030,9 +3092,10 @@ typedef struct svn_repos_parse_fns3_t
   /** For a given @a node_baton, remove all properties. */
   svn_error_t *(*remove_node_props)(void *node_baton);
 
-  /** For a given @a node_baton, receive a writable @a stream capable of
-   * receiving the node's fulltext.  After writing the fulltext, call
-   * the stream's close() function.
+  /** For a given @a node_baton, set @a stream to a writable stream
+   * capable of receiving the node's fulltext.  The parser will write
+   * the fulltext to the stream and then close the stream to signal
+   * completion.
    *
    * If a @c NULL is returned instead of a stream, the vtable is
    * indicating that no text is desired, and the parser will not
@@ -3043,8 +3106,9 @@ typedef struct svn_repos_parse_fns3_t
 
   /** For a given @a node_baton, set @a handler and @a handler_baton
    * to a window handler and baton capable of receiving a delta
-   * against the node's previous contents.  A NULL window will be
-   * sent to the handler after all the windows are sent.
+   * against the node's previous contents.  The parser will send all
+   * the windows of data to this handler, and will then send a NULL
+   * window to signal completion.
    *
    * If a @c NULL is returned instead of a handler, the vtable is
    * indicating that no delta is desired, and the parser will not
@@ -3101,6 +3165,12 @@ typedef struct svn_repos_parse_fns3_t
  * but still allow expansion of the format: most headers do not have
  * to be handled explicitly.
  *
+ * ### [JAF] Wouldn't it be more efficient to support a start/end rev
+ *     range here than only supporting it in receivers such as
+ *     svn_repos_get_fs_build_parser4()? This parser could then skip over
+ *     chunks of the input stream before the oldest required rev, and
+ *     could stop reading entirely after the youngest required rev.
+ *
  * @since New in 1.8.
  */
 svn_error_t *
@@ -3120,7 +3190,7 @@ svn_repos_parse_dumpstream3(svn_stream_t
  * to operate on the fs.
  *
  * @a start_rev and @a end_rev act as filters, the lower and upper
- * (inclusive) range values of revisions in @a dumpstream which will
+ * (inclusive) range values of revisions which will
  * be loaded.  Either both of these values are #SVN_INVALID_REVNUM (in
  * which case no revision-based filtering occurs at all), or both are
  * valid revisions (where @a start_rev is older than or equivalent to
@@ -3159,7 +3229,7 @@ svn_repos_get_fs_build_parser4(const svn
 /**
  * A vtable that is driven by svn_repos_parse_dumpstream2().
  * Similar to #svn_repos_parse_fns3_t except that it lacks
- * the delete_node_property and apply_textdelta callbacks.
+ * the magic_header_record callback.
  *
  * @deprecated Provided for backward compatibility with the 1.7 API.
  */

Modified: subversion/branches/fsfs-ucsnorm/subversion/include/svn_types.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/include/svn_types.h?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/include/svn_types.h (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/include/svn_types.h Sun Mar  9 10:08:46 2014
@@ -1076,6 +1076,25 @@ typedef enum svn_move_behavior_t
   svn_move_behavior_auto_moves
 } svn_move_behavior_t;
 
+/** Return a constant string expressing @a value as an English word,
+ * e.g., "none", "explicit", etc.  The string is not localized,
+ * as it may be used for client<->server communications.
+ *
+ * @since New in 1.9.
+ */
+const char *
+svn_move_behavior_to_word(svn_move_behavior_t value);
+
+/** Return the appropriate move behavior for @a word.  @a word is as
+ * returned from svn_move_behavior_to_word().  If @a word does not
+ * represent a recognized behavior, return #svn_move_behavior_explicit_moves.
+ *
+ * @since New in 1.9.
+ */
+svn_move_behavior_t
+svn_move_behavior_from_word(const char *word);
+
+
 
 
 /** Callback function type for commits.

Propchange: subversion/branches/fsfs-ucsnorm/subversion/libsvn_auth_gnome_keyring/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Sun Mar  9 10:08:46 2014
@@ -7,3 +7,5 @@ Release
 *~
 .*~
 libsvn_auth_gnome_keyring.def
+libsvn_auth_gnome_keyring.pc.in
+libsvn_auth_gnome_keyring.pc

Propchange: subversion/branches/fsfs-ucsnorm/subversion/libsvn_auth_kwallet/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Sun Mar  9 10:08:46 2014
@@ -7,3 +7,5 @@ Release
 *~
 .*~
 libsvn_auth_kwallet.def
+libsvn_auth_kwallet.pc.in
+libsvn_auth_kwallet.pc

Propchange: subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Sun Mar  9 10:08:46 2014
@@ -7,3 +7,5 @@ Release
 *~
 .*~
 libsvn_client.def
+libsvn_client.pc.in
+libsvn_client.pc

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/add.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/add.c?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/add.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/add.c Sun Mar  9 10:08:46 2014
@@ -840,7 +840,7 @@ add(const char *local_abspath,
   svn_magic__cookie_t *magic_cookie;
   apr_array_header_t *ignores = NULL;
 
-  svn_magic__init(&magic_cookie, scratch_pool);
+  SVN_ERR(svn_magic__init(&magic_cookie, ctx->config, scratch_pool));
 
   if (existing_parent_abspath)
     {

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/blame.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/blame.c?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/blame.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/blame.c Sun Mar  9 10:08:46 2014
@@ -305,27 +305,15 @@ 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.
+/* Record the blame information for the revision in BATON->file_rev_baton.
  */
 static svn_error_t *
-window_handler(svn_txdelta_window_t *window, void *baton)
+update_blame(void *baton)
 {
   struct delta_baton *dbaton = baton;
   struct file_rev_baton *frb = dbaton->file_rev_baton;
   struct blame_chain *chain;
 
-  /* Call the wrapped handler first. */
-  SVN_ERR(dbaton->wrapped_handler(window, dbaton->wrapped_baton));
-
-  /* We patiently wait for the NULL window marking the end. */
-  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
@@ -382,6 +370,32 @@ window_handler(svn_txdelta_window_t *win
   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)
+{
+  struct delta_baton *dbaton = baton;
+
+  /* Call the wrapped handler first. */
+  if (dbaton->wrapped_handler)
+    SVN_ERR(dbaton->wrapped_handler(window, dbaton->wrapped_baton));
+
+  /* We patiently wait for the NULL window marking the end. */
+  if (window)
+    return SVN_NO_ERROR;
+
+  /* Diff and update blame info. */
+  SVN_ERR(update_blame(baton));
+
+  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.
@@ -430,17 +444,18 @@ file_rev_handler(void *baton, const char
   if (frb->ctx->cancel_func)
     SVN_ERR(frb->ctx->cancel_func(frb->ctx->cancel_baton));
 
-  /* If there were no content changes, we couldn't care less about this
-     revision now.  Note that we checked the mime type above, so things
-     work if the user just changes the mime type in a commit.
+  /* If there were no content changes and no (potential) merges, we couldn't
+     care less about this revision now.  Note that we checked the mime type
+     above, so things work if the user just changes the mime type in a commit.
      Also note that we don't switch the pools in this case.  This is important,
      since the tempfile will be removed by the pool and we need the tempfile
      from the last revision with content changes. */
-  if (!content_delta_handler)
+  if (!content_delta_handler
+      && (!frb->include_merged_revisions || merged_revision))
     return SVN_NO_ERROR;
 
   /* Create delta baton. */
-  delta_baton = apr_palloc(frb->currpool, sizeof(*delta_baton));
+  delta_baton = apr_pcalloc(frb->currpool, sizeof(*delta_baton));
 
   /* Prepare the text delta window handler. */
   if (frb->last_filename)
@@ -460,17 +475,9 @@ file_rev_handler(void *baton, const char
                                  svn_io_file_del_on_pool_cleanup,
                                  filepool, filepool));
 
-  /* Get window handler for applying delta. */
-  svn_txdelta_apply(last_stream, cur_stream, NULL, NULL,
-                    frb->currpool,
-                    &delta_baton->wrapped_handler,
-                    &delta_baton->wrapped_baton);
-
   /* Wrap the window handler with our own. */
   delta_baton->file_rev_baton = frb;
   delta_baton->is_merged_revision = merged_revision;
-  *content_delta_handler = window_handler;
-  *content_delta_baton = delta_baton;
 
   /* Create the rev structure. */
   delta_baton->rev = apr_pcalloc(frb->mainpool, sizeof(struct rev));
@@ -502,6 +509,28 @@ file_rev_handler(void *baton, const char
   /* Keep last revision for postprocessing after all changes */
   frb->last_rev = delta_baton->rev;
 
+  /* Handle all delta - even if it is empty.
+     We must do the latter to "merge" blame info from other branches. */
+  if (content_delta_handler)
+    {
+      /* Proper delta - get window handler for applying delta.
+         svn_ra_get_file_revs2 will drive the delta editor. */
+      svn_txdelta_apply(last_stream, cur_stream, NULL, NULL,
+                        frb->currpool,
+                        &delta_baton->wrapped_handler,
+                        &delta_baton->wrapped_baton);
+      *content_delta_handler = window_handler;
+      *content_delta_baton = delta_baton;
+    }
+  else
+    {
+      /* Apply an empty delta, i.e. simply copy the old contents.
+         We can't simply use the existing file due to the pool rotation logic.
+         Trigger the blame update magic. */
+      SVN_ERR(svn_stream_copy3(last_stream, cur_stream, NULL, NULL, pool));
+      SVN_ERR(update_blame(delta_baton));
+    }
+
   return SVN_NO_ERROR;
 }
 

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/client.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/client.h?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/client.h (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/client.h Sun Mar  9 10:08:46 2014
@@ -709,24 +709,28 @@ svn_client__get_diff_editor2(const svn_d
 
 /*** Editor for diff summary ***/
 
-/* Set *CALLBACKS and *CALLBACK_BATON to a set of diff callbacks that will
-   report a diff summary, i.e. only providing information about the changed
-   items without the text deltas.
+/* Set *DIFF_PROCESSOR to a diff processor that will report a diff summary
+   to SUMMARIZE_FUNC.
 
-   TARGET is the target path, relative to the anchor, of the diff.
+   P_ROOT_RELPATH will return a pointer to a string that must be set to
+   the root of the operation before the processor is called.
+
+   ORIGINAL_PATH specifies the original path and will be used with
+   **ANCHOR_PATH to create paths as the user originally provided them
+   to the diff function.
 
    SUMMARIZE_FUNC is called with SUMMARIZE_BATON as parameter by the
    created callbacks for each changed item.
 */
 svn_error_t *
 svn_client__get_diff_summarize_callbacks(
-                        svn_wc_diff_callbacks4_t **callbacks,
-                        void **callback_baton,
-                        const char *target,
-                        svn_boolean_t reversed,
+                        const svn_diff_tree_processor_t **diff_processor,
+                        const char ***p_root_relpath,
                         svn_client_diff_summarize_func_t summarize_func,
                         void *summarize_baton,
-                        apr_pool_t *pool);
+                        const char *original_target,
+                        apr_pool_t *result_pool,
+                        apr_pool_t *scratch_pool);
 
 /* ---------------------------------------------------------------- */
 
@@ -1147,6 +1151,25 @@ svn_client__resolve_conflicts(svn_boolea
                               svn_client_ctx_t *ctx,
                               apr_pool_t *scratch_pool);
 
+/* Produce a diff with depth DEPTH between two files or two directories at
+ * LEFT_ABSPATH1 and RIGHT_ABSPATH, 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.
+ *
+ * If ANCHOR_ABSPATH is not null, set it to the anchor of the diff before
+ * the first processor call. (The anchor is LEFT_ABSPATH or an ancestor of it)
+ */
+svn_error_t *
+svn_client__arbitrary_nodes_diff(const char **root_relpath,
+                                 svn_boolean_t *root_is_dir,
+                                 const char *left_abspath,
+                                 const char *right_abspath,
+                                 svn_depth_t depth,
+                                 const svn_diff_tree_processor_t *diff_processor,
+                                 svn_client_ctx_t *ctx,
+                                 apr_pool_t *result_pool,
+                                 apr_pool_t *scratch_pool);
 
 
 #ifdef __cplusplus

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/commit_util.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/commit_util.c?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/commit_util.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/commit_util.c Sun Mar  9 10:08:46 2014
@@ -916,7 +916,7 @@ harvest_status_callback(void *status_bat
   if (matches_changelists
       && (is_harvest_root || baton->changelists)
       && state_flags
-      && is_added
+      && (is_added || (is_deleted && is_op_root && status->copied))
       && baton->danglers)
     {
       /* If a node is added, its parent must exist in the repository at the

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/copy_foreign.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/copy_foreign.c?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/copy_foreign.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_client/copy_foreign.c Sun Mar  9 10:08:46 2014
@@ -174,7 +174,7 @@ dir_change_prop(void *dir_baton,
       /* We have already notified for this directory, so don't do that again */
       SVN_ERR(svn_wc_prop_set4(eb->wc_ctx, db->local_abspath, name, value,
                                svn_depth_empty, FALSE, NULL,
-                               NULL, NULL, /* Cancelation */
+                               NULL, NULL, /* Cancellation */
                                NULL, NULL, /* Notification */
                                scratch_pool));
     }