Author: julianfoad Date: Tue Oct 11 15:16:47 2011 New Revision: 1181833 URL: http://svn.apache.org/viewvc?rev=1181833&view=rev Log: On the 'tree-read-api' branch: Catch up to trunk@1181830.
Added: subversion/branches/tree-read-api/tools/dist/templates/stable-news.ezt - copied unchanged from r1181830, subversion/trunk/tools/dist/templates/stable-news.ezt Modified: subversion/branches/tree-read-api/ (props changed) subversion/branches/tree-read-api/INSTALL subversion/branches/tree-read-api/subversion/include/private/svn_adler32.h (props changed) subversion/branches/tree-read-api/subversion/include/private/svn_string_private.h (props changed) subversion/branches/tree-read-api/subversion/include/private/svn_temp_serializer.h (props changed) subversion/branches/tree-read-api/subversion/include/private/svn_wc_private.h subversion/branches/tree-read-api/subversion/include/svn_sorts.h subversion/branches/tree-read-api/subversion/include/svn_types.h subversion/branches/tree-read-api/subversion/libsvn_client/merge.c subversion/branches/tree-read-api/subversion/libsvn_fs_fs/temp_serializer.c (props changed) subversion/branches/tree-read-api/subversion/libsvn_fs_fs/temp_serializer.h (props changed) subversion/branches/tree-read-api/subversion/libsvn_subr/adler32.c (props changed) subversion/branches/tree-read-api/subversion/libsvn_subr/hash.c (props changed) subversion/branches/tree-read-api/subversion/libsvn_subr/kitchensink.c subversion/branches/tree-read-api/subversion/libsvn_subr/mergeinfo.c subversion/branches/tree-read-api/subversion/libsvn_subr/sorts.c subversion/branches/tree-read-api/subversion/libsvn_subr/sqlite.c subversion/branches/tree-read-api/subversion/libsvn_subr/svn_temp_serializer.c (props changed) subversion/branches/tree-read-api/subversion/libsvn_wc/status.c subversion/branches/tree-read-api/subversion/tests/libsvn_subr/mergeinfo-test.c subversion/branches/tree-read-api/tools/client-side/mergeinfo-sanitizer.py subversion/branches/tree-read-api/tools/client-side/svn-viewspec.py subversion/branches/tree-read-api/tools/dev/benchmarks/suite1/cronjob subversion/branches/tree-read-api/tools/dist/collect_sigs.py subversion/branches/tree-read-api/tools/dist/rat-excludes subversion/branches/tree-read-api/tools/dist/release.py Propchange: subversion/branches/tree-read-api/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Oct 11 15:16:47 2011 @@ -55,3 +55,4 @@ /subversion/branches/tree-conflicts:868291-873154 /subversion/branches/tree-conflicts-notify:873926-874008 /subversion/branches/uris-as-urls:1060426-1064427 +/subversion/trunk:1180089-1181830 Modified: subversion/branches/tree-read-api/INSTALL URL: http://svn.apache.org/viewvc/subversion/branches/tree-read-api/INSTALL?rev=1181833&r1=1181832&r2=1181833&view=diff ============================================================================== --- subversion/branches/tree-read-api/INSTALL (original) +++ subversion/branches/tree-read-api/INSTALL Tue Oct 11 15:16:47 2011 @@ -195,10 +195,7 @@ I. INTRODUCTION Whenever you want to build any part of Subversion, you need the Apache Portable Runtime (APR) and the APR Utility (APR-util) - libraries. These are included in the Subversion dependency package - - if you are building from a source tarball and wish to use the versions - of APR and APR-util included there, just unpack the dependency package - and skip ahead to the next requirement. + libraries. **************************************************************** @@ -233,7 +230,7 @@ I. INTRODUCTION | Note that it's *perfectly* safe to use APR 1.X from the | | beginning. In fact, we recommend it. If you're building | | Subversion for the first time, there's no compatibility | - | issue to worry about, so grab the latest version of APR. + | issue to worry about, so grab the latest version of APR. | | | | If you already have a Subversion installation using APR | | 0.9.x, it's still possible to move to APR 1.X safely. Just | @@ -242,8 +239,8 @@ I. INTRODUCTION |______________________________________________________________| - If you are not building from a tarball with the dependency - package, you will need to get these yourself: + If you do not have a pre-installed APR and APR-util, you will need + to get these yourself: http://apr.apache.org/download.cgi @@ -737,7 +734,7 @@ II. INSTALLATION of the libsvn_* libraries. Note that if you commonly build with the -jN option to make and - have unpacked a dependency tarball into your checkout, the make + have used the get-deps.sh script to fetch dependencies, the make step above may fail, because we don't ensure that third party libraries in our source tree will finish building before subversion itself. If you want to use -jN, use the following Propchange: subversion/branches/tree-read-api/subversion/include/private/svn_adler32.h ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Oct 11 15:16:47 2011 @@ -44,3 +44,4 @@ /subversion/branches/tc_url_rev/subversion/libsvn_diff/diff.h:874351-874483 /subversion/branches/tree-conflicts/subversion/libsvn_diff/diff.h:868291-873154 /subversion/branches/tree-conflicts-notify/subversion/libsvn_diff/diff.h:873926-874008 +/subversion/trunk/subversion/include/private/svn_adler32.h:1180089-1181830 Propchange: subversion/branches/tree-read-api/subversion/include/private/svn_string_private.h ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Oct 11 15:16:47 2011 @@ -53,3 +53,4 @@ /subversion/branches/tree-conflicts/subversion/include/svn_string.h:868291-873154 /subversion/branches/tree-conflicts-notify/subversion/include/svn_string.h:873926-874008 /subversion/branches/uris-as-urls/subversion/include/svn_string.h:1060426-1064427 +/subversion/trunk/subversion/include/private/svn_string_private.h:1180089-1181830 Propchange: subversion/branches/tree-read-api/subversion/include/private/svn_temp_serializer.h ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Oct 11 15:16:47 2011 @@ -1,2 +1,2 @@ /subversion/branches/revprop-packing/subversion/include/private/svn_temp_serializer.h:1143907,1143971,1144017,1144568,1146145 -/subversion/trunk/subversion/include/private/svn_temp_serializer.h:1067687-1072301 +/subversion/trunk/subversion/include/private/svn_temp_serializer.h:1067687-1072301,1180089-1181830 Modified: subversion/branches/tree-read-api/subversion/include/private/svn_wc_private.h URL: http://svn.apache.org/viewvc/subversion/branches/tree-read-api/subversion/include/private/svn_wc_private.h?rev=1181833&r1=1181832&r2=1181833&view=diff ============================================================================== --- subversion/branches/tree-read-api/subversion/include/private/svn_wc_private.h (original) +++ subversion/branches/tree-read-api/subversion/include/private/svn_wc_private.h Tue Oct 11 15:16:47 2011 @@ -339,10 +339,10 @@ svn_wc__node_get_children_of_working_nod apr_pool_t *scratch_pool); /** - * Like svn_wc__node_get_children2(), except also include any path that was - * a child of a deleted directory that existed at @a dir_abspath, even if - * that directory is now scheduled to be replaced by the working node at - * @a dir_abspath. + * Like svn_wc__node_get_children_of_working_node(), except also include any + * path that was a child of a deleted directory that existed at + * @a dir_abspath, even if that directory is now scheduled to be replaced by + * the working node at @a dir_abspath. */ svn_error_t * svn_wc__node_get_children(const apr_array_header_t **children, Modified: subversion/branches/tree-read-api/subversion/include/svn_sorts.h URL: http://svn.apache.org/viewvc/subversion/branches/tree-read-api/subversion/include/svn_sorts.h?rev=1181833&r1=1181832&r2=1181833&view=diff ============================================================================== --- subversion/branches/tree-read-api/subversion/include/svn_sorts.h (original) +++ subversion/branches/tree-read-api/subversion/include/svn_sorts.h Tue Oct 11 15:16:47 2011 @@ -182,6 +182,16 @@ svn_sort__array_insert(const void *new_e int insert_index); +/* Remove ELEMENTS_TO_DELETE elements starting at DELETE_INDEX from the + array ARR. If DELETE_INDEX is not a valid element of ARR, + ELEMENTS_TO_DELETE is not greater than zero, or + DELETE_INDEX + ELEMENTS_TO_DELETE is greater than ARR->NELTS, then do + nothing. */ +void +svn_sort__array_delete(apr_array_header_t *arr, + int delete_index, + int elements_to_delete); + #ifdef __cplusplus } #endif /* __cplusplus */ Modified: subversion/branches/tree-read-api/subversion/include/svn_types.h URL: http://svn.apache.org/viewvc/subversion/branches/tree-read-api/subversion/include/svn_types.h?rev=1181833&r1=1181832&r2=1181833&view=diff ============================================================================== --- subversion/branches/tree-read-api/subversion/include/svn_types.h (original) +++ subversion/branches/tree-read-api/subversion/include/svn_types.h Tue Oct 11 15:16:47 2011 @@ -81,6 +81,22 @@ extern "C" { # endif #endif + + +/** YABT: Yet Another Boolean Type */ +typedef int svn_boolean_t; + +#ifndef TRUE +/** uhh... true */ +#define TRUE 1 +#endif /* TRUE */ + +#ifndef FALSE +/** uhh... false */ +#define FALSE 0 +#endif /* FALSE */ + + /** Subversion error object. * @@ -188,28 +204,15 @@ svn__apr_hash_index_val(const apr_hash_i /** @} */ -/** The various types of nodes in the Subversion filesystem. */ -typedef enum svn_node_kind_t -{ - /** absent */ - svn_node_none, - - /** regular file */ - svn_node_file, - - /** directory */ - svn_node_dir, - - /** something's here, but we don't know what */ - svn_node_unknown -} svn_node_kind_t; - -/* A node kind. +/** A node kind. * * @since New in 1.8. Replaces svn_node_kind_t. */ typedef enum svn_kind_t { + /** something's here, but we don't know what */ + svn_kind_unknown, + /** absent */ svn_kind_none, @@ -220,12 +223,29 @@ typedef enum svn_kind_t svn_kind_dir, /** symbolic link */ - svn_kind_symlink, + svn_kind_symlink - /** something's here, but we don't know what */ - svn_kind_unknown } svn_kind_t; +/** The various types of nodes in the Subversion filesystem. + * + * This type is superseded by #svn_kind_t and will be deprecated when + * transition to the new type is complete. */ +typedef enum svn_node_kind_t +{ + /** absent */ + svn_node_none, + + /** regular file */ + svn_node_file, + + /** directory */ + svn_node_dir, + + /** something's here, but we don't know what */ + svn_node_unknown +} svn_node_kind_t; + /** Return a constant string expressing @a kind as an English word, e.g., * "file", "dir", etc. The string is not localized, as it may be used for * client<->server communications. If the kind is not recognized, return @@ -245,6 +265,24 @@ svn_node_kind_to_word(svn_node_kind_t ki svn_node_kind_t svn_node_kind_from_word(const char *word); +/** Return the #svn_node_kind_t corresponding to the given #svn_kind_t; + * #svn_kind_symlink will become #svn_node_file. + * + * @since New in 1.8. + */ +svn_node_kind_t +svn__node_kind_from_kind(svn_kind_t kind); + +/** Return the #svn_kind_t corresponding to the given #svn_node_kind_t, + * or #svn_kind_symlink if @a is_symlink is true. + * + * @since New in 1.8. + */ +svn_kind_t +svn__kind_from_node_kind(svn_node_kind_t kind, + svn_boolean_t is_symlink); + + /** Generic three-state property to represent an unknown value for values * that are just like booleans. The values have been set deliberately to * make tristates disjoint from #svn_boolean_t. @@ -378,20 +416,6 @@ typedef apr_int64_t svn_filesize_t; #endif -/** YABT: Yet Another Boolean Type */ -typedef int svn_boolean_t; - -#ifndef TRUE -/** uhh... true */ -#define TRUE 1 -#endif /* TRUE */ - -#ifndef FALSE -/** uhh... false */ -#define FALSE 0 -#endif /* FALSE */ - - /** An enum to indicate whether recursion is needed. */ enum svn_recurse_kind { Modified: subversion/branches/tree-read-api/subversion/libsvn_client/merge.c URL: http://svn.apache.org/viewvc/subversion/branches/tree-read-api/subversion/libsvn_client/merge.c?rev=1181833&r1=1181832&r2=1181833&view=diff ============================================================================== --- subversion/branches/tree-read-api/subversion/libsvn_client/merge.c (original) +++ subversion/branches/tree-read-api/subversion/libsvn_client/merge.c Tue Oct 11 15:16:47 2011 @@ -293,7 +293,7 @@ typedef struct merge_cmd_baton_t { /*** Utilities ***/ /* Return SVN_ERR_UNSUPPORTED_FEATURE if URL is not inside the repository - of LOCAL_ABSPAT. Use SCRATCH_POOL for temporary allocations. */ + of LOCAL_ABSPATH. Use SCRATCH_POOL for temporary allocations. */ static svn_error_t * check_repos_match(merge_cmd_baton_t *merge_b, const char *local_abspath, @@ -4770,30 +4770,6 @@ make_merge_conflict_error(const char *ta r->start, r->end, svn_dirent_local_style(target_wcpath, scratch_pool)); } -/* Remove the element at IDX from the array ARR. - If IDX is not a valid element of ARR do nothing. */ -static void -remove_element_from_array(apr_array_header_t *arr, - int idx) -{ - /* Do we have a valid index? */ - if (idx >= 0 && idx < arr->nelts) - { - if (idx == (arr->nelts - 1)) - { - /* Deleting the last or only element in an array is easy. */ - apr_array_pop(arr); - } - else - { - memmove(arr->elts + arr->elt_size * idx, - arr->elts + arr->elt_size * (idx + 1), - arr->elt_size * (arr->nelts - 1 - idx)); - --(arr->nelts); - } - } -} - /* Helper for do_directory_merge(). TARGET_WCPATH is a directory and CHILDREN_WITH_MERGEINFO is filled @@ -4819,7 +4795,7 @@ remove_absent_children(const char *targe if ((child->absent || child->scheduled_for_deletion) && svn_dirent_is_ancestor(target_wcpath, child->abspath)) { - remove_element_from_array(children_with_mergeinfo, i--); + svn_sort__array_delete(children_with_mergeinfo, i--, 1); } } } @@ -4855,8 +4831,7 @@ remove_children_with_deleted_mergeinfo(m child->abspath, APR_HASH_KEY_STRING)) { - remove_element_from_array(notify_b->children_with_mergeinfo, - i--); + svn_sort__array_delete(notify_b->children_with_mergeinfo, i--, 1); } } } Propchange: subversion/branches/tree-read-api/subversion/libsvn_fs_fs/temp_serializer.c ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Oct 11 15:16:47 2011 @@ -1,2 +1,2 @@ /subversion/branches/revprop-packing/subversion/libsvn_fs_fs/temp_serializer.c:1143907,1143971,1144017,1144568,1146145 -/subversion/trunk/subversion/libsvn_fs_fs/temp_serializer.c:1067687-1072301 +/subversion/trunk/subversion/libsvn_fs_fs/temp_serializer.c:1067687-1072301,1180089-1181830 Propchange: subversion/branches/tree-read-api/subversion/libsvn_fs_fs/temp_serializer.h ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Oct 11 15:16:47 2011 @@ -1,2 +1,2 @@ /subversion/branches/revprop-packing/subversion/libsvn_fs_fs/temp_serializer.h:1143907,1143971,1144017,1144568,1146145 -/subversion/trunk/subversion/libsvn_fs_fs/temp_serializer.h:1067687-1072301 +/subversion/trunk/subversion/libsvn_fs_fs/temp_serializer.h:1067687-1072301,1180089-1181830 Propchange: subversion/branches/tree-read-api/subversion/libsvn_subr/adler32.c ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Oct 11 15:16:47 2011 @@ -2,3 +2,4 @@ /subversion/branches/diff-optimizations-bytes/subversion/libsvn_subr/adler32.c:1037353-1067789 /subversion/branches/performance/subversion/libsvn_subr/adler32.c:1067697-1078365 /subversion/branches/revprop-packing/subversion/libsvn_subr/adler32.c:1143907,1143971,1144017,1144568,1146145 +/subversion/trunk/subversion/libsvn_subr/adler32.c:1180089-1181830 Propchange: subversion/branches/tree-read-api/subversion/libsvn_subr/hash.c ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Oct 11 15:16:47 2011 @@ -53,3 +53,4 @@ /subversion/branches/tree-conflicts/subversion/libsvn_subr/hash.c:868291-873154 /subversion/branches/tree-conflicts-notify/subversion/libsvn_subr/hash.c:873926-874008 /subversion/branches/uris-as-urls/subversion/libsvn_subr/hash.c:1060426-1064427 +/subversion/trunk/subversion/libsvn_subr/hash.c:1180089-1181830 Modified: subversion/branches/tree-read-api/subversion/libsvn_subr/kitchensink.c URL: http://svn.apache.org/viewvc/subversion/branches/tree-read-api/subversion/libsvn_subr/kitchensink.c?rev=1181833&r1=1181832&r2=1181833&view=diff ============================================================================== --- subversion/branches/tree-read-api/subversion/libsvn_subr/kitchensink.c (original) +++ subversion/branches/tree-read-api/subversion/libsvn_subr/kitchensink.c Tue Oct 11 15:16:47 2011 @@ -26,7 +26,7 @@ #include "svn_types.h" #include "svn_error.h" -#include "svn_mergeinfo.h" +#include "svn_string.h" #include "svn_private_config.h" svn_error_t * @@ -120,29 +120,35 @@ svn_depth_from_word(const char *word) return svn_depth_unknown; } -const char * -svn_inheritance_to_word(svn_mergeinfo_inheritance_t inherit) +svn_node_kind_t +svn__node_kind_from_kind(svn_kind_t kind) { - switch (inherit) + switch (kind) { - case svn_mergeinfo_inherited: - return "inherited"; - case svn_mergeinfo_nearest_ancestor: - return "nearest-ancestor"; - default: - return "explicit"; + case svn_kind_unknown: return svn_node_unknown; + case svn_kind_none: return svn_node_none; + case svn_kind_file: return svn_node_file; + case svn_kind_dir: return svn_node_dir; + case svn_kind_symlink: return svn_node_file; + default: SVN_ERR_MALFUNCTION_NO_RETURN(); } } - -svn_mergeinfo_inheritance_t -svn_inheritance_from_word(const char *word) +svn_kind_t +svn__kind_from_node_kind(svn_node_kind_t kind, + svn_boolean_t is_symlink) { - if (strcmp(word, "inherited") == 0) - return svn_mergeinfo_inherited; - if (strcmp(word, "nearest-ancestor") == 0) - return svn_mergeinfo_nearest_ancestor; - return svn_mergeinfo_explicit; + if (is_symlink) + return svn_kind_symlink; + + switch (kind) + { + case svn_node_unknown: return svn_kind_unknown; + case svn_node_none: return svn_kind_none; + case svn_node_file: return svn_kind_file; + case svn_node_dir: return svn_kind_dir; + default: SVN_ERR_MALFUNCTION_NO_RETURN(); + } } const char * Modified: subversion/branches/tree-read-api/subversion/libsvn_subr/mergeinfo.c URL: http://svn.apache.org/viewvc/subversion/branches/tree-read-api/subversion/libsvn_subr/mergeinfo.c?rev=1181833&r1=1181832&r2=1181833&view=diff ============================================================================== --- subversion/branches/tree-read-api/subversion/libsvn_subr/mergeinfo.c (original) +++ subversion/branches/tree-read-api/subversion/libsvn_subr/mergeinfo.c Tue Oct 11 15:16:47 2011 @@ -742,68 +742,401 @@ svn_mergeinfo_parse(svn_mergeinfo_t *mer return err; } +/* Cleanup after svn_rangelist_merge2 when it modifies the ending range of + a single rangelist element in-place. + + If *RANGE_INDEX is not a valid element in RANGELIST do nothing. Otherwise + ensure that RANGELIST[*RANGE_INDEX]->END does not adjoin or overlap any + subsequent ranges in RANGELIST. + + If overlap is found, then remove, modify, and/or add elements to RANGELIST + as per the invariants for rangelists documented in svn_mergeinfo.h. If + RANGELIST[*RANGE_INDEX]->END adjoins a subsequent element then combine the + elements if their inheritability permits -- The inheritance of intersecting + and adjoining ranges is handled as per svn_mergeinfo_merge2. Upon return + set *RANGE_INDEX to the index of the youngest element modified, added, or + adjoined to RANGELIST[*RANGE_INDEX]. + + Note: Adjoining rangelist elements are those where the end rev of the older + element is equal to the start rev of the younger element. + + Any new elements inserted into RANGELIST are allocated in RESULT_POOL.*/ +static void +adjust_remaining_ranges(apr_array_header_t *rangelist, + int *range_index, + apr_pool_t *result_pool) +{ + int i; + int starting_index; + int elements_to_delete = 0; + svn_merge_range_t *modified_range; + + if (*range_index >= rangelist->nelts) + return; + + starting_index = *range_index + 1; + modified_range = APR_ARRAY_IDX(rangelist, *range_index, svn_merge_range_t *); + + for (i = *range_index + 1; i < rangelist->nelts; i++) + { + svn_merge_range_t *next_range = APR_ARRAY_IDX(rangelist, i, + svn_merge_range_t *); + + /* If MODIFIED_RANGE doesn't adjoin or overlap the next range in + RANGELIST then we are finished. */ + if (modified_range->end < next_range->start) + break; + + /* Does MODIFIED_RANGE adjoin NEXT_RANGE? */ + if (modified_range->end == next_range->start) + { + if (modified_range->inheritable == next_range->inheritable) + { + /* Combine adjoining ranges with the same inheritability. */ + modified_range->end = next_range->end; + elements_to_delete++; + } + else + { + /* Cannot join because inheritance differs. */ + (*range_index)++; + } + break; + } + + /* Alright, we know MODIFIED_RANGE overlaps NEXT_RANGE, but how? */ + if (modified_range->end > next_range->end) + { + /* NEXT_RANGE is a proper subset of MODIFIED_RANGE and the two + don't share the same end range. */ + if (modified_range->inheritable + || (modified_range->inheritable == next_range->inheritable)) + { + /* MODIFIED_RANGE absorbs NEXT_RANGE. */ + elements_to_delete++; + } + else + { + /* NEXT_RANGE is a proper subset MODIFIED_RANGE but + MODIFIED_RANGE is non-inheritable and NEXT_RANGE is + inheritable. This means MODIFIED_RANGE is truncated, + NEXT_RANGE remains, and the portion of MODIFIED_RANGE + younger than NEXT_RANGE is added as a separate range: + ______________________________________________ + | | + M MODIFIED_RANGE N + | (!inhertiable) | + |______________________________________________| + | | + O NEXT_RANGE P + | (inheritable)| + |______________| + | + V + _______________________________________________ + | | | | + M MODIFIED_RANGE O NEXT_RANGE P NEW_RANGE N + | (!inhertiable) | (inheritable)| (!inheritable)| + |________________|______________|_______________| + */ + svn_merge_range_t *new_modified_range = + apr_palloc(result_pool, sizeof(*new_modified_range)); + new_modified_range->start = next_range->end; + new_modified_range->end = modified_range->end; + new_modified_range->inheritable = FALSE; + modified_range->end = next_range->start; + (*range_index)+=2; + svn_sort__array_insert(&new_modified_range, rangelist, + *range_index); + /* Recurse with the new range. */ + adjust_remaining_ranges(rangelist, range_index, result_pool); + break; + } + } + else if (modified_range->end == next_range->end) + { + /* NEXT_RANGE is a proper subset MODIFIED_RANGE and share + the same end range. */ + if (modified_range->inheritable + || (modified_range->inheritable == next_range->inheritable)) + { + /* MODIFIED_RANGE absorbs NEXT_RANGE. */ + elements_to_delete++; + } + else + { + /* The intersection between MODIFIED_RANGE and NEXT_RANGE is + absorbed by the latter. */ + modified_range->end = next_range->start; + (*range_index)++; + } + break; + } + else + { + /* NEXT_RANGE and MODIFIED_RANGE intersect but NEXT_RANGE is not + a proper subset of MODIFIED_RANGE, nor do the two share the + same end revision, i.e. they overlap. */ + if (modified_range->inheritable == next_range->inheritable) + { + /* Combine overlapping ranges with the same inheritability. */ + modified_range->end = next_range->end; + elements_to_delete++; + } + else if (modified_range->inheritable) + { + /* MODIFIED_RANGE absorbs the portion of NEXT_RANGE it overlaps + and NEXT_RANGE is truncated. */ + next_range->start = modified_range->end; + (*range_index)++; + } + else + { + /* NEXT_RANGE absorbs the portion of MODIFIED_RANGE it overlaps + and MODIFIED_RANGE is truncated. */ + modified_range->end = next_range->start; + (*range_index)++; + } + break; + } + } + + if (elements_to_delete) + svn_sort__array_delete(rangelist, starting_index, elements_to_delete); +} + svn_error_t * svn_rangelist_merge2(apr_array_header_t *rangelist, const apr_array_header_t *changes, apr_pool_t *result_pool, apr_pool_t *scratch_pool) { - int i, j; - apr_array_header_t *original_rangelist; - - original_rangelist = apr_array_copy(scratch_pool, rangelist); - apr_array_clear(rangelist); + int i = 0; + int j = 0; - i = 0; - j = 0; - while (i < (original_rangelist)->nelts && j < changes->nelts) - { - svn_merge_range_t *elt1, *elt2; - int res; + /* We may modify CHANGES, so make a copy in SCRATCH_POOL. */ + changes = svn_rangelist_dup(changes, scratch_pool); - elt1 = APR_ARRAY_IDX(original_rangelist, i, svn_merge_range_t *); - elt2 = APR_ARRAY_IDX(changes, j, svn_merge_range_t *); + while (i < rangelist->nelts && j < changes->nelts) + { + svn_merge_range_t *range = + APR_ARRAY_IDX(rangelist, i, svn_merge_range_t *); + svn_merge_range_t *change = + APR_ARRAY_IDX(changes, j, svn_merge_range_t *); + int res = svn_sort_compare_ranges(&range, &change); - res = svn_sort_compare_ranges(&elt1, &elt2); if (res == 0) { /* Only when merging two non-inheritable ranges is the result also non-inheritable. In all other cases ensure an inheritiable result. */ - if (elt1->inheritable || elt2->inheritable) - elt1->inheritable = TRUE; - SVN_ERR(combine_with_lastrange(elt1, rangelist, TRUE, result_pool)); + if (range->inheritable || change->inheritable) + range->inheritable = TRUE; i++; j++; } - else if (res < 0) + else if (res < 0) /* CHANGE is younger than RANGE */ { - SVN_ERR(combine_with_lastrange(elt1, rangelist, TRUE, result_pool)); - i++; + if (range->end < change->start) + { + /* RANGE is older than CHANGE and the two do not + adjoin or overlap */ + i++; + } + else if (range->end == change->start) + { + /* RANGE and CHANGE adjoin */ + if (range->inheritable == change->inheritable) + { + /* RANGE and CHANGE have the same inheritability so + RANGE expands to absord CHANGE. */ + range->end = change->end; + adjust_remaining_ranges(rangelist, &i, result_pool); + j++; + } + else + { + /* RANGE and CHANGE adjoin, but have different + inheritability. Since RANGE is older, just + move on to the next RANGE. */ + i++; + } + } + else + { + /* RANGE and CHANGE overlap, but how? */ + if ((range->inheritable == change->inheritable) + || range->inheritable) + { + /* If CHANGE is a proper subset of RANGE, it absorbs RANGE + with no adjustment otherwise only the intersection is + absorbed and CHANGE is truncated. */ + if (range->end >= change->end) + j++; + else + change->start = range->end; + } + else + { + /* RANGE is non-inheritable and CHANGE is inheritable. */ + if (range->start < change->start) + { + /* CHANGE absorbs intersection with RANGE and RANGE + is truncated. */ + svn_merge_range_t *range_copy = + svn_merge_range_dup(range, result_pool); + range_copy->end = change->start; + range->start = change->start; + svn_sort__array_insert(&range_copy, rangelist, i++); + } + else + { + /* CHANGE and RANGE share the same start rev, but + RANGE is considered older because its end rev + is older. */ + range->inheritable = TRUE; + change->start = range->end; + } + } + } } - else + else /* res > 0, CHANGE is older than RANGE */ { - SVN_ERR(combine_with_lastrange(elt2, rangelist, TRUE, result_pool)); - j++; + if (change->end < range->start) + { + /* CHANGE is older than RANGE and the two do not + adjoin or overlap, so insert a copy of CHANGE + into RANGELIST. */ + svn_merge_range_t *change_copy = + svn_merge_range_dup(change, result_pool); + svn_sort__array_insert(&change_copy, rangelist, i++); + j++; + } + else if (change->end == range->start) + { + /* RANGE and CHANGE adjoin */ + if (range->inheritable == change->inheritable) + { + /* RANGE and CHANGE have the same inheritability so we + can simply combine the two in place. */ + range->start = change->start; + j++; + } + else + { + /* RANGE and CHANGE have different inheritability so insert + a copy of CHANGE into RANGELIST. */ + svn_merge_range_t *change_copy = + svn_merge_range_dup(change, result_pool); + svn_sort__array_insert(&change_copy, rangelist, i); + j++; + } + } + else + { + /* RANGE and CHANGE overlap. */ + if (range->inheritable == change->inheritable) + { + /* RANGE and CHANGE have the same inheritability so we + can simply combine the two in place... */ + range->start = change->start; + if (range->end < change->end) + { + /* ...but if RANGE is expanded ensure that we don't + violate any rangelist invariants. */ + range->end = change->end; + adjust_remaining_ranges(rangelist, &i, result_pool); + } + j++; + } + else if (range->inheritable) + { + if (change->start < range->start) + { + /* RANGE is inheritable so absorbs any part of CHANGE + it overlaps. CHANGE is truncated and the remainder + inserted into RANGELIST. */ + svn_merge_range_t *change_copy = + svn_merge_range_dup(change, result_pool); + change_copy->end = range->start; + change->start = range->start; + svn_sort__array_insert(&change_copy, rangelist, i++); + } + else + { + /* CHANGE and RANGE share the same start rev, but + CHANGE is considered older because CHANGE->END is + older than RANGE->END. */ + j++; + } + } + else + { + /* RANGE is non-inheritable and CHANGE is inheritable. */ + if (change->start < range->start) + { + if (change->end == range->end) + { + /* RANGE is a proper subset of CHANGE and share the + same end revision, so set RANGE equal to CHANGE. */ + range->start = change->start; + range->inheritable = TRUE; + j++; + } + else if (change->end > range->end) + { + /* RANGE is a proper subset of CHANGE and CHANGE has + a younger end revision, so set RANGE equal to its + intersection with CHANGE and truncate CHANGE. */ + range->start = change->start; + range->inheritable = TRUE; + change->start = range->end; + } + else + { + /* CHANGE and RANGE overlap. Set RANGE equal to its + intersection with CHANGE and take the remainder + of RANGE and insert it into RANGELIST. */ + svn_merge_range_t *range_copy = + svn_merge_range_dup(range, result_pool); + range_copy->start = change->end; + range->start = change->start; + range->end = change->end; + range->inheritable = TRUE; + svn_sort__array_insert(&range_copy, rangelist, ++i); + j++; + } + } + else + { + /* CHANGE and RANGE share the same start rev, but + CHANGE is considered older because its end rev + is older. + + Insert the intersection of RANGE and CHANGE into + RANGELIST and then set RANGE to the non-intersecting + portion of RANGE. */ + svn_merge_range_t *range_copy = + svn_merge_range_dup(range, result_pool); + range_copy->end = change->end; + range_copy->inheritable = TRUE; + range->start = change->end; + svn_sort__array_insert(&range_copy, rangelist, i++); + j++; + } + } + } } } - /* Copy back any remaining elements. - Only one of these loops should end up running, if anything. */ - - SVN_ERR_ASSERT(!(i < (original_rangelist)->nelts && j < changes->nelts)); - for (; i < (original_rangelist)->nelts; i++) + /* Copy any remaining elements in CHANGES into RANGELIST. */ + for (; j < (changes)->nelts; j++) { - svn_merge_range_t *elt = APR_ARRAY_IDX(original_rangelist, i, - svn_merge_range_t *); - SVN_ERR(combine_with_lastrange(elt, rangelist, TRUE, result_pool)); - } - - - for (; j < changes->nelts; j++) - { - svn_merge_range_t *elt = APR_ARRAY_IDX(changes, j, svn_merge_range_t *); - SVN_ERR(combine_with_lastrange(elt, rangelist, TRUE, result_pool)); + svn_merge_range_t *change = + APR_ARRAY_IDX(changes, j, svn_merge_range_t *); + svn_merge_range_t *change_copy = svn_merge_range_dup(change, + result_pool); + svn_sort__array_insert(&change_copy, rangelist, rangelist->nelts); } return SVN_NO_ERROR; @@ -2280,3 +2613,27 @@ svn_mergeinfo__mergeinfo_from_segments(s *mergeinfo_p = mergeinfo; return SVN_NO_ERROR; } + +const char * +svn_inheritance_to_word(svn_mergeinfo_inheritance_t inherit) +{ + switch (inherit) + { + case svn_mergeinfo_inherited: + return "inherited"; + case svn_mergeinfo_nearest_ancestor: + return "nearest-ancestor"; + default: + return "explicit"; + } +} + +svn_mergeinfo_inheritance_t +svn_inheritance_from_word(const char *word) +{ + if (strcmp(word, "inherited") == 0) + return svn_mergeinfo_inherited; + if (strcmp(word, "nearest-ancestor") == 0) + return svn_mergeinfo_nearest_ancestor; + return svn_mergeinfo_explicit; +} Modified: subversion/branches/tree-read-api/subversion/libsvn_subr/sorts.c URL: http://svn.apache.org/viewvc/subversion/branches/tree-read-api/subversion/libsvn_subr/sorts.c?rev=1181833&r1=1181832&r2=1181833&view=diff ============================================================================== --- subversion/branches/tree-read-api/subversion/libsvn_subr/sorts.c (original) +++ subversion/branches/tree-read-api/subversion/libsvn_subr/sorts.c Tue Oct 11 15:16:47 2011 @@ -245,3 +245,35 @@ svn_sort__array_insert(const void *new_e /* Copy in the new element */ memcpy(new_position, new_element, array->elt_size); } + +void +svn_sort__array_delete(apr_array_header_t *arr, + int delete_index, + int elements_to_delete) +{ + /* Do we have a valid index and are there enough elements? */ + if (delete_index >= 0 + && delete_index < arr->nelts + && elements_to_delete > 0 + && (elements_to_delete + delete_index) <= arr->nelts) + { + if (delete_index == (arr->nelts - 1)) + { + /* Deleting the last or only element in an array is easy. */ + apr_array_pop(arr); + } + else if ((delete_index + elements_to_delete) == arr->nelts) + { + /* Delete the last ELEMENTS_TO_DELETE elements. */ + arr->nelts -= elements_to_delete; + } + else + { + memmove( + arr->elts + arr->elt_size * delete_index, + arr->elts + (arr->elt_size * (delete_index + elements_to_delete)), + arr->elt_size * (arr->nelts - elements_to_delete - delete_index)); + arr->nelts -= elements_to_delete; + } + } +} Modified: subversion/branches/tree-read-api/subversion/libsvn_subr/sqlite.c URL: http://svn.apache.org/viewvc/subversion/branches/tree-read-api/subversion/libsvn_subr/sqlite.c?rev=1181833&r1=1181832&r2=1181833&view=diff ============================================================================== --- subversion/branches/tree-read-api/subversion/libsvn_subr/sqlite.c (original) +++ subversion/branches/tree-read-api/subversion/libsvn_subr/sqlite.c Tue Oct 11 15:16:47 2011 @@ -637,12 +637,6 @@ init_sqlite(void *baton, apr_pool_t *poo #endif /* APR_HAS_THRADS */ - /* SQLite 3.5 allows sharing cache instances, even in a multithreaded - environment. This allows sharing cached data when we open a database - more than once (Very common in the current pre-single-database state) */ - SQLITE_ERR_MSG(sqlite3_enable_shared_cache(TRUE), - _("Could not initialize SQLite shared cache")); - return SVN_NO_ERROR; } @@ -673,6 +667,13 @@ internal_open(sqlite3 **db3, const char flags |= SQLITE_OPEN_NOMUTEX; #endif + /* SQLite 3.5 allows sharing cache instances, even in a multithreaded + environment. This allows sharing cached data when we open a database + more than once. + + OS X 10.7 doesn't support sqlite3_enable_shared_cache. */ + flags |= SQLITE_OPEN_SHAREDCACHE; + /* Open the database. Note that a handle is returned, even when an error occurs (except for out-of-memory); thus, we can safely use it to extract an error message and construct an svn_error_t. */ Propchange: subversion/branches/tree-read-api/subversion/libsvn_subr/svn_temp_serializer.c ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Oct 11 15:16:47 2011 @@ -1,2 +1,2 @@ /subversion/branches/revprop-packing/subversion/libsvn_subr/svn_temp_serializer.c:1143907,1143971,1144017,1144568,1146145 -/subversion/trunk/subversion/libsvn_subr/svn_temp_serializer.c:1067687-1072301 +/subversion/trunk/subversion/libsvn_subr/svn_temp_serializer.c:1067687-1072301,1180089-1181830 Modified: subversion/branches/tree-read-api/subversion/libsvn_wc/status.c URL: http://svn.apache.org/viewvc/subversion/branches/tree-read-api/subversion/libsvn_wc/status.c?rev=1181833&r1=1181832&r2=1181833&view=diff ============================================================================== --- subversion/branches/tree-read-api/subversion/libsvn_wc/status.c (original) +++ subversion/branches/tree-read-api/subversion/libsvn_wc/status.c Tue Oct 11 15:16:47 2011 @@ -184,6 +184,9 @@ struct dir_baton /* The pool in which this baton itself is allocated. */ apr_pool_t *pool; + /* The repository root relative path to this item in the repository. */ + const char *repos_relpath; + /* out-of-date info corresponding to ood_* fields in svn_wc_status3_t. */ svn_node_kind_t ood_kind; svn_revnum_t ood_changed_rev; @@ -223,6 +226,9 @@ struct file_baton the code that syncs up the adm dir and working copy. */ svn_boolean_t prop_changed; + /* The repository root relative path to this item in the repository. */ + const char *repos_relpath; + /* out-of-date info corresponding to ood_* fields in svn_wc_status3_t. */ svn_node_kind_t ood_kind; svn_revnum_t ood_changed_rev; @@ -1573,6 +1579,27 @@ tweak_statushash(void *baton, { struct dir_baton *b = this_dir_baton; + if (!statstruct->repos_relpath && b->repos_relpath) + { + if (statstruct->repos_node_status == svn_wc_status_deleted) + { + /* When deleting PATH, BATON is for PATH's parent, + so we must construct PATH's real statstruct->url. */ + statstruct->repos_relpath = + svn_relpath_join(b->repos_relpath, + svn_dirent_basename(local_abspath, + NULL), + pool); + } + else + statstruct->repos_relpath = apr_pstrdup(pool, b->repos_relpath); + + statstruct->repos_root_url = + b->edit_baton->anchor_status->repos_root_url; + statstruct->repos_uuid = + b->edit_baton->anchor_status->repos_uuid; + } + /* The last committed date, and author for deleted items isn't available. */ if (statstruct->repos_node_status == svn_wc_status_deleted) @@ -1606,6 +1633,14 @@ tweak_statushash(void *baton, struct file_baton *b = baton; statstruct->ood_changed_rev = b->ood_changed_rev; statstruct->ood_changed_date = b->ood_changed_date; + if (!statstruct->repos_relpath && b->repos_relpath) + { + statstruct->repos_relpath = apr_pstrdup(pool, b->repos_relpath); + statstruct->repos_root_url = + b->edit_baton->anchor_status->repos_root_url; + statstruct->repos_uuid = + b->edit_baton->anchor_status->repos_uuid; + } statstruct->ood_kind = b->ood_kind; if (b->ood_changed_author) statstruct->ood_changed_author = @@ -1628,9 +1663,9 @@ find_dir_repos_relpath(const struct dir_ const svn_wc_status3_t *status = apr_hash_get(pb->statii, db->local_abspath, APR_HASH_KEY_STRING); - /* Note that status->url is NULL in the case of a missing - * directory, which means we need to recurse up another level to - * get a useful URL. */ + /* Note that status->repos_relpath could be NULL in the case of a missing + * directory, which means we need to recurse up another level to get + * a useful relpath. */ if (status) return status->repos_relpath; @@ -1675,6 +1710,7 @@ make_dir_baton(void **dir_baton, d->statii = apr_hash_make(pool); d->ood_changed_rev = SVN_INVALID_REVNUM; d->ood_changed_date = 0; + d->repos_relpath = apr_pstrdup(pool, find_dir_repos_relpath(d, pool)); d->ood_kind = svn_node_dir; d->ood_changed_author = NULL; @@ -1768,6 +1804,8 @@ make_file_baton(struct dir_baton *parent f->edit_baton = eb; f->ood_changed_rev = SVN_INVALID_REVNUM; f->ood_changed_date = 0; + f->repos_relpath = svn_relpath_join(find_dir_repos_relpath(pb, pool), + f->name, pool); f->ood_kind = svn_node_file; f->ood_changed_author = NULL; return f; Modified: subversion/branches/tree-read-api/subversion/tests/libsvn_subr/mergeinfo-test.c URL: http://svn.apache.org/viewvc/subversion/branches/tree-read-api/subversion/tests/libsvn_subr/mergeinfo-test.c?rev=1181833&r1=1181832&r2=1181833&view=diff ============================================================================== --- subversion/branches/tree-read-api/subversion/tests/libsvn_subr/mergeinfo-test.c (original) +++ subversion/branches/tree-read-api/subversion/tests/libsvn_subr/mergeinfo-test.c Tue Oct 11 15:16:47 2011 @@ -1181,7 +1181,7 @@ test_rangelist_merge(apr_pool_t *pool) svn_merge_range_t expected_merge[6]; }; - #define SIZE_OF_RANGE_MERGE_TEST_ARRAY 59 + #define SIZE_OF_RANGE_MERGE_TEST_ARRAY 68 /* The actual test data. */ struct rangelist_merge_test_data test_data[SIZE_OF_RANGE_MERGE_TEST_ARRAY] = { @@ -1266,6 +1266,29 @@ test_rangelist_merge(apr_pool_t *pool) {"/A: 2-17", "/A: 1-5*,7*,12-13*", 2, {{0, 1, FALSE}, {1, 17, TRUE}}}, + {"/A: 3-4*,10-15,20", "/A: 5-60*", 5, + {{2, 9, FALSE}, {9, 15, TRUE}, {15, 19, FALSE},{19, 20, TRUE}, + {20, 60, FALSE}}}, + + {"/A: 5-60*", "/A: 3-4*,10-15,20", 5, + {{2, 9, FALSE}, {9, 15, TRUE}, {15, 19, FALSE},{19, 20, TRUE}, + {20, 60, FALSE}}}, + + {"/A: 3-4*,50-100*", "/A: 5-60*", 1, {{2, 100, FALSE}}}, + + {"/A: 5-60*", "/A: 3-4*,50-100*", 1, {{2, 100, FALSE}}}, + + {"/A: 3-4*,50-100", "/A: 5-60*", 2, {{2, 49, FALSE}, {49, 100, TRUE}}}, + + {"/A: 5-60*", "/A: 3-4*,50-100", 2, {{2, 49, FALSE}, {49, 100, TRUE}}}, + + {"/A: 3-4,50-100*", "/A: 5-60", 2, {{2, 60, TRUE}, {60, 100, FALSE}}}, + + {"/A: 5-60", "/A: 3-4,50-100*", 2, {{2, 60, TRUE}, {60, 100, FALSE}}}, + + {"/A: 5,9,11-15,17,200-300,999", "/A: 7-50", 4, + {{4, 5, TRUE}, {6, 50, TRUE}, {199, 300, TRUE}, {998, 999, TRUE}}}, + /* A rangelist merged with an empty rangelist should equal the non-empty rangelist but in compacted form. */ {"/A: 1-44,45,46,47-50", "", 1, {{ 0, 50, TRUE }}}, Modified: subversion/branches/tree-read-api/tools/client-side/mergeinfo-sanitizer.py URL: http://svn.apache.org/viewvc/subversion/branches/tree-read-api/tools/client-side/mergeinfo-sanitizer.py?rev=1181833&r1=1181832&r2=1181833&view=diff ============================================================================== --- subversion/branches/tree-read-api/tools/client-side/mergeinfo-sanitizer.py (original) +++ subversion/branches/tree-read-api/tools/client-side/mergeinfo-sanitizer.py Tue Oct 11 15:16:47 2011 @@ -1,4 +1,23 @@ #!/usr/bin/env python +# +# ==================================================================== +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ==================================================================== import svn import sys import os Modified: subversion/branches/tree-read-api/tools/client-side/svn-viewspec.py URL: http://svn.apache.org/viewvc/subversion/branches/tree-read-api/tools/client-side/svn-viewspec.py?rev=1181833&r1=1181832&r2=1181833&view=diff ============================================================================== --- subversion/branches/tree-read-api/tools/client-side/svn-viewspec.py (original) +++ subversion/branches/tree-read-api/tools/client-side/svn-viewspec.py Tue Oct 11 15:16:47 2011 @@ -20,6 +20,8 @@ # ==================================================================== """\ +__SCRIPTNAME__: checkout utility for sparse Subversion working copies + Usage: 1. __SCRIPTNAME__ checkout VIEWSPEC-FILE TARGET-DIR 2. __SCRIPTNAME__ examine VIEWSPEC-FILE 3. __SCRIPTNAME__ help Modified: subversion/branches/tree-read-api/tools/dev/benchmarks/suite1/cronjob URL: http://svn.apache.org/viewvc/subversion/branches/tree-read-api/tools/dev/benchmarks/suite1/cronjob?rev=1181833&r1=1181832&r2=1181833&view=diff ============================================================================== --- subversion/branches/tree-read-api/tools/dev/benchmarks/suite1/cronjob (original) +++ subversion/branches/tree-read-api/tools/dev/benchmarks/suite1/cronjob Tue Oct 11 15:16:47 2011 @@ -1,4 +1,24 @@ #!/bin/bash +# +# ==================================================================== +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ==================================================================== +# # This is the cronjob as run on our ASF box aka svn-qavm. # It uses neels' mad bash script magic called 'pat' to update and # build the latest trunk, invokes a benchmark and sends as mail. Modified: subversion/branches/tree-read-api/tools/dist/collect_sigs.py URL: http://svn.apache.org/viewvc/subversion/branches/tree-read-api/tools/dist/collect_sigs.py?rev=1181833&r1=1181832&r2=1181833&view=diff ============================================================================== --- subversion/branches/tree-read-api/tools/dist/collect_sigs.py (original) +++ subversion/branches/tree-read-api/tools/dist/collect_sigs.py Tue Oct 11 15:16:47 2011 @@ -75,7 +75,7 @@ def generate_asc_files(target_dir='.'): db = sqlite3.connect(os.path.join(target_dir, 'sigs.db')) curs = db.cursor() - like_filename = 'subversion-%s%%' % config.version + like_filename = 'subversion-%s.%%' % config.version curs.execute('''SELECT filename, signature FROM signatures WHERE filename LIKE ?''', (like_filename, ) ) for filename, signature in curs: @@ -183,7 +183,7 @@ def list_signatures(): lines = "" curs = db.cursor() - like_filename = 'subversion-%s%%' % config.version + like_filename = 'subversion-%s.%%' % config.version curs.execute('''SELECT filename, COUNT(*) FROM signatures WHERE filename LIKE ? GROUP BY filename ORDER BY filename''', Modified: subversion/branches/tree-read-api/tools/dist/rat-excludes URL: http://svn.apache.org/viewvc/subversion/branches/tree-read-api/tools/dist/rat-excludes?rev=1181833&r1=1181832&r2=1181833&view=diff ============================================================================== --- subversion/branches/tree-read-api/tools/dist/rat-excludes (original) +++ subversion/branches/tree-read-api/tools/dist/rat-excludes Tue Oct 11 15:16:47 2011 @@ -15,6 +15,7 @@ doc/doxygen.conf notes/** packages/ subversion/tests/cmdline/getopt_tests_data/* +subversion/tests/cmdline/diff_tests_data/* subversion/bindings/swig/NOTES subversion/libsvn_fs_base/notes/TODO subversion/libsvn_fs_base/notes/fs-history @@ -31,8 +32,11 @@ subversion/bindings/ctypes-python/csvn/e subversion/tests/cmdline/svntest/err.py tools/buildbot/master/public_html/buildbot.css tools/dist/rat-excludes +tools/dist/_gnupg.py +tools/dist/templates/*.ezt tools/dev/iz/defect.dem tools/dev/iz/ff2csv.command +tools/dev/benchmarks/suite1/crontab.entry tools/hook-scripts/mailer/tests/mailer-t1.output **/*.dump **/*.icns Modified: subversion/branches/tree-read-api/tools/dist/release.py URL: http://svn.apache.org/viewvc/subversion/branches/tree-read-api/tools/dist/release.py?rev=1181833&r1=1181832&r2=1181833&view=diff ============================================================================== --- subversion/branches/tree-read-api/tools/dist/release.py (original) +++ subversion/branches/tree-read-api/tools/dist/release.py Tue Oct 11 15:16:47 2011 @@ -626,7 +626,7 @@ def check_sigs(args): target = args.target else: target = os.path.join(os.getenv('HOME'), 'public_html', 'svn', - str(args.version), 'deploy') + str(args.version)) good_sigs = {}