Author: kotkov Date: Tue Dec 6 20:21:45 2022 New Revision: 1905812 URL: http://svn.apache.org/viewvc?rev=1905812&view=rev Log: On the 'pristines-on-demand-on-mwf' branch: Sync with trunk@1905810.
Resolve conflicts in the svn_wc_private.h and wc_db_wcroot.c files. Modified: subversion/branches/pristines-on-demand-on-mwf/ (props changed) subversion/branches/pristines-on-demand-on-mwf/subversion/include/private/svn_wc_private.h subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_wcroot.c Propchange: subversion/branches/pristines-on-demand-on-mwf/ ------------------------------------------------------------------------------ Merged /subversion/trunk:r1905755-1905810 Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/include/private/svn_wc_private.h URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/include/private/svn_wc_private.h?rev=1905812&r1=1905811&r2=1905812&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/include/private/svn_wc_private.h (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/include/private/svn_wc_private.h Tue Dec 6 20:21:45 2022 @@ -2233,9 +2233,7 @@ svn_wc__min_supported_format_version(voi /** * Set @a *format_p and @a *store_pristine_p to the settings of the * nearest parent working copy root of @a local_abspath in @a wc_ctx, - * or to settings of any root stored there, preferring the one with - * the oldest format. If @a wc_ctx is empty, return the library's - * default settings. + * or to the library's default settings if there are no such roots. * * Use @a scratch_pool for temporary allocations. * Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_wcroot.c URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_wcroot.c?rev=1905812&r1=1905811&r2=1905812&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_wcroot.c (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_wcroot.c Tue Dec 6 20:21:45 2022 @@ -31,8 +31,6 @@ #include "svn_pools.h" #include "svn_version.h" -#include "private/svn_sorts_private.h" - #include "wc.h" #include "adm_files.h" #include "wc_db_private.h" @@ -1070,14 +1068,6 @@ svn_wc__db_drop_root(svn_wc__db_t *db, } -/* - * ### FIXME: - * - * There must surely be a better way to find the nearest enclosing wcroot of a - * path than by copying the hash keys to an array and sorting the array. - * - * TODO: Convert the svn_wc__db_t::dir_data hash to a sorted dictionary?. - */ svn_error_t * svn_wc__settings_from_context(int *format_p, svn_boolean_t *store_pristine_p, @@ -1085,77 +1075,25 @@ svn_wc__settings_from_context(int *forma const char *local_abspath, apr_pool_t *scratch_pool) { - apr_hash_t *const dir_data = wc_ctx->db->dir_data; - apr_array_header_t *keys; - int index; - - /* This is what we return if we don't find a concrete format version. */ - SVN_ERR(svn_hash_keys(&keys, dir_data, scratch_pool)); - if (0 == keys->nelts) + const char *current_path = local_abspath; + + do { - *format_p = SVN_WC__DEFAULT_VERSION; - *store_pristine_p = TRUE; - return SVN_NO_ERROR; - } + svn_wc__db_wcroot_t *wcroot; - svn_sort__array(keys, svn_sort_compare_paths); - index = svn_sort__bsearch_lower_bound(keys, &local_abspath, - svn_sort_compare_paths); - - /* If the previous key is a parent of the local_abspath, use its format. */ - { - const char *const here = (index >= keys->nelts ? NULL - : APR_ARRAY_IDX(keys, index, const char*)); - const char *const prev = (index == 0 ? NULL - : APR_ARRAY_IDX(keys, index - 1, const char*)); - - if (here) - { - const char *const child = svn_dirent_skip_ancestor(here, local_abspath); - if (child && !*child) - { - /* Found an exact match in the WC context. */ - svn_wc__db_wcroot_t *wcroot = svn_hash_gets(dir_data, here); - *format_p = wcroot->format; - *store_pristine_p = wcroot->store_pristine; - return SVN_NO_ERROR; - } - } - - if (prev) - { - const char *const child = svn_dirent_skip_ancestor(prev, local_abspath); - if (child) - { - /* Found the parent path in the WC context. */ - svn_wc__db_wcroot_t *wcroot = svn_hash_gets(dir_data, prev); - *format_p = wcroot->format; - *store_pristine_p = wcroot->store_pristine; - return SVN_NO_ERROR; - } - } - } - - /* Find the oldest format recorded in the WC context. */ - { - int oldest_format = SVN_WC__VERSION; - svn_boolean_t store_pristine = TRUE; - apr_hash_index_t *hi; - - for (hi = apr_hash_first(scratch_pool, dir_data); - hi; - hi = apr_hash_next(hi)) - { - svn_wc__db_wcroot_t *wcroot = apr_hash_this_val(hi); - if (wcroot->format < oldest_format) - { - oldest_format = wcroot->format; - store_pristine = wcroot->store_pristine; - } - } + wcroot = svn_hash_gets(wc_ctx->db->dir_data, current_path); + if (wcroot) + { + *format_p = wcroot->format; + *store_pristine_p = wcroot->store_pristine; + return SVN_NO_ERROR; + } - *format_p = oldest_format; - *store_pristine_p = store_pristine; - return SVN_NO_ERROR; - } + current_path = svn_dirent_dirname(current_path, scratch_pool); + } + while (!svn_dirent_is_root(current_path, strlen(current_path))); + + *format_p = SVN_WC__DEFAULT_VERSION; + *store_pristine_p = TRUE; + return SVN_NO_ERROR; }