Return-Path: X-Original-To: apmail-subversion-commits-archive@minotaur.apache.org Delivered-To: apmail-subversion-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 68F8CD965 for ; Thu, 6 Dec 2012 20:24:30 +0000 (UTC) Received: (qmail 34134 invoked by uid 500); 6 Dec 2012 20:24:30 -0000 Delivered-To: apmail-subversion-commits-archive@subversion.apache.org Received: (qmail 34114 invoked by uid 500); 6 Dec 2012 20:24:30 -0000 Mailing-List: contact commits-help@subversion.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@subversion.apache.org Delivered-To: mailing list commits@subversion.apache.org Received: (qmail 34107 invoked by uid 99); 6 Dec 2012 20:24:30 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 06 Dec 2012 20:24:30 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 06 Dec 2012 20:24:26 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 79F1B23888E4; Thu, 6 Dec 2012 20:24:06 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: svn commit: r1418054 [1/3] - in /subversion/branches/in-repo-authz: ./ subversion/include/ subversion/include/private/ subversion/libsvn_client/ subversion/libsvn_ra_serf/ subversion/libsvn_subr/ subversion/libsvn_wc/ subversion/mod_dav_svn/ subversion... Date: Thu, 06 Dec 2012 20:23:58 -0000 To: commits@subversion.apache.org From: breser@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20121206202406.79F1B23888E4@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: breser Date: Thu Dec 6 20:23:54 2012 New Revision: 1418054 URL: http://svn.apache.org/viewvc?rev=1418054&view=rev Log: Sync the 'in-repo-authz' branch with recent trunk changes. (Merged /subversion/trunk:r1417565-r1418053.) Modified: subversion/branches/in-repo-authz/ (props changed) subversion/branches/in-repo-authz/COMMITTERS subversion/branches/in-repo-authz/subversion/include/private/svn_skel.h subversion/branches/in-repo-authz/subversion/include/private/svn_wc_private.h subversion/branches/in-repo-authz/subversion/include/svn_config.h subversion/branches/in-repo-authz/subversion/libsvn_client/add.c subversion/branches/in-repo-authz/subversion/libsvn_client/client.h subversion/branches/in-repo-authz/subversion/libsvn_ra_serf/commit.c subversion/branches/in-repo-authz/subversion/libsvn_ra_serf/ra_serf.h subversion/branches/in-repo-authz/subversion/libsvn_ra_serf/serf.c subversion/branches/in-repo-authz/subversion/libsvn_ra_serf/update.c subversion/branches/in-repo-authz/subversion/libsvn_subr/config_file.c subversion/branches/in-repo-authz/subversion/libsvn_wc/adm_crawler.c subversion/branches/in-repo-authz/subversion/libsvn_wc/adm_files.c subversion/branches/in-repo-authz/subversion/libsvn_wc/ambient_depth_filter_editor.c subversion/branches/in-repo-authz/subversion/libsvn_wc/conflicts.c subversion/branches/in-repo-authz/subversion/libsvn_wc/conflicts.h subversion/branches/in-repo-authz/subversion/libsvn_wc/diff_editor.c subversion/branches/in-repo-authz/subversion/libsvn_wc/diff_local.c subversion/branches/in-repo-authz/subversion/libsvn_wc/entries.c subversion/branches/in-repo-authz/subversion/libsvn_wc/externals.c subversion/branches/in-repo-authz/subversion/libsvn_wc/info.c subversion/branches/in-repo-authz/subversion/libsvn_wc/merge.c subversion/branches/in-repo-authz/subversion/libsvn_wc/node.c subversion/branches/in-repo-authz/subversion/libsvn_wc/props.c subversion/branches/in-repo-authz/subversion/libsvn_wc/props.h subversion/branches/in-repo-authz/subversion/libsvn_wc/status.c subversion/branches/in-repo-authz/subversion/libsvn_wc/update_editor.c subversion/branches/in-repo-authz/subversion/libsvn_wc/util.c subversion/branches/in-repo-authz/subversion/libsvn_wc/wc_db.c subversion/branches/in-repo-authz/subversion/libsvn_wc/wc_db.h subversion/branches/in-repo-authz/subversion/libsvn_wc/wc_db_private.h subversion/branches/in-repo-authz/subversion/libsvn_wc/wc_db_update_move.c subversion/branches/in-repo-authz/subversion/libsvn_wc/workqueue.c subversion/branches/in-repo-authz/subversion/mod_dav_svn/dav_svn.h subversion/branches/in-repo-authz/subversion/mod_dav_svn/mod_dav_svn.c subversion/branches/in-repo-authz/subversion/mod_dav_svn/reports/update.c subversion/branches/in-repo-authz/subversion/tests/cmdline/merge_automatic_tests.py subversion/branches/in-repo-authz/subversion/tests/cmdline/prop_tests.py subversion/branches/in-repo-authz/subversion/tests/libsvn_wc/db-test.c Propchange: subversion/branches/in-repo-authz/ ------------------------------------------------------------------------------ Merged /subversion/trunk:r1417565-1418053 Modified: subversion/branches/in-repo-authz/COMMITTERS URL: http://svn.apache.org/viewvc/subversion/branches/in-repo-authz/COMMITTERS?rev=1418054&r1=1418053&r2=1418054&view=diff ============================================================================== --- subversion/branches/in-repo-authz/COMMITTERS [UTF-8] (original) +++ subversion/branches/in-repo-authz/COMMITTERS [UTF-8] Thu Dec 6 20:23:54 2012 @@ -131,7 +131,7 @@ Commit access for specific areas: nori Kobayashi Noritada (Ruby tools, po: ja) [EMAIL IS BOUNCING] - mf Martin Furter (svnmirror.sh + mf Martin Furter (svnmirror.sh svn-backup-dumps.py) adejong Arthur de Jong (svn2cl) wsanchez Wilfredo Sánchez (various contrib) Modified: subversion/branches/in-repo-authz/subversion/include/private/svn_skel.h URL: http://svn.apache.org/viewvc/subversion/branches/in-repo-authz/subversion/include/private/svn_skel.h?rev=1418054&r1=1418053&r2=1418054&view=diff ============================================================================== --- subversion/branches/in-repo-authz/subversion/include/private/svn_skel.h (original) +++ subversion/branches/in-repo-authz/subversion/include/private/svn_skel.h Thu Dec 6 20:23:54 2012 @@ -213,7 +213,7 @@ svn_skel__parse_prop(svn_string_t **prop apr_pool_t *result_pool); /* Unparse a PROPLIST hash (which has const char * property names and - svn_stringbuf_t * values) into a `PROPLIST' skel *SKEL_P. Use POOL + svn_string_t * values) into a `PROPLIST' skel *SKEL_P. Use POOL for all allocations. */ svn_error_t * svn_skel__unparse_proplist(svn_skel_t **skel_p, Modified: subversion/branches/in-repo-authz/subversion/include/private/svn_wc_private.h URL: http://svn.apache.org/viewvc/subversion/branches/in-repo-authz/subversion/include/private/svn_wc_private.h?rev=1418054&r1=1418053&r2=1418054&view=diff ============================================================================== --- subversion/branches/in-repo-authz/subversion/include/private/svn_wc_private.h (original) +++ subversion/branches/in-repo-authz/subversion/include/private/svn_wc_private.h Thu Dec 6 20:23:54 2012 @@ -1594,7 +1594,11 @@ svn_wc__get_switch_editor(const svn_delt * and for top-level file entries as well (if any). If * #svn_depth_immediates, do the same as #svn_depth_files but also diff * top-level subdirectories at #svn_depth_empty. If #svn_depth_infinity, - * then diff fully recursively. + * then diff fully recursively. If @a depth is #svn_depth_unknown, then... + * + * ### ... then the @a server_performs_filtering option is meaningful. + * ### But what does this depth mean exactly? Something about 'ambient' + * ### depth? How does it compare with depth 'infinity'? * * @a ignore_ancestry determines whether paths that have discontinuous node * ancestry are treated as delete/add or as simple modifications. If @@ -1621,7 +1625,7 @@ svn_wc__get_switch_editor(const svn_delt * it's a member of one of those changelists. If @a changelist_filter is * empty (or altogether @c NULL), no changelist filtering occurs. * - * If @a server_performs_filtering is TRUE, assume that the server handles + * If @a server_performs_filtering is TRUE, assume that the server handles * the ambient depth filtering, so this doesn't have to be handled in the * editor. * Modified: subversion/branches/in-repo-authz/subversion/include/svn_config.h URL: http://svn.apache.org/viewvc/subversion/branches/in-repo-authz/subversion/include/svn_config.h?rev=1418054&r1=1418053&r2=1418054&view=diff ============================================================================== --- subversion/branches/in-repo-authz/subversion/include/svn_config.h (original) +++ subversion/branches/in-repo-authz/subversion/include/svn_config.h Thu Dec 6 20:23:54 2012 @@ -87,6 +87,8 @@ typedef struct svn_config_t svn_config_t #define SVN_CONFIG_OPTION_STORE_SSL_CLIENT_CERT_PP_PLAINTEXT \ "store-ssl-client-cert-pp-plaintext" #define SVN_CONFIG_OPTION_USERNAME "username" +/** @since New in 1.8. */ +#define SVN_CONFIG_OPTION_BULK_UPDATES "bulk-updates" #define SVN_CONFIG_CATEGORY_CONFIG "config" #define SVN_CONFIG_SECTION_AUTH "auth" Modified: subversion/branches/in-repo-authz/subversion/libsvn_client/add.c URL: http://svn.apache.org/viewvc/subversion/branches/in-repo-authz/subversion/libsvn_client/add.c?rev=1418054&r1=1418053&r2=1418054&view=diff ============================================================================== --- subversion/branches/in-repo-authz/subversion/libsvn_client/add.c (original) +++ subversion/branches/in-repo-authz/subversion/libsvn_client/add.c Thu Dec 6 20:23:54 2012 @@ -381,20 +381,15 @@ add_file(const char *local_abspath, * If DIR_ABSPATH (or any item below DIR_ABSPATH) is already scheduled for * addition, add will fail and return an error unless FORCE is TRUE. * - * Files and directories that match ignore patterns will not be added unless - * NO_IGNORE is TRUE. - * * Use MAGIC_COOKIE (which may be NULL) to detect the mime-type of files * if necessary. * - * If not NULL, *CONFIG_AUTOPROPS is a hash representing the config file and + * If not NULL, CONFIG_AUTOPROPS is a hash representing the config file and * svn:auto-props autoprops which apply to DIR_ABSPATH. It maps * const char * file patterns to another hash which maps const char * - * property names to const char *property values. If *CONFIG_AUTOPROPS is - * NULL and DIR_ABSPATH is unversioned, then this function will populate - * *CONFIG_AUTOPROPS (allocated in RESULT_POOL) using DIR_ABSPATH's nearest - * versioned parent to determine the svn:auto-props which DIR_ABSPATH - * will inherit once added. + * property names to const char *property values. If CONFIG_AUTOPROPS is + * NULL and the config file and svn:auto-props autoprops are required by this + * function, then such will be obtained. * * If IGNORES is not NULL, then it is an array of const char * ignore patterns * that apply to any children of DIR_ABSPATH. If REFRESH_IGNORES is TRUE, then @@ -413,14 +408,12 @@ static svn_error_t * add_dir_recursive(const char *dir_abspath, svn_depth_t depth, svn_boolean_t force, - svn_boolean_t no_ignore, svn_boolean_t no_autoprops, svn_magic__cookie_t *magic_cookie, - apr_hash_t **config_autoprops, + apr_hash_t *config_autoprops, svn_boolean_t refresh_ignores, apr_array_header_t *ignores, svn_client_ctx_t *ctx, - apr_pool_t *result_pool, apr_pool_t *scratch_pool) { svn_error_t *err; @@ -438,8 +431,8 @@ add_dir_recursive(const char *dir_abspat if (refresh_ignores) SVN_ERR(svn_client__get_all_ignores(&ignores, dir_abspath, - no_ignore, ctx, scratch_pool, - scratch_pool)); + ctx, scratch_pool, + iterpool)); /* Add this directory to revision control. */ err = svn_wc_add_from_disk(ctx->wc_ctx, dir_abspath, @@ -458,19 +451,21 @@ add_dir_recursive(const char *dir_abspat } } - /* For the root of any unversioned subtree, get some or all of the - following: + /* If DIR_ABSPATH is the root of an unversioned subtree then get the + following "autoprops": 1) Explicit and inherited svn:auto-props properties on DIR_ABSPATH - 2) Explicit and inherited svn:global-ignores properties on - DIR_ABSPATH - 3) auto-props from the CTX->CONFIG hash */ - if (!entry_exists && *config_autoprops == NULL) + 2) auto-props from the CTX->CONFIG hash + + Since this set of autoprops applies to all unversioned children of + DIR_ABSPATH, we will pass these along to any recursive calls to + add_dir_recursive() and calls to add_file() below. Thus sparing + these callees from looking up the same information. */ + if (!entry_exists && config_autoprops == NULL) { - SVN_ERR(svn_client__get_all_auto_props(config_autoprops, dir_abspath, - ctx, result_pool, - scratch_pool)); + SVN_ERR(svn_client__get_all_auto_props(&config_autoprops, dir_abspath, + ctx, scratch_pool, iterpool)); found_unversioned_root = TRUE; } @@ -518,15 +513,15 @@ add_dir_recursive(const char *dir_abspat refresh_ignores = FALSE; SVN_ERR(add_dir_recursive(abspath, depth_below_here, - force, no_ignore, no_autoprops, + force, no_autoprops, magic_cookie, config_autoprops, refresh_ignores, ignores, ctx, - iterpool, iterpool)); + iterpool)); } else if ((dirent->kind == svn_node_file || dirent->special) && depth >= svn_depth_files) { - err = add_file(abspath, magic_cookie, *config_autoprops, + err = add_file(abspath, magic_cookie, config_autoprops, no_autoprops, ctx, iterpool); if (err && err->apr_err == SVN_ERR_ENTRY_EXISTS && force) svn_error_clear(err); @@ -538,11 +533,6 @@ add_dir_recursive(const char *dir_abspat /* Destroy the per-iteration pool. */ svn_pool_destroy(iterpool); - /* Reset CONFIG_AUTOPROPS if we just finished processing the root - of an unversioned subtree. */ - if (found_unversioned_root) - *config_autoprops = NULL; - return SVN_NO_ERROR; } @@ -898,7 +888,6 @@ svn_error_t *svn_client__get_inherited_i svn_error_t *svn_client__get_all_ignores(apr_array_header_t **ignores, const char *local_abspath, - svn_boolean_t no_ignore, svn_client_ctx_t *ctx, apr_pool_t *result_pool, apr_pool_t *scratch_pool) @@ -957,11 +946,8 @@ svn_error_t *svn_client__get_all_ignores /* Now that we are sure we have an existing parent, get the config ignore and the local ignore patterns... */ - if (!no_ignore) - SVN_ERR(svn_wc_get_ignores2(ignores, ctx->wc_ctx, local_abspath, - ctx->config, result_pool, scratch_pool)); - else - *ignores = apr_array_make(result_pool, 16, sizeof(const char *)); + SVN_ERR(svn_wc_get_ignores2(ignores, ctx->wc_ctx, local_abspath, + ctx->config, result_pool, scratch_pool)); /* ...and add the inherited ignores to it. */ for (i = 0; i < inherited_ignores->nelts; i++) @@ -997,7 +983,6 @@ add(const char *local_abspath, svn_node_kind_t kind; svn_error_t *err; svn_magic__cookie_t *magic_cookie; - apr_hash_t *config_autoprops = NULL; apr_array_header_t *ignores = NULL; svn_magic__init(&magic_cookie, scratch_pool); @@ -1048,12 +1033,12 @@ add(const char *local_abspath, /* We use add_dir_recursive for all directory targets and pass depth along no matter what it is, so that the target's depth will be set correctly. */ - err = add_dir_recursive(local_abspath, depth, force, no_ignore, - no_autoprops, magic_cookie, &config_autoprops, - TRUE, ignores, ctx, scratch_pool, scratch_pool); + err = add_dir_recursive(local_abspath, depth, force, + no_autoprops, magic_cookie, NULL, + !no_ignore, ignores, ctx, scratch_pool); } else if (kind == svn_node_file) - err = add_file(local_abspath, magic_cookie, config_autoprops, + err = add_file(local_abspath, magic_cookie, NULL, no_autoprops, ctx, scratch_pool); else if (kind == svn_node_none) { Modified: subversion/branches/in-repo-authz/subversion/libsvn_client/client.h URL: http://svn.apache.org/viewvc/subversion/branches/in-repo-authz/subversion/libsvn_client/client.h?rev=1418054&r1=1418053&r2=1418054&view=diff ============================================================================== --- subversion/branches/in-repo-authz/subversion/libsvn_client/client.h (original) +++ subversion/branches/in-repo-authz/subversion/libsvn_client/client.h Thu Dec 6 20:23:54 2012 @@ -394,7 +394,6 @@ svn_error_t *svn_client__get_all_auto_pr RESULT_POOL. Use SCRATCH_POOL for temporary allocations. */ svn_error_t *svn_client__get_all_ignores(apr_array_header_t **ignores, const char *local_abspath, - svn_boolean_t no_ignore, svn_client_ctx_t *ctx, apr_pool_t *result_pool, apr_pool_t *scratch_pool); Modified: subversion/branches/in-repo-authz/subversion/libsvn_ra_serf/commit.c URL: http://svn.apache.org/viewvc/subversion/branches/in-repo-authz/subversion/libsvn_ra_serf/commit.c?rev=1418054&r1=1418053&r2=1418054&view=diff ============================================================================== --- subversion/branches/in-repo-authz/subversion/libsvn_ra_serf/commit.c (original) +++ subversion/branches/in-repo-authz/subversion/libsvn_ra_serf/commit.c Thu Dec 6 20:23:54 2012 @@ -1466,16 +1466,10 @@ open_root(void *edit_baton, for (hi = apr_hash_first(ctx->pool, ctx->revprop_table); hi; hi = apr_hash_next(hi)) { - const void *key; - void *val; - const char *name; - svn_string_t *value; + const char *name = svn__apr_hash_index_key(hi); + svn_string_t *value = svn__apr_hash_index_val(hi); const char *ns; - apr_hash_this(hi, &key, NULL, &val); - name = key; - value = val; - if (strncmp(name, SVN_PROP_PREFIX, sizeof(SVN_PROP_PREFIX) - 1) == 0) { ns = SVN_DAV_PROP_NS_SVN; Modified: subversion/branches/in-repo-authz/subversion/libsvn_ra_serf/ra_serf.h URL: http://svn.apache.org/viewvc/subversion/branches/in-repo-authz/subversion/libsvn_ra_serf/ra_serf.h?rev=1418054&r1=1418053&r2=1418054&view=diff ============================================================================== --- subversion/branches/in-repo-authz/subversion/libsvn_ra_serf/ra_serf.h (original) +++ subversion/branches/in-repo-authz/subversion/libsvn_ra_serf/ra_serf.h Thu Dec 6 20:23:54 2012 @@ -223,6 +223,11 @@ struct svn_ra_serf__session_t { /*** End HTTP v2 stuff ***/ svn_ra_serf__blncache_t *blncache; + + /* Flag that indicates if we request the server for bulk updates (TRUE) with + all the properties and content in the update-report response. If FALSE, + request a skelta update-report with inlined properties. */ + svn_boolean_t bulk_updates; }; #define SVN_RA_SERF__HAVE_HTTPV2_SUPPORT(sess) ((sess)->me_resource != NULL) Modified: subversion/branches/in-repo-authz/subversion/libsvn_ra_serf/serf.c URL: http://svn.apache.org/viewvc/subversion/branches/in-repo-authz/subversion/libsvn_ra_serf/serf.c?rev=1418054&r1=1418053&r2=1418054&view=diff ============================================================================== --- subversion/branches/in-repo-authz/subversion/libsvn_ra_serf/serf.c (original) +++ subversion/branches/in-repo-authz/subversion/libsvn_ra_serf/serf.c Thu Dec 6 20:23:54 2012 @@ -218,6 +218,13 @@ load_config(svn_ra_serf__session_t *sess svn_config_get(config, &session->ssl_authorities, SVN_CONFIG_SECTION_GLOBAL, SVN_CONFIG_OPTION_SSL_AUTHORITY_FILES, NULL); + /* If set, read the flag that tells us to do bulk updates or not. Defaults + to skelta updates. */ + SVN_ERR(svn_config_get_bool(config, &session->bulk_updates, + SVN_CONFIG_SECTION_GLOBAL, + SVN_CONFIG_OPTION_BULK_UPDATES, + FALSE)); + if (config) server_group = svn_config_find_group(config, session->session_url.hostname, @@ -254,6 +261,12 @@ load_config(svn_ra_serf__session_t *sess TRUE)); svn_config_get(config, &session->ssl_authorities, server_group, SVN_CONFIG_OPTION_SSL_AUTHORITY_FILES, NULL); + + /* Load the group bulk updates flag. */ + SVN_ERR(svn_config_get_bool(config, &session->bulk_updates, + server_group, + SVN_CONFIG_OPTION_BULK_UPDATES, + FALSE)); } /* Parse the connection timeout value, if any. */ Modified: subversion/branches/in-repo-authz/subversion/libsvn_ra_serf/update.c URL: http://svn.apache.org/viewvc/subversion/branches/in-repo-authz/subversion/libsvn_ra_serf/update.c?rev=1418054&r1=1418053&r2=1418054&view=diff ============================================================================== --- subversion/branches/in-repo-authz/subversion/libsvn_ra_serf/update.c (original) +++ subversion/branches/in-repo-authz/subversion/libsvn_ra_serf/update.c Thu Dec 6 20:23:54 2012 @@ -3161,19 +3161,23 @@ make_update_reporter(svn_ra_session_t *r svn_io_file_del_on_pool_cleanup, report->pool, scratch_pool)); -#ifdef SVN_RA_SERF__UPDATES_SEND_ALL - svn_xml_make_open_tag(&buf, scratch_pool, svn_xml_normal, "S:update-report", - "xmlns:S", SVN_XML_NAMESPACE, "send-all", "true", - NULL); -#else - svn_xml_make_open_tag(&buf, scratch_pool, svn_xml_normal, "S:update-report", - "xmlns:S", SVN_XML_NAMESPACE, - NULL); - /* Subversion 1.8+ servers can be told to send properties for newly - added items inline even when doing a skelta response. */ - make_simple_xml_tag(&buf, "S:include-props", "yes", scratch_pool); -#endif - + if (sess->bulk_updates) + { + svn_xml_make_open_tag(&buf, scratch_pool, svn_xml_normal, + "S:update-report", + "xmlns:S", SVN_XML_NAMESPACE, "send-all", "true", + NULL); + } + else + { + svn_xml_make_open_tag(&buf, scratch_pool, svn_xml_normal, + "S:update-report", + "xmlns:S", SVN_XML_NAMESPACE, + NULL); + /* Subversion 1.8+ servers can be told to send properties for newly + added items inline even when doing a skelta response. */ + make_simple_xml_tag(&buf, "S:include-props", "yes", scratch_pool); + } make_simple_xml_tag(&buf, "S:src-path", report->source, scratch_pool); @@ -3215,11 +3219,13 @@ make_update_reporter(svn_ra_session_t *r /* When in 'send-all' mode, mod_dav_svn will assume that it should calculate and transmit real text-deltas (instead of empty windows that merely indicate "text is changed") unless it finds this - element. When not in 'send-all' mode, mod_dav_svn will never - send text-deltas at all. + element. NOTE: Do NOT count on servers actually obeying this, as some exist - which obey send-all, but do not check for this directive at all! */ + which obey send-all, but do not check for this directive at all! + + NOTE 2: When not in 'send-all' mode, mod_dav_svn can still be configured to + override our request and send text-deltas. */ if (! text_deltas) { make_simple_xml_tag(&buf, "S:text-deltas", "no", scratch_pool); Modified: subversion/branches/in-repo-authz/subversion/libsvn_subr/config_file.c URL: http://svn.apache.org/viewvc/subversion/branches/in-repo-authz/subversion/libsvn_subr/config_file.c?rev=1418054&r1=1418053&r2=1418054&view=diff ============================================================================== --- subversion/branches/in-repo-authz/subversion/libsvn_subr/config_file.c (original) +++ subversion/branches/in-repo-authz/subversion/libsvn_subr/config_file.c Thu Dec 6 20:23:54 2012 @@ -814,6 +814,10 @@ svn_config_ensure(const char *config_dir "### http-library Which library to use for http/https" NL "### connections." NL + "### bulk_updates Whether to request bulk update" NL + "### responses, or fetch each file in " + NL + "### an individual request. " NL "### store-passwords Specifies whether passwords used" NL "### to authenticate against a" NL "### Subversion server may be cached" NL Modified: subversion/branches/in-repo-authz/subversion/libsvn_wc/adm_crawler.c URL: http://svn.apache.org/viewvc/subversion/branches/in-repo-authz/subversion/libsvn_wc/adm_crawler.c?rev=1418054&r1=1418053&r2=1418054&view=diff ============================================================================== --- subversion/branches/in-repo-authz/subversion/libsvn_wc/adm_crawler.c (original) +++ subversion/branches/in-repo-authz/subversion/libsvn_wc/adm_crawler.c Thu Dec 6 20:23:54 2012 @@ -659,7 +659,7 @@ svn_wc_crawl_revisions5(svn_wc_context_t &repos_relpath, &repos_root_url, NULL, NULL, NULL, NULL, &target_depth, NULL, NULL, &target_lock, - NULL, NULL, + NULL, NULL, NULL, db, local_abspath, scratch_pool, scratch_pool); @@ -807,7 +807,7 @@ svn_wc_crawl_revisions5(svn_wc_context_t err = svn_wc__db_base_get_info(&parent_status, NULL, NULL, &parent_repos_relpath, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, + NULL, NULL, NULL, db, parent_abspath, scratch_pool, scratch_pool); Modified: subversion/branches/in-repo-authz/subversion/libsvn_wc/adm_files.c URL: http://svn.apache.org/viewvc/subversion/branches/in-repo-authz/subversion/libsvn_wc/adm_files.c?rev=1418054&r1=1418053&r2=1418054&view=diff ============================================================================== --- subversion/branches/in-repo-authz/subversion/libsvn_wc/adm_files.c (original) +++ subversion/branches/in-repo-authz/subversion/libsvn_wc/adm_files.c Thu Dec 6 20:23:54 2012 @@ -175,7 +175,7 @@ svn_wc__text_base_path_to_read(const cha const svn_checksum_t *checksum; SVN_ERR(svn_wc__db_read_pristine_info(&status, &kind, NULL, NULL, NULL, NULL, - &checksum, NULL, NULL, + &checksum, NULL, NULL, NULL, db, local_abspath, scratch_pool, scratch_pool)); @@ -231,7 +231,7 @@ svn_wc__get_pristine_contents(svn_stream *size = SVN_INVALID_FILESIZE; SVN_ERR(svn_wc__db_read_pristine_info(&status, &kind, NULL, NULL, NULL, NULL, - &sha1_checksum, NULL, NULL, + &sha1_checksum, NULL, NULL, NULL, db, local_abspath, scratch_pool, scratch_pool)); Modified: subversion/branches/in-repo-authz/subversion/libsvn_wc/ambient_depth_filter_editor.c URL: http://svn.apache.org/viewvc/subversion/branches/in-repo-authz/subversion/libsvn_wc/ambient_depth_filter_editor.c?rev=1418054&r1=1418053&r2=1418054&view=diff ============================================================================== --- subversion/branches/in-repo-authz/subversion/libsvn_wc/ambient_depth_filter_editor.c (original) +++ subversion/branches/in-repo-authz/subversion/libsvn_wc/ambient_depth_filter_editor.c Thu Dec 6 20:23:54 2012 @@ -132,7 +132,7 @@ ambient_read_info(svn_wc__db_status_t *s err = svn_wc__db_base_get_info(status, kind, NULL, NULL, NULL, NULL, NULL, NULL, NULL, depth, NULL, NULL, - NULL, NULL, NULL, + NULL, NULL, NULL, NULL, db, local_abspath, scratch_pool, scratch_pool); Modified: subversion/branches/in-repo-authz/subversion/libsvn_wc/conflicts.c URL: http://svn.apache.org/viewvc/subversion/branches/in-repo-authz/subversion/libsvn_wc/conflicts.c?rev=1418054&r1=1418053&r2=1418054&view=diff ============================================================================== --- subversion/branches/in-repo-authz/subversion/libsvn_wc/conflicts.c (original) +++ subversion/branches/in-repo-authz/subversion/libsvn_wc/conflicts.c Thu Dec 6 20:23:54 2012 @@ -1804,7 +1804,7 @@ setup_tree_conflict_desc(svn_wc_conflict err = svn_wc__db_base_get_info(&status, &kind, &revision, &repos_relpath, &repos_root_url, &repos_uuid, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, db, local_abspath, scratch_pool, scratch_pool); Modified: subversion/branches/in-repo-authz/subversion/libsvn_wc/conflicts.h URL: http://svn.apache.org/viewvc/subversion/branches/in-repo-authz/subversion/libsvn_wc/conflicts.h?rev=1418054&r1=1418053&r2=1418054&view=diff ============================================================================== --- subversion/branches/in-repo-authz/subversion/libsvn_wc/conflicts.h (original) +++ subversion/branches/in-repo-authz/subversion/libsvn_wc/conflicts.h Thu Dec 6 20:23:54 2012 @@ -261,6 +261,8 @@ svn_wc__conflict_skel_resolve(svn_boolea * Output arguments can be NULL if the value is not necessary. * * ### stsp asks: what is LOCATIONS? + * ### Set *LOCATIONS to an array of (svn_wc_conflict_version_t *) + * representing ... * * TEXT_, PROP_ and TREE_CONFLICTED (when not NULL) will be set to TRUE * when the conflict contains the specified kind of conflict, otherwise Modified: subversion/branches/in-repo-authz/subversion/libsvn_wc/diff_editor.c URL: http://svn.apache.org/viewvc/subversion/branches/in-repo-authz/subversion/libsvn_wc/diff_editor.c?rev=1418054&r1=1418053&r2=1418054&view=diff ============================================================================== --- subversion/branches/in-repo-authz/subversion/libsvn_wc/diff_editor.c (original) +++ subversion/branches/in-repo-authz/subversion/libsvn_wc/diff_editor.c Thu Dec 6 20:23:54 2012 @@ -170,7 +170,7 @@ get_pristine_file(const char **result_ab if (!use_base) { SVN_ERR(svn_wc__db_read_pristine_info(NULL, NULL, NULL, NULL, NULL, NULL, - &checksum, NULL, NULL, + &checksum, NULL, NULL, NULL, db, local_abspath, scratch_pool, scratch_pool)); } @@ -178,7 +178,7 @@ get_pristine_file(const char **result_ab { SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &checksum, - NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, db, local_abspath, scratch_pool, scratch_pool)); } @@ -557,7 +557,7 @@ file_diff(struct edit_baton *eb, if (have_base) SVN_ERR(svn_wc__db_base_get_info(&base_status, NULL, &revert_base_revnum, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, db, local_abspath, scratch_pool, scratch_pool)); @@ -1468,7 +1468,7 @@ open_file(const char *path, SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &fb->base_checksum, NULL, - NULL, NULL, NULL, + NULL, NULL, NULL, NULL, eb->db, fb->local_abspath, fb->pool, fb->pool)); @@ -1647,7 +1647,7 @@ close_file(void *file_baton, NULL, NULL, NULL, NULL, &pristine_checksum, NULL, NULL, - &had_props, NULL, + &had_props, NULL, NULL, db, fb->local_abspath, scratch_pool, scratch_pool)); Modified: subversion/branches/in-repo-authz/subversion/libsvn_wc/diff_local.c URL: http://svn.apache.org/viewvc/subversion/branches/in-repo-authz/subversion/libsvn_wc/diff_local.c?rev=1418054&r1=1418053&r2=1418054&view=diff ============================================================================== --- subversion/branches/in-repo-authz/subversion/libsvn_wc/diff_local.c (original) +++ subversion/branches/in-repo-authz/subversion/libsvn_wc/diff_local.c Thu Dec 6 20:23:54 2012 @@ -172,7 +172,7 @@ file_diff(struct diff_baton *eb, &base_revision, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &base_checksum, NULL, - NULL, NULL, NULL, + NULL, NULL, NULL, NULL, db, local_abspath, scratch_pool, scratch_pool)); @@ -244,7 +244,8 @@ file_diff(struct diff_baton *eb, SVN_ERR(svn_wc__db_read_pristine_info(NULL, NULL, NULL, NULL, NULL, NULL, &del_checksum, NULL, - NULL, db, local_abspath, + NULL, NULL, + db, local_abspath, scratch_pool, scratch_pool)); } Modified: subversion/branches/in-repo-authz/subversion/libsvn_wc/entries.c URL: http://svn.apache.org/viewvc/subversion/branches/in-repo-authz/subversion/libsvn_wc/entries.c?rev=1418054&r1=1418053&r2=1418054&view=diff ============================================================================== --- subversion/branches/in-repo-authz/subversion/libsvn_wc/entries.c (original) +++ subversion/branches/in-repo-authz/subversion/libsvn_wc/entries.c Thu Dec 6 20:23:54 2012 @@ -231,7 +231,7 @@ get_info_for_deleted(svn_wc_entry_t *ent checksum, NULL, NULL /* lock */, - &entry->has_props, + &entry->has_props, NULL, NULL, db, entry_abspath, @@ -255,7 +255,7 @@ get_info_for_deleted(svn_wc_entry_t *ent &entry->depth, checksum, NULL, - &entry->has_props, + &entry->has_props, NULL, db, entry_abspath, result_pool, @@ -297,6 +297,7 @@ get_info_for_deleted(svn_wc_entry_t *ent SVN_ERR(svn_wc__db_base_get_info(&status, NULL, &entry->revision, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, db, entry_abspath, result_pool, scratch_pool)); @@ -565,7 +566,7 @@ read_one_entry(const svn_wc_entry_t **ne NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, + NULL, NULL, NULL, NULL, db, entry_abspath, scratch_pool, scratch_pool)); Modified: subversion/branches/in-repo-authz/subversion/libsvn_wc/externals.c URL: http://svn.apache.org/viewvc/subversion/branches/in-repo-authz/subversion/libsvn_wc/externals.c?rev=1418054&r1=1418053&r2=1418054&view=diff ============================================================================== --- subversion/branches/in-repo-authz/subversion/libsvn_wc/externals.c (original) +++ subversion/branches/in-repo-authz/subversion/libsvn_wc/externals.c Thu Dec 6 20:23:54 2012 @@ -515,7 +515,7 @@ open_file(const char *path, NULL, NULL, NULL, &eb->changed_rev, &eb->changed_date, &eb->changed_author, NULL, &eb->original_checksum, NULL, NULL, - &eb->had_props, NULL, + &eb->had_props, NULL, NULL, eb->db, eb->local_abspath, eb->pool, file_pool)); @@ -738,14 +738,10 @@ close_file(void *file_baton, &new_pristine_props, &new_actual_props, eb->db, eb->local_abspath, - svn_kind_file, NULL /* server_baseprops*/, base_props, actual_props, regular_prop_changes, - TRUE /* base_merge */, - FALSE /* dry_run */, - eb->cancel_func, eb->cancel_baton, pool, pool)); } else @@ -1071,7 +1067,7 @@ svn_wc__crawl_file_external(svn_wc_conte err = svn_wc__db_base_get_info(NULL, &kind, &revision, &repos_relpath, &repos_root_url, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &lock, - NULL, &update_root, + NULL, NULL, &update_root, db, local_abspath, scratch_pool, scratch_pool); @@ -1238,7 +1234,7 @@ is_external_rolled_out(svn_boolean_t *is err = svn_wc__db_base_get_info(NULL, NULL, NULL, &repos_relpath, &repos_root_url, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, wc_ctx->db, xinfo->local_abspath, scratch_pool, scratch_pool); Modified: subversion/branches/in-repo-authz/subversion/libsvn_wc/info.c URL: http://svn.apache.org/viewvc/subversion/branches/in-repo-authz/subversion/libsvn_wc/info.c?rev=1418054&r1=1418053&r2=1418054&view=diff ============================================================================== --- subversion/branches/in-repo-authz/subversion/libsvn_wc/info.c (original) +++ subversion/branches/in-repo-authz/subversion/libsvn_wc/info.c Thu Dec 6 20:23:54 2012 @@ -172,7 +172,7 @@ build_info_for_node(svn_wc__info2_t **in SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, &tmpinfo->rev, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, + NULL, NULL, db, local_abspath, scratch_pool, scratch_pool)); } @@ -226,7 +226,7 @@ build_info_for_node(svn_wc__info2_t **in &tmpinfo->last_changed_author, &wc_info->depth, &wc_info->checksum, - NULL, NULL, + NULL, NULL, NULL, db, local_abspath, result_pool, scratch_pool)); @@ -265,7 +265,7 @@ build_info_for_node(svn_wc__info2_t **in &tmpinfo->repos_root_URL, &tmpinfo->repos_UUID, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, + NULL, NULL, NULL, NULL, db, local_abspath, result_pool, scratch_pool)); Modified: subversion/branches/in-repo-authz/subversion/libsvn_wc/merge.c URL: http://svn.apache.org/viewvc/subversion/branches/in-repo-authz/subversion/libsvn_wc/merge.c?rev=1418054&r1=1418053&r2=1418054&view=diff ============================================================================== --- subversion/branches/in-repo-authz/subversion/libsvn_wc/merge.c (original) +++ subversion/branches/in-repo-authz/subversion/libsvn_wc/merge.c Thu Dec 6 20:23:54 2012 @@ -1145,7 +1145,7 @@ svn_wc_merge5(enum svn_wc_merge_outcome_ svn_skel_t *work_items; svn_skel_t *conflict_skel = NULL; apr_hash_t *pristine_props = NULL; - apr_hash_t *actual_props = NULL; + apr_hash_t *actual_props; apr_hash_t *new_actual_props = NULL; SVN_ERR_ASSERT(svn_dirent_is_absolute(left_abspath)); @@ -1222,7 +1222,7 @@ svn_wc_merge5(enum svn_wc_merge_outcome_ scratch_pool, scratch_pool)); } else if (pristine_props) - actual_props = apr_hash_copy(scratch_pool, pristine_props); + actual_props = pristine_props; else actual_props = apr_hash_make(scratch_pool); } @@ -1230,7 +1230,7 @@ svn_wc_merge5(enum svn_wc_merge_outcome_ if (merge_props_outcome) { int i; - apr_hash_t *new_pristine_props; + /* The PROPCHANGES may not have non-"normal" properties in it. If entry or wc props were allowed, then the following code would install them into the BASE and/or WORKING properties(!). */ @@ -1249,12 +1249,10 @@ svn_wc_merge5(enum svn_wc_merge_outcome_ SVN_ERR(svn_wc__merge_props(&conflict_skel, merge_props_outcome, - &new_pristine_props, &new_actual_props, - wc_ctx->db, target_abspath, svn_kind_file, + NULL, &new_actual_props, + wc_ctx->db, target_abspath, original_props, pristine_props, actual_props, - prop_diff, FALSE /* base_merge */, - dry_run, - cancel_func, cancel_baton, + prop_diff, scratch_pool, scratch_pool)); } Modified: subversion/branches/in-repo-authz/subversion/libsvn_wc/node.c URL: http://svn.apache.org/viewvc/subversion/branches/in-repo-authz/subversion/libsvn_wc/node.c?rev=1418054&r1=1418053&r2=1418054&view=diff ============================================================================== --- subversion/branches/in-repo-authz/subversion/libsvn_wc/node.c (original) +++ subversion/branches/in-repo-authz/subversion/libsvn_wc/node.c Thu Dec 6 20:23:54 2012 @@ -723,7 +723,7 @@ svn_wc__node_get_base(svn_revnum_t *revi err = svn_wc__db_base_get_info(NULL, NULL, revision, repos_relpath, repos_root_url, repos_uuid, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, + NULL, NULL, NULL, wc_ctx->db, local_abspath, result_pool, scratch_pool); if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND) @@ -782,7 +782,7 @@ svn_wc__node_get_pre_ng_status_data(svn_ SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, revision, NULL, NULL, NULL, changed_rev, changed_date, changed_author, NULL, NULL, NULL, - NULL, NULL, NULL, + NULL, NULL, NULL, NULL, wc_ctx->db, local_abspath, result_pool, scratch_pool)); else @@ -811,7 +811,7 @@ svn_wc__node_get_lock_info(const char ** err = svn_wc__db_base_get_info(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &lock, NULL, - NULL, + NULL, NULL, wc_ctx->db, local_abspath, result_pool, scratch_pool); @@ -1117,7 +1117,7 @@ svn_wc__internal_get_origin(svn_boolean_ SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, revision, repos_relpath, repos_root_url, repos_uuid, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, + NULL, NULL, NULL, db, local_abspath, result_pool, scratch_pool)); } @@ -1203,7 +1203,7 @@ svn_wc__node_get_commit_status(svn_boole { SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, revision, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, + NULL, NULL, NULL, NULL, wc_ctx->db, local_abspath, scratch_pool, scratch_pool)); } Modified: subversion/branches/in-repo-authz/subversion/libsvn_wc/props.c URL: http://svn.apache.org/viewvc/subversion/branches/in-repo-authz/subversion/libsvn_wc/props.c?rev=1418054&r1=1418053&r2=1418054&view=diff ============================================================================== --- subversion/branches/in-repo-authz/subversion/libsvn_wc/props.c (original) +++ subversion/branches/in-repo-authz/subversion/libsvn_wc/props.c Thu Dec 6 20:23:54 2012 @@ -200,7 +200,7 @@ svn_wc__perform_props_merge(svn_wc_notif svn_wc__db_status_t status; svn_kind_t kind; apr_hash_t *pristine_props = NULL; - apr_hash_t *actual_props = NULL; + apr_hash_t *actual_props; apr_hash_t *new_pristine_props; apr_hash_t *new_actual_props; svn_boolean_t had_props, props_mod; @@ -289,18 +289,18 @@ svn_wc__perform_props_merge(svn_wc_notif SVN_ERR(svn_wc__get_actual_props(&actual_props, db, local_abspath, scratch_pool, scratch_pool)); else - actual_props = apr_hash_copy(scratch_pool, pristine_props); + actual_props = pristine_props; /* Note that while this routine does the "real" work, it's only prepping tempfiles and writing log commands. */ SVN_ERR(svn_wc__merge_props(&conflict_skel, state, - &new_pristine_props, &new_actual_props, - db, local_abspath, kind, + base_merge ? &new_pristine_props : NULL, + &new_actual_props, + db, local_abspath, baseprops /* server_baseprops */, pristine_props, actual_props, - propchanges, base_merge, dry_run, - cancel_func, cancel_baton, + propchanges, scratch_pool, scratch_pool)); if (dry_run) @@ -342,11 +342,11 @@ svn_wc__perform_props_merge(svn_wc_notif /* See props.h */ #ifdef SVN__SUPPORT_BASE_MERGE if (status == svn_wc__db_status_added) - SVN_ERR(svn_wc__db_temp_working_set_props(db, local_abspath, - new_base_props, scratch_pool)); + SVN_ERR(svn_wc__db_temp_working_set_props( + db, local_abspath, new_pristine_props, scratch_pool)); else - SVN_ERR(svn_wc__db_temp_base_set_props(db, local_abspath, - new_base_props, scratch_pool)); + SVN_ERR(svn_wc__db_temp_base_set_props( + db, local_abspath, new_pristine_props, scratch_pool)); #else if (base_merge) return svn_error_create(SVN_ERR_UNSUPPORTED_FEATURE, NULL, @@ -785,7 +785,8 @@ set_prop_merge_state(svn_wc_notify_state } /* Add the property with name PROPNAME to the set of ACTUAL_PROPS on - * PATH, setting *STATE or *CONFLICT_REMAINS according to merge outcomes. + * DB/LOCAL_ABSPATH, setting *STATE or *CONFLICT_REMAINS according to + * the merge outcome. * * *STATE is an input and output parameter, its value is to be * set using set_merge_prop_state(). @@ -868,9 +869,9 @@ apply_single_prop_add(svn_wc_notify_stat } -/* Delete the property with name PROPNAME from the set of - * ACTUAL_PROPS on PATH, setting *STATE or *CONFLICT_REMAINS according to - * merge outcomes. +/* Delete the property with name PROPNAME from the set of ACTUAL_PROPS on + * DB/LOCAL_ABSPATH, setting *STATE or *CONFLICT_REMAINS according to + * the merge outcome. * * *STATE is an input and output parameter, its value is to be * set using set_merge_prop_state(). @@ -1087,8 +1088,9 @@ apply_single_generic_prop_change(svn_wc_ return SVN_NO_ERROR; } -/* Change the property with name PROPNAME in the set of ACTUAL_PROPS - * on PATH, setting *STATE or *CONFLICT_REMAINS according to the merge outcome. +/* Change the property with name PROPNAME in the set of ACTUAL_PROPS on + * DB/LOCAL_ABSPATH, setting *STATE or *CONFLICT_REMAINS according to + * the merge outcome. * * *STATE is an input and output parameter, its value is to be * set using set_prop_merge_state(). (May be null.). @@ -1179,36 +1181,27 @@ svn_wc__merge_props(svn_skel_t **conflic apr_hash_t **new_actual_props, svn_wc__db_t *db, const char *local_abspath, - svn_kind_t kind, apr_hash_t *server_baseprops, apr_hash_t *pristine_props, apr_hash_t *actual_props, const apr_array_header_t *propchanges, - svn_boolean_t base_merge, - svn_boolean_t dry_run, - svn_cancel_func_t cancel_func, - void *cancel_baton, apr_pool_t *result_pool, apr_pool_t *scratch_pool) { apr_pool_t *iterpool; int i; apr_hash_t *conflict_props = NULL; - apr_hash_t *old_actual_props; apr_hash_t *their_props; SVN_ERR_ASSERT(pristine_props != NULL); SVN_ERR_ASSERT(actual_props != NULL); - /* Just copy the pointers as we copy the data in the skel if - necessary */ - old_actual_props = apr_hash_copy(scratch_pool, actual_props); - - *new_pristine_props = NULL; - *new_actual_props = NULL; + if (new_pristine_props) + *new_pristine_props = apr_hash_copy(result_pool, pristine_props); + *new_actual_props = apr_hash_copy(result_pool, actual_props); if (!server_baseprops) - server_baseprops = apr_hash_copy(scratch_pool, pristine_props); + server_baseprops = pristine_props; their_props = apr_hash_copy(scratch_pool, server_baseprops); @@ -1234,10 +1227,6 @@ svn_wc__merge_props(svn_skel_t **conflic svn_pool_clear(iterpool); - /* Should we stop the prop merging process? */ - if (cancel_func) - SVN_ERR(cancel_func(cancel_baton)); - /* For the incoming propchange, figure out the TO and FROM values. */ incoming_change = &APR_ARRAY_IDX(propchanges, i, svn_prop_t); propname = incoming_change->name; @@ -1247,8 +1236,9 @@ svn_wc__merge_props(svn_skel_t **conflic base_val = apr_hash_get(pristine_props, propname, APR_HASH_KEY_STRING); - if (base_merge) - apr_hash_set(pristine_props, propname, APR_HASH_KEY_STRING, to_val); + if (new_pristine_props) + apr_hash_set(*new_pristine_props, propname, APR_HASH_KEY_STRING, + to_val); apr_hash_set(their_props, propname, APR_HASH_KEY_STRING, to_val); @@ -1260,21 +1250,21 @@ svn_wc__merge_props(svn_skel_t **conflic if (! from_val) /* adding a new property */ SVN_ERR(apply_single_prop_add(state, &conflict_remains, db, local_abspath, - actual_props, + *new_actual_props, propname, base_val, to_val, result_pool, iterpool)); else if (! to_val) /* delete an existing property */ SVN_ERR(apply_single_prop_delete(state, &conflict_remains, db, local_abspath, - actual_props, + *new_actual_props, propname, base_val, from_val, result_pool, iterpool)); else /* changing an existing property */ SVN_ERR(apply_single_prop_change(state, &conflict_remains, db, local_abspath, - actual_props, + *new_actual_props, propname, base_val, from_val, to_val, result_pool, iterpool)); @@ -1286,14 +1276,10 @@ svn_wc__merge_props(svn_skel_t **conflic { set_prop_merge_state(state, svn_wc_notify_state_conflicted); - if (dry_run) - continue; /* skip to next incoming change */ - if (!conflict_props) - conflict_props = apr_hash_make(result_pool); + conflict_props = apr_hash_make(scratch_pool); - apr_hash_set(conflict_props, apr_pstrdup(result_pool, propname), - APR_HASH_KEY_STRING, ""); + apr_hash_set(conflict_props, propname, APR_HASH_KEY_STRING, ""); } } /* foreach propchange ... */ @@ -1301,12 +1287,6 @@ svn_wc__merge_props(svn_skel_t **conflic /* Finished applying all incoming propchanges to our hashes! */ - if (dry_run) - return SVN_NO_ERROR; - - *new_pristine_props = pristine_props; - *new_actual_props = actual_props; - if (conflict_props != NULL) { /* Ok, we got some conflict. Lets store all the property knowledge we @@ -1318,7 +1298,7 @@ svn_wc__merge_props(svn_skel_t **conflic SVN_ERR(svn_wc__conflict_skel_add_prop_conflict(*conflict_skel, db, local_abspath, NULL /* reject_path */, - old_actual_props, + actual_props, server_baseprops, their_props, conflict_props, @@ -1685,7 +1665,7 @@ get_file_for_validation(const svn_string { svn_stream_t *read_stream; - /* Open PATH. */ + /* Open GB->LOCAL_ABSPATH. */ SVN_ERR(svn_stream_open_readonly(&read_stream, gb->local_abspath, pool, pool)); Modified: subversion/branches/in-repo-authz/subversion/libsvn_wc/props.h URL: http://svn.apache.org/viewvc/subversion/branches/in-repo-authz/subversion/libsvn_wc/props.h?rev=1418054&r1=1418053&r2=1418054&view=diff ============================================================================== --- subversion/branches/in-repo-authz/subversion/libsvn_wc/props.h (original) +++ subversion/branches/in-repo-authz/subversion/libsvn_wc/props.h Thu Dec 6 20:23:54 2012 @@ -73,25 +73,20 @@ svn_wc__internal_propget(const svn_strin SERVER_BASEPROPS, calculate what changes should be applied to the working copy. - Return working queue operations in WORK_ITEMS and a new set of actual - (NEW_ACTUAL_PROPS) and pristine properties (NEW_PRISTINE_PROPS). - We return the new property collections to the caller, so the caller can combine the property update with other operations. If SERVER_BASEPROPS is NULL then use the pristine props as PROPCHANGES base. - If BASE_MERGE is FALSE then only change working properties; if TRUE, - change both the pristine and working properties. (Only the update editor - should use BASE_MERGE is TRUE) - - If conflicts are found when merging, create a temporary .prej file, - and provide working queue operations to write the conflict information - into the .prej file later. Modify base properties unconditionally, - if BASE_MERGE is TRUE, they do not generate conficts. - - TODO ### DRY_RUN ... + Return the new set of actual properties in *NEW_ACTUAL_PROPS. If + NEW_PRISTINE_PROPS is non-null, then also apply PROPCHANGES to + PRISTINE_PROPS and return the new set of pristine properties in + *NEW_PRISTINE_PROPS. + + Return any conflicts of the actual props in *CONFLICT_SKEL. (Changes + made to the pristine properties, if BASE_MERGE is TRUE, do not + generate conficts.) If STATE is non-null, set *STATE to the state of the local properties after the merge. */ @@ -102,15 +97,10 @@ svn_wc__merge_props(svn_skel_t **conflic apr_hash_t **new_actual_props, svn_wc__db_t *db, const char *local_abspath, - svn_kind_t kind, - apr_hash_t *server_baseprops, - apr_hash_t *pristine_props, - apr_hash_t *actual_props, + /*const*/ apr_hash_t *server_baseprops, + /*const*/ apr_hash_t *pristine_props, + /*const*/ apr_hash_t *actual_props, const apr_array_header_t *propchanges, - svn_boolean_t base_merge, - svn_boolean_t dry_run, - svn_cancel_func_t cancel_func, - void *cancel_baton, apr_pool_t *result_pool, apr_pool_t *scratch_pool); @@ -144,7 +134,13 @@ svn_wc__create_prejfile(const char **tmp apr_pool_t *scratch_pool); -/* Just like svn_wc_merge_props3(), but WITH a BASE_MERGE parameter. */ +/* Just like svn_wc_merge_props3(), but WITH a BASE_MERGE parameter. + + If SVN__SUPPORT_BASE_MERGE is defined and BASE_MERGE is true, then + also use PROPCHANGES to modify the node's pristine properties. (That + cannot generate conficts.) If SVN__SUPPORT_BASE_MERGE is not defined + and BASE_MERGE is true, throw an error. + */ svn_error_t * svn_wc__perform_props_merge(svn_wc_notify_state_t *state, svn_wc__db_t *db, Modified: subversion/branches/in-repo-authz/subversion/libsvn_wc/status.c URL: http://svn.apache.org/viewvc/subversion/branches/in-repo-authz/subversion/libsvn_wc/status.c?rev=1418054&r1=1418053&r2=1418054&view=diff ============================================================================== --- subversion/branches/in-repo-authz/subversion/libsvn_wc/status.c (original) +++ subversion/branches/in-repo-authz/subversion/libsvn_wc/status.c Thu Dec 6 20:23:54 2012 @@ -286,7 +286,7 @@ read_info(const struct svn_wc__db_info_t SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - lock_arg, NULL, &update_root, + lock_arg, NULL, NULL, &update_root, db, local_abspath, result_pool, scratch_pool)); Modified: subversion/branches/in-repo-authz/subversion/libsvn_wc/update_editor.c URL: http://svn.apache.org/viewvc/subversion/branches/in-repo-authz/subversion/libsvn_wc/update_editor.c?rev=1418054&r1=1418053&r2=1418054&view=diff ============================================================================== --- subversion/branches/in-repo-authz/subversion/libsvn_wc/update_editor.c (original) +++ subversion/branches/in-repo-authz/subversion/libsvn_wc/update_editor.c Thu Dec 6 20:23:54 2012 @@ -496,19 +496,6 @@ cleanup_edit_baton(void *edit_baton) return APR_SUCCESS; } -/* An APR pool cleanup handler. This is a child handler, it removes - the mail pool handler. - mail pool? - that's where the missing commit mails are going! */ -static apr_status_t -cleanup_edit_baton_child(void *edit_baton) -{ - struct edit_baton *eb = edit_baton; - apr_pool_cleanup_kill(eb->pool, eb, cleanup_edit_baton); - return APR_SUCCESS; -} - - /* Make a new dir baton in a subpool of PB->pool. PB is the parent baton. If PATH and PB are NULL, this is the root directory of the edit; in this case, make the new dir baton in a subpool of EB->pool. @@ -1200,7 +1187,7 @@ open_root(void *edit_baton, &db->old_repos_relpath, NULL, NULL, &db->changed_rev, &db->changed_date, &db->changed_author, &db->ambient_depth, - NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, eb->db, db->local_abspath, db->pool, pool)); db->was_incomplete = (status == svn_wc__db_status_incomplete); @@ -1660,7 +1647,7 @@ delete_entry(const char *path, SVN_ERR(svn_wc__db_base_get_info(&base_status, &base_kind, &old_revision, &repos_relpath, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, eb->db, local_abspath, scratch_pool, scratch_pool)); @@ -2236,7 +2223,7 @@ open_directory(const char *path, &db->old_repos_relpath, NULL, NULL, &db->changed_rev, &db->changed_date, &db->changed_author, &db->ambient_depth, - NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, eb->db, db->local_abspath, db->pool, pool)); @@ -2502,15 +2489,10 @@ close_directory(void *dir_baton, &new_actual_props, eb->db, db->local_abspath, - svn_kind_dir, NULL /* use baseprops */, base_props, actual_props, regular_prop_changes, - TRUE /* base_merge */, - FALSE /* dry_run */, - eb->cancel_func, - eb->cancel_baton, db->pool, scratch_pool), _("Couldn't do property merge")); @@ -2563,7 +2545,7 @@ close_directory(void *dir_baton, /* ### We just check if there is some node in BASE at this path */ err = svn_wc__db_base_get_info(&status, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, eb->db, child_abspath, iterpool, iterpool); @@ -3298,7 +3280,7 @@ open_file(const char *path, &fb->changed_rev, &fb->changed_date, &fb->changed_author, NULL, &fb->original_checksum, NULL, NULL, - NULL, NULL, + NULL, NULL, NULL, eb->db, fb->local_abspath, fb->pool, scratch_pool)); @@ -4117,14 +4099,10 @@ close_file(void *file_baton, &new_actual_props, eb->db, fb->local_abspath, - svn_kind_file, NULL /* server_baseprops (update, not merge) */, current_base_props, current_actual_props, regular_prop_changes, /* propchanges */ - TRUE /* base_merge */, - FALSE /* dry_run */, - eb->cancel_func, eb->cancel_baton, scratch_pool, scratch_pool)); /* We will ALWAYS have properties to save (after a not-dry-run merge). */ @@ -4252,14 +4230,10 @@ close_file(void *file_baton, &new_actual_props, eb->db, fb->local_abspath, - svn_kind_file, NULL /* server_baseprops (not merging) */, current_base_props /* pristine_props */, fake_actual_props /* actual_props */, regular_prop_changes, /* propchanges */ - TRUE /* base_merge */, - FALSE /* dry_run */, - eb->cancel_func, eb->cancel_baton, scratch_pool, scratch_pool)); @@ -4476,7 +4450,7 @@ close_edit(void *edit_baton, have to worry about removing it. */ err = svn_wc__db_base_get_info(&status, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, + NULL, NULL, NULL, NULL, eb->db, eb->target_abspath, scratch_pool, scratch_pool); if (err) @@ -4633,7 +4607,7 @@ make_editor(svn_revnum_t *target_revisio eb->ext_patterns = preserved_exts; apr_pool_cleanup_register(edit_pool, eb, cleanup_edit_baton, - cleanup_edit_baton_child); + apr_pool_cleanup_null); /* Construct an editor. */ tree_editor->set_target_revision = set_target_revision; @@ -4674,7 +4648,7 @@ make_editor(svn_revnum_t *target_revisio err = svn_wc__db_base_get_info(&dir_status, &dir_kind, NULL, &dir_repos_relpath, NULL, NULL, NULL, NULL, NULL, &dir_depth, NULL, NULL, NULL, - NULL, NULL, + NULL, NULL, NULL, db, eb->target_abspath, scratch_pool, scratch_pool); @@ -4730,7 +4704,7 @@ make_editor(svn_revnum_t *target_revisio NULL, &dir_repos_relpath, NULL, NULL, NULL, NULL, NULL, &dir_depth, NULL, - NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, db, child_abspath, iterpool, iterpool)); Modified: subversion/branches/in-repo-authz/subversion/libsvn_wc/util.c URL: http://svn.apache.org/viewvc/subversion/branches/in-repo-authz/subversion/libsvn_wc/util.c?rev=1418054&r1=1418053&r2=1418054&view=diff ============================================================================== --- subversion/branches/in-repo-authz/subversion/libsvn_wc/util.c (original) +++ subversion/branches/in-repo-authz/subversion/libsvn_wc/util.c Thu Dec 6 20:23:54 2012 @@ -610,8 +610,9 @@ svn_wc__fetch_base_func(const char **fil err = svn_wc__db_base_get_info(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &checksum, - NULL, NULL, NULL, NULL, sfb->db, - local_abspath, scratch_pool, scratch_pool); + NULL, NULL, NULL, NULL, NULL, + sfb->db, local_abspath, + scratch_pool, scratch_pool); if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND) { svn_error_clear(err);