#include <apr_pools.h>
#include <apr_tables.h>
#include <apr_hash.h>
#include "svn_error.h"
Go to the source code of this file.
Typedefs | |
typedef apr_hash_t * | svn_mergeinfo_t |
Terminology for data structures that contain mergeinfo. | |
typedef apr_hash_t * | svn_mergeinfo_catalog_t |
Enumerations | |
enum | svn_mergeinfo_inheritance_t { svn_mergeinfo_explicit, svn_mergeinfo_inherited, svn_mergeinfo_nearest_ancestor } |
The three ways to request mergeinfo affecting a given path. More... | |
Functions | |
svn_error_t * | svn_mergeinfo_parse (svn_mergeinfo_t *mergeinfo, const char *input, apr_pool_t *pool) |
Parse the mergeinfo from input into *mergeinfo. | |
svn_error_t * | svn_mergeinfo_diff (svn_mergeinfo_t *deleted, svn_mergeinfo_t *added, svn_mergeinfo_t mergefrom, svn_mergeinfo_t mergeto, svn_boolean_t consider_inheritance, apr_pool_t *pool) |
Calculate the delta between two mergeinfos, mergefrom and mergeto (which may be NULL ), and place the result in *deleted and *added (neither output argument may be NULL ). | |
svn_error_t * | svn_mergeinfo_merge (svn_mergeinfo_t mergeinfo, svn_mergeinfo_t changes, apr_pool_t *pool) |
Merge one mergeinfo, changes, into another mergeinfo mergeinfo. | |
svn_error_t * | svn_mergeinfo_remove (svn_mergeinfo_t *mergeinfo, svn_mergeinfo_t eraser, svn_mergeinfo_t whiteboard, apr_pool_t *pool) |
Removes eraser (the subtrahend) from whiteboard (the minuend), and places the resulting difference in *mergeinfo. | |
svn_error_t * | svn_rangelist_diff (apr_array_header_t **deleted, apr_array_header_t **added, apr_array_header_t *from, apr_array_header_t *to, svn_boolean_t consider_inheritance, apr_pool_t *pool) |
Calculate the delta between two rangelists consisting of svn_merge_range_t * elements (sorted in ascending order), from and to, and place the result in deleted and added (neither output argument will ever be NULL ). | |
svn_error_t * | svn_rangelist_merge (apr_array_header_t **rangelist, apr_array_header_t *changes, apr_pool_t *pool) |
Merge two rangelists consisting of svn_merge_range_t * elements, *rangelist and changes, placing the results in *rangelist. | |
svn_error_t * | svn_rangelist_remove (apr_array_header_t **output, apr_array_header_t *eraser, apr_array_header_t *whiteboard, svn_boolean_t consider_inheritance, apr_pool_t *pool) |
Removes eraser (the subtrahend) from whiteboard (the minuend), and places the resulting difference in output. | |
svn_error_t * | svn_mergeinfo_intersect (svn_mergeinfo_t *mergeinfo, svn_mergeinfo_t mergeinfo1, svn_mergeinfo_t mergeinfo2, apr_pool_t *pool) |
Find the intersection of two mergeinfos, mergeinfo1 and mergeinfo2, and place the result in *mergeinfo, which is (deeply) allocated in pool. | |
svn_error_t * | svn_rangelist_intersect (apr_array_header_t **rangelist, apr_array_header_t *rangelist1, apr_array_header_t *rangelist2, svn_boolean_t consider_inheritance, apr_pool_t *pool) |
Find the intersection of two rangelists consisting of svn_merge_range_t * elements, rangelist1 and rangelist2, and place the result in *rangelist (which is never NULL ). | |
svn_error_t * | svn_rangelist_reverse (apr_array_header_t *rangelist, apr_pool_t *pool) |
Reverse rangelist, and the start and end fields of each range in rangelist, in place. | |
svn_error_t * | svn_rangelist_to_string (svn_string_t **output, const apr_array_header_t *rangelist, apr_pool_t *pool) |
Take an array of svn_merge_range_t *'s in rangelist, and convert it back to a text format rangelist in output. | |
svn_error_t * | svn_rangelist_inheritable (apr_array_header_t **inheritable_rangelist, apr_array_header_t *rangelist, svn_revnum_t start, svn_revnum_t end, apr_pool_t *pool) |
Return a deep copy of svn_merge_range_t *'s in rangelist excluding all non-inheritable svn_merge_range_t . | |
svn_error_t * | svn_mergeinfo_inheritable (svn_mergeinfo_t *inheritable_mergeinfo, svn_mergeinfo_t mergeinfo, const char *path, svn_revnum_t start, svn_revnum_t end, apr_pool_t *pool) |
Return a deep copy of mergeinfo, excluding all non-inheritable svn_merge_range_t . | |
svn_error_t * | svn_mergeinfo_to_string (svn_string_t **output, svn_mergeinfo_t mergeinput, apr_pool_t *pool) |
Take a mergeinfo in MERGEINPUT, and convert it back to unparsed mergeinfo in *OUTPUT. | |
svn_error_t * | svn_mergeinfo_sort (svn_mergeinfo_t mergeinfo, apr_pool_t *pool) |
Take a hash of mergeinfo in mergeinfo, and sort the rangelists associated with each key (in place). | |
svn_mergeinfo_t | svn_mergeinfo_dup (svn_mergeinfo_t mergeinfo, apr_pool_t *pool) |
Return a deep copy of mergeinfo, allocated in pool. | |
apr_array_header_t * | svn_rangelist_dup (apr_array_header_t *rangelist, apr_pool_t *pool) |
Return a deep copy of rangelist, allocated in pool. | |
const char * | svn_inheritance_to_word (svn_mergeinfo_inheritance_t inherit) |
Return a constant string expressing inherit as an English word, i.e., "explicit" (default), "inherited", or "nearest_ancestor". | |
svn_mergeinfo_inheritance_t | svn_inheritance_from_word (const char *word) |
Return the appropriate svn_mergeinfo_inheritance_t for word. |
Definition in file svn_mergeinfo.h.
|
Terminology for data structures that contain mergeinfo. Subversion commonly uses several data structures to represent mergeinfo in RAM:
(a) Strings (
(b) Hashes mapping merge source paths (
(c) Hashes mapping paths (
Both Note that while the keys of mergeinfos are always relative to the repository root, the keys of a catalog may be relative to something else, such as an RA session root. Definition at line 133 of file svn_mergeinfo.h. |
|
The three ways to request mergeinfo affecting a given path.
Definition at line 394 of file svn_mergeinfo.h. |
|
Return the appropriate
word is as returned from svn_inheritance_to_word(). Defaults to
|
|
Return a constant string expressing inherit as an English word, i.e., "explicit" (default), "inherited", or "nearest_ancestor". The string is not localized, as it may be used for client<->server communications.
|
|
Calculate the delta between two mergeinfos, mergefrom and mergeto (which may be
consider_inheritance determines how the rangelists in the two hashes are compared for equality. If consider_inheritance is FALSE, then the start and end revisions of the e.g. '/trunk: 1,3-4*,5' == '/trunk: 1,3-5'
If consider_inheritance is TRUE, then the inheritability of the e.g. '/trunk: 1,3-4*,5' != '/trunk: 1,3-5' '/trunk: 1,3-4*,5' == '/trunk: 1,3-4*,5' '/trunk: 1,3-4,5' == '/trunk: 1,3-4,5'
|
|
Return a deep copy of mergeinfo, allocated in pool.
|
|
Return a deep copy of mergeinfo, excluding all non-inheritable If start and end are valid revisions and start is less than or equal to end, then exclude only the non-inheritable revisions that intersect inclusively with the range defined by start and end. If path is not NULL remove non-inheritable ranges only for path. If all ranges are removed for a given path then remove that path as well. If all paths are removed or rangelist is empty then set *inheritable_rangelist to an empty array. Allocate the copy in pool.
|
|
Find the intersection of two mergeinfos, mergeinfo1 and mergeinfo2, and place the result in *mergeinfo, which is (deeply) allocated in pool.
|
|
Merge one mergeinfo, changes, into another mergeinfo mergeinfo. When intersecting rangelists for a path are merged, the inheritability of the resulting svn_merge_range_t depends on the inheritability of the operands. If two non-inheritable ranges are merged the result is always non-inheritable, in all other cases the resulting range is inheritable. e.g. '/A: 1,3-4' merged with '/A: 1,3,4*,5' --> '/A: 1,3-5' '/A: 1,3-4*' merged with '/A: 1,3,4*,5' --> '/A: 1,3,4*,5'
|
|
Parse the mergeinfo from input into *mergeinfo.
If no mergeinfo is available, return an empty mergeinfo (never
If input is not a grammatically correct
|
|
Removes eraser (the subtrahend) from whiteboard (the minuend), and places the resulting difference in *mergeinfo.
|
|
Take a hash of mergeinfo in mergeinfo, and sort the rangelists associated with each key (in place). TODO(miapi): mergeinfos should *always* be sorted. This should be a private function.
|
|
Take a mergeinfo in MERGEINPUT, and convert it back to unparsed mergeinfo in *OUTPUT. If INPUT contains no elements, return the empty string.
|
|
Calculate the delta between two rangelists consisting of consider_inheritance determines how to account for the inheritability of the two rangelist's ranges when calculating the diff,
|
|
Return a deep copy of rangelist, allocated in pool.
|
|
Return a deep copy of If start and end are valid revisions and start is less than or equal to end, then exclude only the non-inheritable revision ranges that intersect inclusively with the range defined by start and end. If rangelist contains no elements, return an empty array. Allocate the copy in pool.
|
|
Find the intersection of two rangelists consisting of consider_inheritance determines how to account for the inheritability of the two rangelist's ranges when calculating the intersection,
svn_sort_compare_ranges() . *rangelist is guaranteed to be in sorted order.
|
|
Merge two rangelists consisting of Either rangelist may be empty. When intersecting rangelists are merged, the inheritability of the resulting svn_merge_range_t depends on the inheritability of the operands,
svn_sort_compare_ranges() . *rangelist is guaranteed to remain in sorted order and be compacted to the minimal number of ranges needed to represent the merged result.
|
|
Removes eraser (the subtrahend) from whiteboard (the minuend), and places the resulting difference in output.
Note: eraser and whiteboard must be sorted as said by
consider_inheritance determines how to account for the
|
|
Reverse rangelist, and the TODO(miapi): Is this really a valid function? Rangelists that aren't sorted, or rangelists containing reverse ranges, are generally not valid in mergeinfo code. Can we rewrite the two places where this is used?
|
|
Take an array of svn_merge_range_t *'s in rangelist, and convert it back to a text format rangelist in output. If rangelist contains no elements, sets output to the empty string.
|