Index: subversion/libsvn_ra_neon/commit.c =================================================================== --- subversion/libsvn_ra_neon/commit.c (revision 900682) +++ subversion/libsvn_ra_neon/commit.c (working copy) @@ -48,6 +48,7 @@ #include "ra_neon.h" +#define APPLY_TO_VERSION "" /* ** version_rsrc_t: identify the relevant pieces of a resource on the server ** @@ -399,6 +400,7 @@ const char *vsn_url, svn_boolean_t allow_404, const char *token, + svn_boolean_t is_vcc, int *code, const char **locn, apr_pool_t *pool) @@ -423,7 +425,9 @@ "" "" "%s" - "", cc->activity_url); + "%s", + cc->activity_url, + is_vcc ? APPLY_TO_VERSION: ""); if (token) { @@ -459,6 +463,7 @@ version_rsrc_t *rsrc, svn_boolean_t allow_404, const char *token, + svn_boolean_t is_vcc, apr_pool_t *pool) { int code; @@ -473,7 +478,8 @@ } /* check out the Version Resource */ - err = do_checkout(cc, rsrc->vsn_url, allow_404, token, &code, &locn, pool); + err = do_checkout(cc, rsrc->vsn_url, allow_404, token, + is_vcc, &code, &locn, pool); /* possibly run the request again, with a re-fetched Version Resource */ if (err == NULL && allow_404 && code == 404) @@ -484,7 +490,8 @@ SVN_ERR(get_version_url(cc, NULL, rsrc, TRUE, pool)); /* do it again, but don't allow a 404 this time */ - err = do_checkout(cc, rsrc->vsn_url, FALSE, token, &code, &locn, pool); + err = do_checkout(cc, rsrc->vsn_url, FALSE, token, + is_vcc, &code, &locn, pool); } /* special-case when conflicts occur */ @@ -711,7 +718,8 @@ } /* get the URL to the working collection */ - SVN_ERR(checkout_resource(parent->cc, parent->rsrc, TRUE, NULL, pool)); + SVN_ERR(checkout_resource(parent->cc, parent->rsrc, TRUE, + NULL, FALSE, pool)); /* create the URL for the child resource */ child = svn_path_url_add_component(parent->rsrc->wr_url, name, pool); @@ -847,7 +855,8 @@ /* check out the parent resource so that we can create the new collection as one of its children. */ - SVN_ERR(checkout_resource(parent->cc, parent->rsrc, TRUE, NULL, dir_pool)); + SVN_ERR(checkout_resource(parent->cc, parent->rsrc, TRUE, + NULL, FALSE, dir_pool)); /* create a child object that contains all the resource urls */ child = apr_pcalloc(dir_pool, sizeof(*child)); @@ -959,7 +968,7 @@ record_prop_change(dir->pool, dir, name, value); /* do the CHECKOUT sooner rather than later */ - SVN_ERR(checkout_resource(dir->cc, dir->rsrc, TRUE, NULL, pool)); + SVN_ERR(checkout_resource(dir->cc, dir->rsrc, TRUE, NULL, FALSE, pool)); /* Add this path to the valid targets hash. */ add_valid_target(dir->cc, dir->rsrc->local_path, svn_nonrecursive); @@ -1000,7 +1009,8 @@ */ /* Do the parent CHECKOUT first */ - SVN_ERR(checkout_resource(parent->cc, parent->rsrc, TRUE, NULL, workpool)); + SVN_ERR(checkout_resource(parent->cc, parent->rsrc, TRUE, + NULL, FALSE, workpool)); /* Construct a file_baton that contains all the resource urls. */ file = apr_pcalloc(file_pool, sizeof(*file)); @@ -1139,7 +1149,7 @@ /* do the CHECKOUT now. we'll PUT the new file contents later on. */ SVN_ERR(checkout_resource(parent->cc, file->rsrc, TRUE, - file->token, workpool)); + file->token, FALSE, workpool)); /* ### wait for apply_txdelta before doing a PUT. it might arrive a ### "long time" from now. certainly after many other operations, so @@ -1229,7 +1239,8 @@ record_prop_change(file->pool, file, name, value); /* do the CHECKOUT sooner rather than later */ - SVN_ERR(checkout_resource(file->cc, file->rsrc, TRUE, file->token, pool)); + SVN_ERR(checkout_resource(file->cc, file->rsrc, TRUE, + file->token, FALSE, pool)); /* Add this path to the valid targets hash. */ add_valid_target(file->cc, file->rsrc->local_path, svn_nonrecursive); @@ -1365,8 +1376,7 @@ apr_pool_t *pool) { const char *vcc; - const svn_string_t *baseline_url; - version_rsrc_t baseline_rsrc = { SVN_INVALID_REVNUM }; + version_rsrc_t vcc_rsrc = { SVN_INVALID_REVNUM }; svn_error_t *err = NULL; int retry_count = 5; @@ -1376,24 +1386,17 @@ /* fetch the DAV:version-controlled-configuration from the session's URL */ SVN_ERR(svn_ra_neon__get_vcc(&vcc, cc->ras, cc->ras->root.path, pool)); - /* ### we should use DAV:apply-to-version on the CHECKOUT so we can skip - ### retrieval of the baseline */ do { svn_error_clear(err); - /* Get the latest baseline from VCC's DAV:checked-in property. - This should give us the HEAD revision of the moment. */ - SVN_ERR(svn_ra_neon__get_one_prop(&baseline_url, cc->ras, - vcc, NULL, - &svn_ra_neon__checked_in_prop, pool)); - baseline_rsrc.pool = pool; - baseline_rsrc.vsn_url = baseline_url->data; + vcc_rsrc.pool = pool; + vcc_rsrc.vsn_url = vcc; /* To set the revision properties, we must checkout the latest baseline and get back a mutable "working" baseline. */ - err = checkout_resource(cc, &baseline_rsrc, FALSE, NULL, pool); + err = checkout_resource(cc, &vcc_rsrc, FALSE, NULL, TRUE, pool); /* There's a small chance of a race condition here, if apache is experiencing heavy commit concurrency or if the network has @@ -1413,7 +1416,7 @@ if (err) return err; - return svn_ra_neon__do_proppatch(cc->ras, baseline_rsrc.wr_url, revprop_table, + return svn_ra_neon__do_proppatch(cc->ras, vcc_rsrc.wr_url, revprop_table, NULL, NULL, pool); }