Modified: subversion/branches/fsx-1.10/subversion/mod_dav_svn/repos.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/mod_dav_svn/repos.c?rev=1687422&r1=1687421&r2=1687422&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/mod_dav_svn/repos.c (original)
+++ subversion/branches/fsx-1.10/subversion/mod_dav_svn/repos.c Thu Jun 25 
08:00:57 2015
@@ -929,14 +929,14 @@ prep_working(dav_resource_combined *comb
   if (txn_name == NULL)
     {
       if (!comb->priv.root.activity_id)
-        return dav_svn__new_error(comb->res.pool, HTTP_BAD_REQUEST, 0,
+        return dav_svn__new_error(comb->res.pool, HTTP_BAD_REQUEST, 0, 0,
                                   "The request did not specify an activity 
ID");
 
       txn_name = dav_svn__get_txn(comb->priv.repos,
                                   comb->priv.root.activity_id);
       if (txn_name == NULL)
         {
-          return dav_svn__new_error(pool, HTTP_BAD_REQUEST, 0,
+          return dav_svn__new_error(pool, HTTP_BAD_REQUEST, 0, 0,
                                     "An unknown activity was specified in the "
                                     "URL. This is generally caused by a "
                                     "problem in the client software.");
@@ -952,7 +952,7 @@ prep_working(dav_resource_combined *comb
       if (serr->apr_err == SVN_ERR_FS_NO_SUCH_TRANSACTION)
         {
           svn_error_clear(serr);
-          return dav_svn__new_error(pool, HTTP_INTERNAL_SERVER_ERROR, 0,
+          return dav_svn__new_error(pool, HTTP_INTERNAL_SERVER_ERROR, 0, 0,
                                     "An activity was specified and found, but "
                                     "the corresponding SVN FS transaction was "
                                     "not found.");
@@ -1012,7 +1012,7 @@ prep_working(dav_resource_combined *comb
         }
       else if (!svn_string_compare(current_author, &request_author))
         {
-          return dav_svn__new_error(pool, HTTP_NOT_IMPLEMENTED, 0,
+          return dav_svn__new_error(pool, HTTP_NOT_IMPLEMENTED, 0, 0,
                                     "Multi-author commits not supported.");
         }
     }
@@ -1067,7 +1067,7 @@ prep_activity(dav_resource_combined *com
   const char *txn_name;
 
   if (!comb->priv.root.activity_id)
-    return dav_svn__new_error(comb->res.pool, HTTP_BAD_REQUEST, 0,
+    return dav_svn__new_error(comb->res.pool, HTTP_BAD_REQUEST, 0, 0,
                               "The request did not specify an activity ID");
 
   txn_name = dav_svn__get_txn(comb->priv.repos, comb->priv.root.activity_id);
@@ -1094,7 +1094,7 @@ prep_private(dav_resource_combined *comb
       /* Open the named transaction. */
 
       if (comb->priv.root.txn_name == NULL)
-        return dav_svn__new_error(pool, HTTP_BAD_REQUEST, 0,
+        return dav_svn__new_error(pool, HTTP_BAD_REQUEST, 0, 0,
                                   "An unknown txn name was specified in the "
                                   "URL.");
 
@@ -1107,7 +1107,7 @@ prep_private(dav_resource_combined *comb
             {
               svn_error_clear(serr);
               comb->res.exists = FALSE;
-              return dav_svn__new_error(pool, HTTP_NOT_FOUND, 0,
+              return dav_svn__new_error(pool, HTTP_NOT_FOUND, 0, 0,
                                         "Named transaction doesn't exist.");
             }
           return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
@@ -1158,7 +1158,7 @@ prep_resource(dav_resource_combined *com
         return (*scan->prep)(comb);
     }
 
-  return dav_svn__new_error(comb->res.pool, HTTP_INTERNAL_SERVER_ERROR, 0,
+  return dav_svn__new_error(comb->res.pool, HTTP_INTERNAL_SERVER_ERROR, 0, 0,
                             "DESIGN FAILURE: unknown resource type");
 }
 
@@ -1256,7 +1256,7 @@ dav_svn_split_uri2(request_rec *r,
     {
       /* ### are SVN_ERR_APMOD codes within the right numeric space? */
       return dav_svn__new_error(pool, HTTP_INTERNAL_SERVER_ERROR,
-                                SVN_ERR_APMOD_MISSING_PATH_TO_FS,
+                                SVN_ERR_APMOD_MISSING_PATH_TO_FS, 0,
                                 "The server is misconfigured: "
                                 "either an SVNPath or SVNParentPath "
                                 "directive is required to specify the location 
"
@@ -1339,7 +1339,7 @@ dav_svn_split_uri2(request_rec *r,
         {
           /* ### are SVN_ERR_APMOD codes within the right numeric space? */
           return dav_svn__new_error(pool, HTTP_FORBIDDEN,
-                                    SVN_ERR_APMOD_MALFORMED_URI,
+                                    SVN_ERR_APMOD_MALFORMED_URI, 0,
                                     "The URI does not contain the name "
                                     "of a repository.");
         }
@@ -1387,7 +1387,7 @@ dav_svn_split_uri2(request_rec *r,
           {
             /* relative is just "!svn", which is malformed. */
             return dav_svn__new_error(pool, HTTP_NOT_FOUND,
-                                      SVN_ERR_APMOD_MALFORMED_URI,
+                                      SVN_ERR_APMOD_MALFORMED_URI, 0,
                                       "Nothing follows the svn special_uri.");
           }
         else
@@ -1414,7 +1414,7 @@ dav_svn_split_uri2(request_rec *r,
                         else
                           return dav_svn__new_error(
                                      pool, HTTP_NOT_FOUND,
-                                     SVN_ERR_APMOD_MALFORMED_URI,
+                                     SVN_ERR_APMOD_MALFORMED_URI, 0,
                                      "Missing info after special_uri.");
                       }
                     else if (relative[len3] == '/')
@@ -1438,7 +1438,7 @@ dav_svn_split_uri2(request_rec *r,
                             if (j != (defn->numcomponents - 1))
                               return dav_svn__new_error(
                                          pool, HTTP_NOT_FOUND,
-                                         SVN_ERR_APMOD_MALFORMED_URI,
+                                         SVN_ERR_APMOD_MALFORMED_URI, 0,
                                          "Not enough components after "
                                          "special_uri.");
 
@@ -1458,7 +1458,7 @@ dav_svn_split_uri2(request_rec *r,
                       {
                         return
                           dav_svn__new_error(pool, HTTP_NOT_FOUND,
-                                        SVN_ERR_APMOD_MALFORMED_URI,
+                                        SVN_ERR_APMOD_MALFORMED_URI, 0,
                                         "Unknown data after special_uri.");
                       }
 
@@ -1469,7 +1469,7 @@ dav_svn_split_uri2(request_rec *r,
             if (defn->name == NULL)
               return
                 dav_svn__new_error(pool, HTTP_NOT_FOUND,
-                                   SVN_ERR_APMOD_MALFORMED_URI,
+                                   SVN_ERR_APMOD_MALFORMED_URI, 0,
                                    "Couldn't match subdir after special_uri.");
           }
       }
@@ -1571,7 +1571,7 @@ get_parentpath_resource(request_rec *r,
                             "/", SVN_VA_NULL);
       apr_table_setn(r->headers_out, "Location",
                      ap_construct_url(r->pool, new_uri, r));
-      return dav_svn__new_error(r->pool, HTTP_MOVED_PERMANENTLY, 0,
+      return dav_svn__new_error(r->pool, HTTP_MOVED_PERMANENTLY, 0, 0,
                                 "Requests for a collection must have a "
                                 "trailing slash on the URI.");
     }
@@ -1994,7 +1994,7 @@ parse_querystring(request_rec *r, const
         prevstr++;
       peg_rev = SVN_STR_TO_REV(prevstr);
       if (!SVN_IS_VALID_REVNUM(peg_rev))
-        return dav_svn__new_error(pool, HTTP_BAD_REQUEST, 0,
+        return dav_svn__new_error(pool, HTTP_BAD_REQUEST, 0, 0,
                                   "invalid peg rev in query string");
     }
   else
@@ -2013,7 +2013,7 @@ parse_querystring(request_rec *r, const
         wrevstr++;
       working_rev = SVN_STR_TO_REV(wrevstr);
       if (!SVN_IS_VALID_REVNUM(working_rev))
-        return dav_svn__new_error(pool, HTTP_BAD_REQUEST, 0,
+        return dav_svn__new_error(pool, HTTP_BAD_REQUEST, 0, 0,
                                   "invalid working rev in query string");
     }
   else
@@ -2027,7 +2027,7 @@ parse_querystring(request_rec *r, const
      Our node-tracing algorithms can't handle that scenario, so we'll
      disallow it here. */
   if (working_rev > peg_rev)
-    return dav_svn__new_error(pool, HTTP_BAD_REQUEST, 0,
+    return dav_svn__new_error(pool, HTTP_BAD_REQUEST, 0, 0,
                               "working rev greater than peg rev.");
 
   /* If WORKING_REV and PEG_REV are equivalent, we want to return the
@@ -2069,7 +2069,7 @@ parse_querystring(request_rec *r, const
 
       newpath = apr_hash_get(locations, &working_rev, sizeof(svn_revnum_t));
       if (! newpath)
-        return dav_svn__new_error(pool, HTTP_NOT_FOUND, 0,
+        return dav_svn__new_error(pool, HTTP_NOT_FOUND, 0, 0,
                                   "path doesn't exist in that revision.");
 
       /* Redirect folks to a canonical, peg-revision-only location.
@@ -2089,7 +2089,7 @@ parse_querystring(request_rec *r, const
       return dav_svn__new_error(r->pool,
                                 prevstr ? HTTP_MOVED_PERMANENTLY
                                         : HTTP_MOVED_TEMPORARILY,
-                                0, "redirecting to canonical location");
+                                0, 0, "redirecting to canonical location");
     }
 
   return NULL;
@@ -2149,7 +2149,7 @@ get_resource(request_rec *r,
           /* Marshall the error back to the client by generating by
            * way of the dav_svn__error_response_tag trick. */
           err = dav_svn__new_error(r->pool, HTTP_METHOD_NOT_ALLOWED,
-                                   SVN_ERR_APMOD_MALFORMED_URI,
+                                   SVN_ERR_APMOD_MALFORMED_URI, 0,
                                    "The URI does not contain the name "
                                    "of a repository.");
           /* can't use r->allowed since the default handler isn't called */
@@ -2550,7 +2550,7 @@ get_resource(request_rec *r,
                                          SVN_VA_NULL);
       apr_table_setn(r->headers_out, "Location",
                      ap_construct_url(r->pool, new_path, r));
-      return dav_svn__new_error(r->pool, HTTP_MOVED_PERMANENTLY, 0,
+      return dav_svn__new_error(r->pool, HTTP_MOVED_PERMANENTLY, 0, 0,
                                 "Requests for a collection must have a "
                                 "trailing slash on the URI.");
     }
@@ -2575,7 +2575,7 @@ get_resource(request_rec *r,
   /* ### pick something other than HTTP_INTERNAL_SERVER_ERROR */
   /* ### are SVN_ERR_APMOD codes within the right numeric space? */
   return dav_svn__new_error(r->pool, HTTP_INTERNAL_SERVER_ERROR,
-                            SVN_ERR_APMOD_MALFORMED_URI,
+                            SVN_ERR_APMOD_MALFORMED_URI, 0,
                             "The URI indicated a resource within Subversion's "
                             "special resource area, but does not exist. This "
                             "is generally caused by a problem in the client "
@@ -2684,7 +2684,7 @@ get_parent_resource(const dav_resource *
 
   /* If we didn't create parent resource above, complain. */
   if (! *parent_resource)
-    return dav_svn__new_error(resource->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
+    return dav_svn__new_error(resource->pool, HTTP_INTERNAL_SERVER_ERROR, 0, 0,
                               apr_psprintf(resource->pool,
                                            "get_parent_resource was called for 
"
                                            "%s (type %d)",
@@ -2792,7 +2792,8 @@ open_stream(const dav_resource *resource
     {
       if (resource->type != DAV_RESOURCE_TYPE_WORKING)
         {
-          return dav_svn__new_error(resource->pool, HTTP_METHOD_NOT_ALLOWED, 0,
+          return dav_svn__new_error(resource->pool, HTTP_METHOD_NOT_ALLOWED,
+                                    0, 0,
                                     "Resource body changes may only be made to 
"
                                     "working resources (at this time).");
         }
@@ -2801,7 +2802,7 @@ open_stream(const dav_resource *resource
   /* ### TODO:  Can we support range writes someday? */
   if (mode == DAV_MODE_WRITE_SEEKABLE)
     {
-      return dav_svn__new_error(resource->pool, HTTP_NOT_IMPLEMENTED, 0,
+      return dav_svn__new_error(resource->pool, HTTP_NOT_IMPLEMENTED, 0, 0,
                                 "Resource body writes cannot use ranges "
                                 "(at this time).");
     }
@@ -2995,7 +2996,7 @@ seek_stream(dav_stream *stream, apr_off_
 {
   /* ### fill this in */
 
-  return dav_svn__new_error(stream->res->pool, HTTP_NOT_IMPLEMENTED, 0,
+  return dav_svn__new_error(stream->res->pool, HTTP_NOT_IMPLEMENTED, 0, 0,
                             "Resource body read/write cannot use ranges "
                             "(at this time)");
 }
@@ -3301,7 +3302,7 @@ deliver(const dav_resource *resource, ap
           && resource->type != DAV_RESOURCE_TYPE_WORKING
           && resource->info->restype != DAV_SVN_RESTYPE_PARENTPATH_COLLECTION))
     {
-      return dav_svn__new_error(resource->pool, HTTP_CONFLICT, 0,
+      return dav_svn__new_error(resource->pool, HTTP_CONFLICT, 0, 0,
                                 "Cannot GET this type of resource.");
     }
 
@@ -3642,7 +3643,8 @@ deliver(const dav_resource *resource, ap
       bkt = apr_bucket_eos_create(output->c->bucket_alloc);
       APR_BRIGADE_INSERT_TAIL(bb, bkt);
       if ((status = ap_pass_brigade(output, bb)) != APR_SUCCESS)
-        return dav_svn__new_error(resource->pool, HTTP_INTERNAL_SERVER_ERROR, 
0,
+        return dav_svn__new_error(resource->pool, HTTP_INTERNAL_SERVER_ERROR,
+                                  0, status,
                                   "Could not write EOS to filter.");
 
       return NULL;
@@ -3689,7 +3691,7 @@ deliver(const dav_resource *resource, ap
                                         "is really a file",
                                         resource->pool);
           if (!is_file)
-            return dav_svn__new_error(resource->pool, HTTP_BAD_REQUEST, 0,
+            return dav_svn__new_error(resource->pool, HTTP_BAD_REQUEST, 0, 0,
                                       apr_psprintf(resource->pool,
                                       "the delta base of '%s' does not refer "
                                       "to a file in revision %ld",
@@ -3850,9 +3852,9 @@ deliver(const dav_resource *resource, ap
                                           output->c->bucket_alloc);
         APR_BRIGADE_INSERT_TAIL(bb, bkt);
         if ((status = ap_pass_brigade(output, bb)) != APR_SUCCESS) {
-          /* ### what to do with status; and that HTTP code... */
+          /* ### that HTTP code... */
           return dav_svn__new_error(resource->pool,
-                                    HTTP_INTERNAL_SERVER_ERROR, 0,
+                                    HTTP_INTERNAL_SERVER_ERROR, 0, status,
                                     "Could not write data to filter.");
         }
       }
@@ -3862,9 +3864,9 @@ deliver(const dav_resource *resource, ap
       bkt = apr_bucket_eos_create(output->c->bucket_alloc);
       APR_BRIGADE_INSERT_TAIL(bb, bkt);
       if ((status = ap_pass_brigade(output, bb)) != APR_SUCCESS) {
-        /* ### what to do with status; and that HTTP code... */
+        /* ### that HTTP code... */
         return dav_svn__new_error(resource->pool,
-                                  HTTP_INTERNAL_SERVER_ERROR, 0,
+                                  HTTP_INTERNAL_SERVER_ERROR, 0, status,
                                   "Could not write EOS to filter.");
       }
 
@@ -3882,7 +3884,7 @@ create_collection(dav_resource *resource
   if (resource->type != DAV_RESOURCE_TYPE_WORKING
       && resource->type != DAV_RESOURCE_TYPE_REGULAR)
     {
-      return dav_svn__new_error(resource->pool, HTTP_METHOD_NOT_ALLOWED, 0,
+      return dav_svn__new_error(resource->pool, HTTP_METHOD_NOT_ALLOWED, 0, 0,
                                 "Collections can only be created within a "
                                 "working or regular collection (at this "
                                 "time).");
@@ -3891,7 +3893,7 @@ create_collection(dav_resource *resource
   /* ...regular resources allowed only if autoversioning is turned on. */
   if (resource->type == DAV_RESOURCE_TYPE_REGULAR
       && ! (resource->info->repos->autoversioning))
-    return dav_svn__new_error(resource->pool, HTTP_METHOD_NOT_ALLOWED, 0,
+    return dav_svn__new_error(resource->pool, HTTP_METHOD_NOT_ALLOWED, 0, 0,
                               "MKCOL called on regular resource, but "
                               "autoversioning is not active.");
 
@@ -3963,12 +3965,12 @@ copy_resource(const dav_resource *src,
      a new baseline afterwards.  We need to safeguard here that nobody
      is calling COPY with the baseline as a Destination! */
   if (dst->baselined && dst->type == DAV_RESOURCE_TYPE_VERSION)
-    return dav_svn__new_error(src->pool, HTTP_PRECONDITION_FAILED, 0,
+    return dav_svn__new_error(src->pool, HTTP_PRECONDITION_FAILED, 0, 0,
                               "Illegal: COPY Destination is a baseline.");
 
   if (dst->type == DAV_RESOURCE_TYPE_REGULAR
       && !(dst->info->repos->autoversioning))
-    return dav_svn__new_error(dst->pool, HTTP_METHOD_NOT_ALLOWED, 0,
+    return dav_svn__new_error(dst->pool, HTTP_METHOD_NOT_ALLOWED, 0, 0,
                               "COPY called on regular resource, but "
                               "autoversioning is not active.");
 
@@ -3998,7 +4000,7 @@ copy_resource(const dav_resource *src,
 
       if (!serr && (strcmp(src_repos_path, dst_repos_path) != 0))
           return dav_svn__new_error_svn(
-                dst->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
+                dst->pool, HTTP_INTERNAL_SERVER_ERROR, 0, 0,
                 "Copy source and destination are in different repositories");
     }
   else
@@ -4044,13 +4046,13 @@ remove_resource(dav_resource *resource,
          || resource->type == DAV_RESOURCE_TYPE_ACTIVITY
          || (resource->type == DAV_RESOURCE_TYPE_PRIVATE
              && resource->info->restype == DAV_SVN_RESTYPE_TXN_COLLECTION)))
-    return dav_svn__new_error(resource->pool, HTTP_METHOD_NOT_ALLOWED, 0,
+    return dav_svn__new_error(resource->pool, HTTP_METHOD_NOT_ALLOWED, 0, 0,
                               "DELETE called on invalid resource type.");
 
   /* ...and regular resources only if autoversioning is turned on. */
   if (resource->type == DAV_RESOURCE_TYPE_REGULAR
       && ! (resource->info->repos->autoversioning))
-    return dav_svn__new_error(resource->pool, HTTP_METHOD_NOT_ALLOWED, 0,
+    return dav_svn__new_error(resource->pool, HTTP_METHOD_NOT_ALLOWED, 0, 0,
                               "DELETE called on regular resource, but "
                               "autoversioning is not active.");
 
@@ -4208,7 +4210,7 @@ move_resource(dav_resource *src,
   if (src->type != DAV_RESOURCE_TYPE_REGULAR
       || dst->type != DAV_RESOURCE_TYPE_REGULAR
       || !(src->info->repos->autoversioning))
-    return dav_svn__new_error(dst->pool, HTTP_METHOD_NOT_ALLOWED, 0,
+    return dav_svn__new_error(dst->pool, HTTP_METHOD_NOT_ALLOWED, 0, 0,
                               "MOVE only allowed on two public URIs, and "
                               "autoversioning must be active.");
 
@@ -4307,7 +4309,7 @@ do_walk(walker_ctx_t *ctx,
   /* ### need to allow more walking in the future */
   if (params->root->type != DAV_RESOURCE_TYPE_REGULAR)
     {
-      return dav_svn__new_error(params->pool, HTTP_METHOD_NOT_ALLOWED, 0,
+      return dav_svn__new_error(params->pool, HTTP_METHOD_NOT_ALLOWED, 0, 0,
                                 "Walking the resource hierarchy can only be "
                                 "done on 'regular' resources [at this time].");
     }
@@ -4630,7 +4632,7 @@ dav_svn__create_version_resource(dav_res
 
   result = parse_version_uri(comb, uri, NULL, 0);
   if (result != 0)
-    return dav_svn__new_error(pool, HTTP_INTERNAL_SERVER_ERROR, 0,
+    return dav_svn__new_error(pool, HTTP_INTERNAL_SERVER_ERROR, 0, 0,
                               "Could not parse version resource uri.");
 
   err = prep_version(comb);
@@ -4658,11 +4660,11 @@ handle_post_request(request_rec *r,
   status = dav_svn__parse_request_skel(&request_skel, r, pool);
 
   if (status != OK)
-    return dav_svn__new_error(pool, status, 0,
+    return dav_svn__new_error(pool, status, 0, 0,
                               "Error parsing skel POST request body.");
 
   if (svn_skel__list_length(request_skel) < 1)
-    return dav_svn__new_error(pool, HTTP_BAD_REQUEST, 0,
+    return dav_svn__new_error(pool, HTTP_BAD_REQUEST, 0, 0,
                               "Unable to identify skel POST request flavor.");
 
   post_skel = request_skel->children;
@@ -4680,7 +4682,7 @@ handle_post_request(request_rec *r,
                                                  request_skel, output);
     }
 
-  return dav_svn__new_error(pool, HTTP_BAD_REQUEST, 0,
+  return dav_svn__new_error(pool, HTTP_BAD_REQUEST, 0, 0,
                             "Unsupported skel POST request flavor.");
 }
 
@@ -4733,7 +4735,7 @@ int dav_svn__method_post(request_rec *r)
     }
   else
     {
-      derr = dav_svn__new_error(resource->pool, HTTP_BAD_REQUEST, 0,
+      derr = dav_svn__new_error(resource->pool, HTTP_BAD_REQUEST, 0, 0,
                                 "Unsupported POST request type.");
     }
 

Modified: subversion/branches/fsx-1.10/subversion/mod_dav_svn/util.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/mod_dav_svn/util.c?rev=1687422&r1=1687421&r2=1687422&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/mod_dav_svn/util.c (original)
+++ subversion/branches/fsx-1.10/subversion/mod_dav_svn/util.c Thu Jun 25 
08:00:57 2015
@@ -46,6 +46,7 @@ dav_error *
 dav_svn__new_error(apr_pool_t *pool,
                    int status,
                    int error_id,
+                   apr_status_t aprerr,
                    const char *desc)
 {
   if (error_id == 0)
@@ -59,10 +60,10 @@ dav_svn__new_error(apr_pool_t *pool,
  * > 2.2 below perpetuates this.
  */
 #if AP_MODULE_MAGIC_AT_LEAST(20091119,0)
-  return dav_new_error(pool, status, error_id, 0, desc);
+  return dav_new_error(pool, status, error_id, aprerr, desc);
 #else
 
-  errno = 0; /* For the same reason as in dav_svn__new_error_svn */
+  errno = aprerr; /* For the same reason as in dav_svn__new_error_svn */
 
   return dav_new_error(pool, status, error_id, desc);
 #endif
@@ -72,20 +73,22 @@ dav_error *
 dav_svn__new_error_svn(apr_pool_t *pool,
                        int status,
                        int error_id,
+                       apr_status_t aprerr,
                        const char *desc)
 {
   if (error_id == 0)
     error_id = SVN_ERR_RA_DAV_REQUEST_FAILED;
 
 #if AP_MODULE_MAGIC_AT_LEAST(20091119,0)
-  return dav_new_error_tag(pool, status, error_id, 0,
+  return dav_new_error_tag(pool, status, error_id, aprerr,
                            desc, SVN_DAV_ERROR_NAMESPACE, SVN_DAV_ERROR_TAG);
 #else
-  /* dav_new_error_tag will record errno but Subversion makes no attempt
-     to ensure that it is valid.  We reset it to avoid putting incorrect
-     information into the error log, at the expense of possibly removing
-     valid information. */
-  errno = 0;
+  /* dav_new_error_tag will record errno so we use it to pass aprerr.
+     This overrwites any existing errno value but since Subversion
+     makes no attempt to avoid system calls after a failed system call
+     there is no guarantee that any existing errno represents a
+     relevant error. */
+  errno = aprerr;
 
   return dav_new_error_tag(pool, status, error_id, desc,
                            SVN_DAV_ERROR_NAMESPACE, SVN_DAV_ERROR_TAG);
@@ -101,7 +104,7 @@ build_error_chain(apr_pool_t *pool, svn_
   char buffer[128];
   const char *msg = svn_err_best_message(err, buffer, sizeof(buffer));
 
-  dav_error *derr = dav_svn__new_error_svn(pool, status, err->apr_err,
+  dav_error *derr = dav_svn__new_error_svn(pool, status, err->apr_err, 0,
                                            apr_pstrdup(pool, msg));
 
   if (err->child)
@@ -540,7 +543,7 @@ dav_svn__test_canonical(const char *path
 
   /* Otherwise, generate a generic HTTP_BAD_REQUEST error. */
   return dav_svn__new_error_svn(
-     pool, HTTP_BAD_REQUEST, 0,
+     pool, HTTP_BAD_REQUEST, 0, 0,
      apr_psprintf(pool,
                   "Path '%s' is not canonicalized; "
                   "there is a problem with the client.", path));
@@ -658,7 +661,7 @@ dav_svn__final_flush_or_error(request_re
     {
       apr_status_t apr_err = ap_fflush(output, bb);
       if (apr_err && (! derr))
-        derr = dav_svn__new_error(pool, HTTP_INTERNAL_SERVER_ERROR, 0,
+        derr = dav_svn__new_error(pool, HTTP_INTERNAL_SERVER_ERROR, 0, apr_err,
                                   "Error flushing brigade.");
     }
   return derr;

Modified: subversion/branches/fsx-1.10/subversion/mod_dav_svn/version.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/mod_dav_svn/version.c?rev=1687422&r1=1687421&r2=1687422&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/mod_dav_svn/version.c (original)
+++ subversion/branches/fsx-1.10/subversion/mod_dav_svn/version.c Thu Jun 25 
08:00:57 2015
@@ -88,7 +88,7 @@ set_auto_revprops(dav_resource *resource
 
   if (! (resource->type == DAV_RESOURCE_TYPE_WORKING
          && resource->info->auto_checked_out))
-    return dav_svn__new_error(resource->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
+    return dav_svn__new_error(resource->pool, HTTP_INTERNAL_SERVER_ERROR, 0, 0,
                               "Set_auto_revprops called on invalid resource.");
 
   if ((serr = dav_svn__attach_auto_revprops(resource->info->root.txn,
@@ -396,14 +396,14 @@ vsn_control(dav_resource *resource, cons
   /* All mod_dav_svn resources are versioned objects;  so it doesn't
      make sense to call vsn_control on a resource that exists . */
   if (resource->exists)
-    return dav_svn__new_error(resource->pool, HTTP_BAD_REQUEST, 0,
+    return dav_svn__new_error(resource->pool, HTTP_BAD_REQUEST, 0, 0,
                               "vsn_control called on already-versioned "
                               "resource.");
 
   /* Only allow a NULL target, which means an create an 'empty' VCR. */
   if (target != NULL)
     return dav_svn__new_error_svn(resource->pool, HTTP_NOT_IMPLEMENTED,
-                                  SVN_ERR_UNSUPPORTED_FEATURE,
+                                  SVN_ERR_UNSUPPORTED_FEATURE, 0,
                                   "vsn_control called with non-null target");
 
   /* This is kind of silly.  The docstring for this callback says it's
@@ -451,13 +451,13 @@ dav_svn__checkout(dav_resource *resource
 
       if (resource->type != DAV_RESOURCE_TYPE_REGULAR)
         return dav_svn__new_error_svn(resource->pool, HTTP_METHOD_NOT_ALLOWED,
-                                      SVN_ERR_UNSUPPORTED_FEATURE,
+                                      SVN_ERR_UNSUPPORTED_FEATURE, 0,
                                       "auto-checkout attempted on non-regular "
                                       "version-controlled resource");
 
       if (resource->baselined)
         return dav_svn__new_error_svn(resource->pool, HTTP_METHOD_NOT_ALLOWED,
-                                      SVN_ERR_UNSUPPORTED_FEATURE,
+                                      SVN_ERR_UNSUPPORTED_FEATURE, 0,
                                       "auto-checkout attempted on baseline "
                                       "collection, which is not supported");
 
@@ -503,7 +503,7 @@ dav_svn__checkout(dav_resource *resource
                                              shared_activity);
           if (! shared_txn_name)
             return dav_svn__new_error(resource->pool,
-                                      HTTP_INTERNAL_SERVER_ERROR, 0,
+                                      HTTP_INTERNAL_SERVER_ERROR, 0, 0,
                                       "Cannot look up a txn_name by activity");
         }
 
@@ -542,21 +542,21 @@ dav_svn__checkout(dav_resource *resource
   if (resource->type != DAV_RESOURCE_TYPE_VERSION)
     {
       return dav_svn__new_error_svn(resource->pool, HTTP_METHOD_NOT_ALLOWED,
-                                    SVN_ERR_UNSUPPORTED_FEATURE,
+                                    SVN_ERR_UNSUPPORTED_FEATURE, 0,
                                     "CHECKOUT can only be performed on a "
                                     "version resource");
     }
   if (create_activity)
     {
       return dav_svn__new_error_svn(resource->pool, HTTP_NOT_IMPLEMENTED,
-                                    SVN_ERR_UNSUPPORTED_FEATURE,
+                                    SVN_ERR_UNSUPPORTED_FEATURE, 0,
                                     "CHECKOUT cannot create an activity at "
                                     "this time. Use MKACTIVITY first");
     }
   if (is_unreserved)
     {
       return dav_svn__new_error_svn(resource->pool, HTTP_NOT_IMPLEMENTED,
-                                    SVN_ERR_UNSUPPORTED_FEATURE,
+                                    SVN_ERR_UNSUPPORTED_FEATURE, 0,
                                     "Unreserved checkouts are not yet "
                                     "available. A version history may not be "
                                     "checked out more than once, into a "
@@ -565,7 +565,7 @@ dav_svn__checkout(dav_resource *resource
   if (activities == NULL)
     {
       return dav_svn__new_error_svn(resource->pool, HTTP_CONFLICT,
-                                    SVN_ERR_INCOMPLETE_DATA,
+                                    SVN_ERR_INCOMPLETE_DATA, 0,
                                     "An activity must be provided for "
                                     "checkout");
     }
@@ -573,7 +573,7 @@ dav_svn__checkout(dav_resource *resource
   if (activities->nelts != 1)
     {
       return dav_svn__new_error_svn(resource->pool, HTTP_CONFLICT,
-                                    SVN_ERR_INCORRECT_PARAMS,
+                                    SVN_ERR_INCORRECT_PARAMS, 0,
                                     "Only one activity may be specified within 
"
                                     "the CHECKOUT");
     }
@@ -592,7 +592,7 @@ dav_svn__checkout(dav_resource *resource
   if (parse.activity_id == NULL)
     {
       return dav_svn__new_error_svn(resource->pool, HTTP_CONFLICT,
-                                    SVN_ERR_INCORRECT_PARAMS,
+                                    SVN_ERR_INCORRECT_PARAMS, 0,
                                     "The provided href is not an activity 
URI");
     }
 
@@ -600,7 +600,7 @@ dav_svn__checkout(dav_resource *resource
                                    parse.activity_id)) == NULL)
     {
       return dav_svn__new_error_svn(resource->pool, HTTP_CONFLICT,
-                                    SVN_ERR_APMOD_ACTIVITY_NOT_FOUND,
+                                    SVN_ERR_APMOD_ACTIVITY_NOT_FOUND, 0,
                                     "The specified activity does not exist");
     }
 
@@ -630,7 +630,7 @@ dav_svn__checkout(dav_resource *resource
       if (resource->info->root.rev != youngest)
         {
           return dav_svn__new_error_svn(resource->pool, HTTP_CONFLICT,
-                                        SVN_ERR_APMOD_BAD_BASELINE,
+                                        SVN_ERR_APMOD_BAD_BASELINE, 0,
                                         "The specified baseline is not the "
                                         "latest baseline, so it may not be "
                                         "checked out");
@@ -728,7 +728,7 @@ dav_svn__checkout(dav_resource *resource
               /* The item being modified is older than the one in the
                  transaction.  The client is out of date.  */
               return dav_svn__new_error_svn
-                (resource->pool, HTTP_CONFLICT, SVN_ERR_FS_CONFLICT,
+                (resource->pool, HTTP_CONFLICT, SVN_ERR_FS_CONFLICT, 0,
                  "resource out of date; try updating");
             }
           else if (resource->info->root.rev > txn_created_rev)
@@ -745,7 +745,7 @@ dav_svn__checkout(dav_resource *resource
                                                resource->pool)))
                 {
                   err = dav_svn__new_error_svn
-                    (resource->pool, HTTP_CONFLICT, serr->apr_err,
+                    (resource->pool, HTTP_CONFLICT, serr->apr_err, 0,
                      "Unable to fetch the node revision id of the version "
                      "resource within the revision");
                   svn_error_clear(serr);
@@ -754,7 +754,7 @@ dav_svn__checkout(dav_resource *resource
               if (node_relation != svn_fs_node_unchanged)
                 {
                   return dav_svn__new_error_svn
-                    (resource->pool, HTTP_CONFLICT, SVN_ERR_FS_CONFLICT,
+                    (resource->pool, HTTP_CONFLICT, SVN_ERR_FS_CONFLICT, 0,
                      "version resource newer than txn (restart the commit)");
                 }
             }
@@ -773,7 +773,7 @@ uncheckout(dav_resource *resource)
 {
   if (resource->type != DAV_RESOURCE_TYPE_WORKING)
     return dav_svn__new_error_svn(resource->pool, HTTP_INTERNAL_SERVER_ERROR,
-                                  SVN_ERR_UNSUPPORTED_FEATURE,
+                                  SVN_ERR_UNSUPPORTED_FEATURE, 0,
                                   "UNCHECKOUT called on non-working resource");
 
   /* Try to abort the txn if it exists;  but don't try too hard.  :-)  */
@@ -914,7 +914,7 @@ dav_svn__checkin(dav_resource *resource,
 
   if (resource->type != DAV_RESOURCE_TYPE_WORKING)
     return dav_svn__new_error_svn(resource->pool, HTTP_INTERNAL_SERVER_ERROR,
-                                  SVN_ERR_UNSUPPORTED_FEATURE,
+                                  SVN_ERR_UNSUPPORTED_FEATURE, 0,
                                   "CHECKIN called on non-working resource");
 
   /* If the global autoversioning activity still exists, that means
@@ -940,19 +940,22 @@ dav_svn__checkin(dav_resource *resource,
       shared_txn_name = dav_svn__get_txn(resource->info->repos,
                                          shared_activity);
       if (! shared_txn_name)
-        return dav_svn__new_error(resource->pool, HTTP_INTERNAL_SERVER_ERROR, 
0,
+        return dav_svn__new_error(resource->pool, HTTP_INTERNAL_SERVER_ERROR,
+                                  0, 0,
                                   "Cannot look up a txn_name by activity");
 
       /* Sanity checks */
       if (resource->info->root.txn_name
           && (strcmp(shared_txn_name, resource->info->root.txn_name) != 0))
-        return dav_svn__new_error(resource->pool, HTTP_INTERNAL_SERVER_ERROR, 
0,
+        return dav_svn__new_error(resource->pool, HTTP_INTERNAL_SERVER_ERROR,
+                                  0, 0,
                                   "Internal txn_name doesn't match "
                                   "autoversioning transaction.");
 
       if (! resource->info->root.txn)
         /* should already be open by checkout */
-        return dav_svn__new_error(resource->pool, HTTP_INTERNAL_SERVER_ERROR, 
0,
+        return dav_svn__new_error(resource->pool, HTTP_INTERNAL_SERVER_ERROR,
+                                  0, 0,
                                   "Autoversioning txn isn't open "
                                   "when it should be.");
 
@@ -1018,7 +1021,7 @@ dav_svn__checkin(dav_resource *resource,
             {
               return dav_svn__new_error(resource->pool,
                                         HTTP_INTERNAL_SERVER_ERROR,
-                                        0,
+                                        0, 0,
                                         "Commit failed but there was no error "
                                         "provided.");
             }
@@ -1151,7 +1154,7 @@ deliver_report(request_rec *r,
 
   /* ### what is a good error for an unknown report? */
   return dav_svn__new_error_svn(resource->pool, HTTP_NOT_IMPLEMENTED,
-                                SVN_ERR_UNSUPPORTED_FEATURE,
+                                SVN_ERR_UNSUPPORTED_FEATURE, 0,
                                 "The requested report is unknown");
 }
 
@@ -1180,7 +1183,7 @@ make_activity(dav_resource *resource)
      case an older mod_dav doesn't do the check for us. */
   if (! can_be_activity(resource))
     return dav_svn__new_error_svn(resource->pool, HTTP_FORBIDDEN,
-                                  SVN_ERR_APMOD_MALFORMED_URI,
+                                  SVN_ERR_APMOD_MALFORMED_URI, 0,
                                   "Activities cannot be created at that "
                                   "location; query the "
                                   "DAV:activity-collection-set property");
@@ -1428,7 +1431,7 @@ merge(dav_resource *target,
              && source->info->restype == DAV_SVN_RESTYPE_TXN_COLLECTION)))
     {
       return dav_svn__new_error_svn(pool, HTTP_METHOD_NOT_ALLOWED,
-                                    SVN_ERR_INCORRECT_PARAMS,
+                                    SVN_ERR_INCORRECT_PARAMS, 0,
                                     "MERGE can only be performed using an "
                                     "activity or transaction resource as the "
                                     "source");
@@ -1436,7 +1439,7 @@ merge(dav_resource *target,
   if (! source->exists)
     {
       return dav_svn__new_error_svn(pool, HTTP_METHOD_NOT_ALLOWED,
-                                    SVN_ERR_INCORRECT_PARAMS,
+                                    SVN_ERR_INCORRECT_PARAMS, 0,
                                     "MERGE activity or transaction resource "
                                     "does not exist");
     }
@@ -1533,7 +1536,7 @@ merge(dav_resource *target,
         {
           return dav_svn__new_error(pool,
                                     HTTP_INTERNAL_SERVER_ERROR,
-                                    0,
+                                    0, 0,
                                     "Commit failed but there was no error "
                                     "provided.");
         }

Modified: subversion/branches/fsx-1.10/subversion/svn/cl-conflicts.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/svn/cl-conflicts.c?rev=1687422&r1=1687421&r2=1687422&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/svn/cl-conflicts.c (original)
+++ subversion/branches/fsx-1.10/subversion/svn/cl-conflicts.c Thu Jun 25 
08:00:57 2015
@@ -301,32 +301,26 @@ svn_cl__get_human_readable_tree_conflict
   conflict_action = svn_client_conflict_get_incoming_change(conflict);
   conflict_reason = svn_client_conflict_get_local_change(conflict);
   conflict_operation = svn_client_conflict_get_operation(conflict);
-  conflict_node_kind = svn_client_conflict_get_node_kind(conflict);
+  conflict_node_kind = svn_client_conflict_tree_get_victim_node_kind(conflict);
 
   /* Determine the node kind of the incoming change. */
   incoming_kind = svn_node_unknown;
   if (conflict_action == svn_wc_conflict_action_edit ||
       conflict_action == svn_wc_conflict_action_delete)
     {
-      const svn_wc_conflict_version_t *src_left_version;
-
       /* Change is acting on 'src_left' version of the node. */
-      src_left_version = svn_client_conflict_get_src_left_version(conflict);
-      if (src_left_version)
-        incoming_kind = src_left_version->node_kind;
+      SVN_ERR(svn_client_conflict_get_incoming_old_repos_location(
+                NULL, NULL, &incoming_kind, conflict, pool, pool));
     }
   else if (conflict_action == svn_wc_conflict_action_add ||
            conflict_action == svn_wc_conflict_action_replace)
     {
-      const svn_wc_conflict_version_t *src_right_version;
-
       /* Change is acting on 'src_right' version of the node.
        *
        * ### For 'replace', the node kind is ambiguous. However, src_left
        * ### is NULL for replace, so we must use src_right. */
-      src_right_version = svn_client_conflict_get_src_right_version(conflict);
-      if (src_right_version)
-        incoming_kind = src_right_version->node_kind;
+      SVN_ERR(svn_client_conflict_get_incoming_new_repos_location(
+                NULL, NULL, &incoming_kind, conflict, pool, pool));
     }
 
   reason = local_reason_str(conflict_node_kind, conflict_reason,
@@ -380,13 +374,16 @@ svn_cl__get_human_readable_action_descri
 
 
 /* Helper for svn_cl__append_tree_conflict_info_xml().
- * Appends the attributes of the given VERSION to ATT_HASH.
+ * Appends the repository location of a conflicted node to ATT_HASH.
  * SIDE is the content of the version tag's side="..." attribute,
  * currently one of "source-left" or "source-right".*/
 static svn_error_t *
 add_conflict_version_xml(svn_stringbuf_t **pstr,
                          const char *side,
-                         const svn_wc_conflict_version_t *version,
+                         const char *repos_root_url,
+                         const char *repos_relpath,
+                         svn_revnum_t peg_rev,
+                         svn_node_kind_t node_kind,
                          apr_pool_t *pool)
 {
   apr_hash_t *att_hash = apr_hash_make(pool);
@@ -394,18 +391,17 @@ add_conflict_version_xml(svn_stringbuf_t
 
   svn_hash_sets(att_hash, "side", side);
 
-  if (version->repos_url)
-    svn_hash_sets(att_hash, "repos-url", version->repos_url);
+  if (repos_root_url)
+    svn_hash_sets(att_hash, "repos-url", repos_root_url);
 
-  if (version->path_in_repos)
-    svn_hash_sets(att_hash, "path-in-repos", version->path_in_repos);
+  if (repos_relpath)
+    svn_hash_sets(att_hash, "path-in-repos", repos_relpath);
 
-  if (SVN_IS_VALID_REVNUM(version->peg_rev))
-    svn_hash_sets(att_hash, "revision", apr_ltoa(pool, version->peg_rev));
+  if (SVN_IS_VALID_REVNUM(peg_rev))
+    svn_hash_sets(att_hash, "revision", apr_ltoa(pool, peg_rev));
 
-  if (version->node_kind != svn_node_unknown)
-    svn_hash_sets(att_hash, "kind",
-                  svn_cl__node_kind_str_xml(version->node_kind));
+  if (node_kind != svn_node_unknown)
+    svn_hash_sets(att_hash, "kind", svn_cl__node_kind_str_xml(node_kind));
 
   svn_xml_make_open_tag_hash(pstr, pool, svn_xml_self_closing,
                              "version", att_hash);
@@ -420,8 +416,10 @@ append_tree_conflict_info_xml(svn_string
 {
   apr_hash_t *att_hash = apr_hash_make(pool);
   const char *tmp;
-  const svn_wc_conflict_version_t *src_left_version;
-  const svn_wc_conflict_version_t *src_right_version;
+  const char *repos_root_url;
+  const char *repos_relpath;
+  svn_revnum_t peg_rev;
+  svn_node_kind_t node_kind;
 
   svn_hash_sets(att_hash, "victim",
                 svn_dirent_basename(
@@ -429,7 +427,7 @@ append_tree_conflict_info_xml(svn_string
 
   svn_hash_sets(att_hash, "kind",
                 svn_cl__node_kind_str_xml(
-                  svn_client_conflict_get_node_kind(conflict)));
+                  svn_client_conflict_tree_get_victim_node_kind(conflict)));
 
   svn_hash_sets(att_hash, "operation",
                 svn_cl__operation_str_xml(
@@ -449,19 +447,30 @@ append_tree_conflict_info_xml(svn_string
 
   /* Add child tags for OLDER_VERSION and THEIR_VERSION. */
 
-  src_left_version = svn_client_conflict_get_src_left_version(conflict);
-  if (src_left_version)
-    SVN_ERR(add_conflict_version_xml(&str,
-                                     "source-left",
-                                     src_left_version,
-                                     pool));
-
-  src_right_version = svn_client_conflict_get_src_right_version(conflict);
-  if (src_right_version)
+  SVN_ERR(svn_client_conflict_get_repos_info(&repos_root_url, NULL, conflict,
+                                             pool, pool));
+  SVN_ERR(svn_client_conflict_get_incoming_old_repos_location(&repos_relpath,
+                                                              &peg_rev,
+                                                              &node_kind,
+                                                              conflict,
+                                                              pool,
+                                                              pool));
+  if (repos_root_url && repos_relpath)
+    SVN_ERR(add_conflict_version_xml(&str, "source-left",
+                                     repos_root_url, repos_relpath, peg_rev,
+                                     node_kind, pool));
+
+  SVN_ERR(svn_client_conflict_get_incoming_old_repos_location(&repos_relpath,
+                                                              &peg_rev,
+                                                              &node_kind,
+                                                              conflict,
+                                                              pool,
+                                                              pool));
+  if (repos_root_url && repos_relpath)
     SVN_ERR(add_conflict_version_xml(&str,
                                      "source-right",
-                                     src_right_version,
-                                     pool));
+                                     repos_root_url, repos_relpath, peg_rev,
+                                     node_kind, pool));
 
   svn_xml_make_close_tag(&str, pool, "tree-conflict");
 
@@ -477,8 +486,10 @@ svn_cl__append_conflict_info_xml(svn_str
   const char *kind;
   svn_wc_conflict_kind_t conflict_kind;
   svn_wc_operation_t conflict_operation;
-  const svn_wc_conflict_version_t *src_left_version;
-  const svn_wc_conflict_version_t *src_right_version;
+  const char *repos_root_url;
+  const char *repos_relpath;
+  svn_revnum_t peg_rev;
+  svn_node_kind_t node_kind;
 
   conflict_kind = svn_client_conflict_get_kind(conflict);
   conflict_operation = svn_client_conflict_get_operation(conflict);
@@ -507,45 +518,60 @@ svn_cl__append_conflict_info_xml(svn_str
   svn_xml_make_open_tag_hash(&str, scratch_pool,
                              svn_xml_normal, "conflict", att_hash);
 
-  src_left_version = svn_client_conflict_get_src_left_version(conflict);
-  if (src_left_version)
-    SVN_ERR(add_conflict_version_xml(&str,
-                                     "source-left",
-                                     src_left_version,
-                                     scratch_pool));
-
-  src_right_version = svn_client_conflict_get_src_right_version(conflict);
-  if (src_right_version)
-    SVN_ERR(add_conflict_version_xml(&str,
-                                     "source-right",
-                                     src_right_version,
-                                     scratch_pool));
+  SVN_ERR(svn_client_conflict_get_repos_info(&repos_root_url, NULL, conflict,
+                                             scratch_pool, scratch_pool));
+  SVN_ERR(svn_client_conflict_get_incoming_old_repos_location(&repos_relpath,
+                                                              &peg_rev,
+                                                              &node_kind,
+                                                              conflict,
+                                                              scratch_pool,
+                                                              scratch_pool));
+  if (repos_root_url && repos_relpath)
+    SVN_ERR(add_conflict_version_xml(&str, "source-left",
+                                     repos_root_url, repos_relpath, peg_rev,
+                                     node_kind, scratch_pool));
+
+  SVN_ERR(svn_client_conflict_get_incoming_old_repos_location(&repos_relpath,
+                                                              &peg_rev,
+                                                              &node_kind,
+                                                              conflict,
+                                                              scratch_pool,
+                                                              scratch_pool));
+  if (repos_root_url && repos_relpath)
+    SVN_ERR(add_conflict_version_xml(&str, "source-right",
+                                     repos_root_url, repos_relpath, peg_rev,
+                                     node_kind, scratch_pool));
 
   switch (conflict_kind)
     {
+      const char *base_abspath;
+      const char *my_abspath;
+      const char *their_abspath;
+
       case svn_wc_conflict_kind_text:
+        SVN_ERR(svn_client_conflict_text_get_contents(NULL, &my_abspath,
+                                                      &base_abspath,
+                                                      &their_abspath,
+                                                      conflict, scratch_pool,
+                                                      scratch_pool));
         /* "<prev-base-file> xx </prev-base-file>" */
         svn_cl__xml_tagged_cdata(
-          &str, scratch_pool, "prev-base-file",
-          svn_client_conflict_get_base_abspath(conflict));
+          &str, scratch_pool, "prev-base-file", base_abspath);
 
         /* "<prev-wc-file> xx </prev-wc-file>" */
         svn_cl__xml_tagged_cdata(
-          &str, scratch_pool, "prev-wc-file",
-          svn_client_conflict_get_my_abspath(conflict));
+          &str, scratch_pool, "prev-wc-file", my_abspath);
 
         /* "<cur-base-file> xx </cur-base-file>" */
         svn_cl__xml_tagged_cdata(
-          &str, scratch_pool, "cur-base-file",
-          svn_client_conflict_get_their_abspath(conflict));
+          &str, scratch_pool, "cur-base-file", their_abspath);
 
         break;
 
       case svn_wc_conflict_kind_property:
         /* "<prop-file> xx </prop-file>" */
         svn_cl__xml_tagged_cdata(
-          &str, scratch_pool, "prop-file",
-          svn_client_conflict_get_their_abspath(conflict));
+          &str, scratch_pool, "prop-file", their_abspath);
         break;
 
       default:

Modified: subversion/branches/fsx-1.10/subversion/svn/cl.h
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/svn/cl.h?rev=1687422&r1=1687421&r2=1687422&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/svn/cl.h (original)
+++ subversion/branches/fsx-1.10/subversion/svn/cl.h Thu Jun 25 08:00:57 2015
@@ -777,15 +777,18 @@ svn_cl__args_to_target_array_print_reser
                                             svn_boolean_t 
keep_dest_origpath_on_truepath_collision,
                                             apr_pool_t *pool);
 
-/* Return a string showing NODE's kind, URL and revision, to the extent that
- * that information is available in NODE. If NODE itself is NULL, this prints
- * just a 'none' node kind.
+/* Return a string showing a conflicted node's kind, URL and revision,
+ * to the extent that that information is available. If REPOS_ROOT_URL or
+ * REPOS_RELPATH are NULL, this prints just a 'none' node kind.
  * WC_REPOS_ROOT_URL should reflect the target working copy's repository
- * root URL. If NODE is from that same URL, the printed URL is abbreviated
+ * root URL. If the node is from that same URL, the printed URL is abbreviated
  * to caret notation (^/). WC_REPOS_ROOT_URL may be NULL, in which case
  * this function tries to print the conflicted node's complete URL. */
 const char *
-svn_cl__node_description(const svn_wc_conflict_version_t *node,
+svn_cl__node_description(const char *repos_root_url,
+                         const char *repos_relpath,
+                         svn_revnum_t peg_rev,
+                         svn_node_kind_t node_kind,
                          const char *wc_repos_root_URL,
                          apr_pool_t *pool);
 

Modified: subversion/branches/fsx-1.10/subversion/svn/conflict-callbacks.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/svn/conflict-callbacks.c?rev=1687422&r1=1687421&r2=1687422&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/svn/conflict-callbacks.c (original)
+++ subversion/branches/fsx-1.10/subversion/svn/conflict-callbacks.c Thu Jun 25 
08:00:57 2015
@@ -141,8 +141,13 @@ show_diff(const svn_wc_conflict_descript
   svn_diff_t *diff;
   svn_stream_t *output;
   svn_diff_file_options_t *options;
+  const char *my_abspath;
+  const char *their_abspath;
   const char *merged_file;
 
+  SVN_ERR(svn_client_conflict_text_get_contents(NULL, &my_abspath, NULL,
+                                                &their_abspath,
+                                                desc, pool, pool));
   merged_file = svn_client_conflict_get_merged_file(desc);
   if (merged_file)
     {
@@ -160,12 +165,12 @@ show_diff(const svn_wc_conflict_descript
        * brought into the working copy by the update/switch/merge operation. */
       if (svn_client_conflict_get_operation(desc) == svn_wc_operation_merge)
         {
-          path1 = svn_client_conflict_get_my_abspath(desc);
+          path1 = my_abspath;
           label1 = _("MINE");
         }
       else
         {
-          path1 = svn_client_conflict_get_their_abspath(desc);
+          path1 = their_abspath;
           label1 = _("THEIRS");
         }
       path2 = merged_file;
@@ -175,9 +180,9 @@ show_diff(const svn_wc_conflict_descript
     {
       /* There's no merged file, but we can show the
          difference between mine and theirs. */
-      path1 = svn_client_conflict_get_their_abspath(desc);
+      path1 = their_abspath;
       label1 = _("THEIRS");
-      path2 = svn_client_conflict_get_my_abspath(desc);
+      path2 = my_abspath;
       label2 = _("MINE");
     }
 
@@ -216,22 +221,22 @@ show_conflicts(const svn_wc_conflict_des
   svn_diff_t *diff;
   svn_stream_t *output;
   svn_diff_file_options_t *options;
-
+  const char *base_abspath;
+  const char *my_abspath;
+  const char *their_abspath;
+
+  SVN_ERR(svn_client_conflict_text_get_contents(NULL, &my_abspath,
+                                                &base_abspath, &their_abspath,
+                                                desc, pool, pool));
   options = svn_diff_file_options_create(pool);
   options->ignore_eol_style = TRUE;
   SVN_ERR(svn_stream_for_stdout(&output, pool));
-  SVN_ERR(svn_diff_file_diff3_2(&diff,
-                                svn_client_conflict_get_base_abspath(desc),
-                                svn_client_conflict_get_my_abspath(desc),
-                                svn_client_conflict_get_their_abspath(desc),
+  SVN_ERR(svn_diff_file_diff3_2(&diff, base_abspath, my_abspath, their_abspath,
                                 options, pool));
   /* ### Consider putting the markers/labels from
      ### svn_wc__merge_internal in the conflict description. */
   return svn_diff_file_output_merge3(
-           output, diff,
-           svn_client_conflict_get_base_abspath(desc),
-           svn_client_conflict_get_my_abspath(desc),
-           svn_client_conflict_get_their_abspath(desc),
+           output, diff, base_abspath, my_abspath, their_abspath,
            _("||||||| ORIGINAL"),
            _("<<<<<<< MINE (select with 'mc')"),
            _(">>>>>>> THEIRS (select with 'tc')"),
@@ -245,61 +250,49 @@ show_conflicts(const svn_wc_conflict_des
 /* Perform a 3-way merge of the conflicting values of a property,
  * and write the result to the OUTPUT stream.
  *
- * If MERGED_ABSPATH is non-NULL, use it as 'my' version instead of
- * DESC->MY_ABSPATH.
+ * If MERGED_PROPVAL is non-NULL, use it as 'my' version instead of
+ * MY_ABSPATH.
  *
  * Assume the values are printable UTF-8 text.
  */
 static svn_error_t *
 merge_prop_conflict(svn_stream_t *output,
-                    const svn_wc_conflict_description2_t *desc,
-                    const char *merged_abspath,
+                    const svn_string_t *base_propval,
+                    const svn_string_t *my_propval,
+                    const svn_string_t *their_propval,
+                    const svn_string_t *merged_propval,
                     svn_cancel_func_t cancel_func,
                     void *cancel_baton,
                     apr_pool_t *pool)
 {
-  const char *base_abspath = svn_client_conflict_get_base_abspath(desc);
-  const char *my_abspath = svn_client_conflict_get_my_abspath(desc);
-  const char *their_abspath = svn_client_conflict_get_their_abspath(desc);
   svn_diff_file_options_t *options = svn_diff_file_options_create(pool);
   svn_diff_t *diff;
 
-  /* If any of the property values is missing, use an empty file instead
+  /* If any of the property values is missing, use an empty value instead
    * for the purpose of showing a diff. */
-  if (! base_abspath || ! my_abspath || ! their_abspath)
-    {
-      const char *empty_file;
-
-      SVN_ERR(svn_io_open_unique_file3(NULL, &empty_file,
-                                       NULL, svn_io_file_del_on_pool_cleanup,
-                                       pool, pool));
-      if (! base_abspath)
-        base_abspath = empty_file;
-      if (! my_abspath)
-        my_abspath = empty_file;
-      if (! their_abspath)
-        their_abspath = empty_file;
-    }
-
+  if (base_propval == NULL)
+    base_propval = svn_string_create_empty(pool);
+  if (my_propval == NULL)
+    my_propval = svn_string_create_empty(pool);
+  if (my_propval == NULL)
+    my_propval = svn_string_create_empty(pool);
+    
   options->ignore_eol_style = TRUE;
-  SVN_ERR(svn_diff_file_diff3_2(&diff,
-                                base_abspath,
-                                merged_abspath ? merged_abspath : my_abspath,
-                                their_abspath,
-                                options, pool));
-  SVN_ERR(svn_diff_file_output_merge3(output, diff,
-                                      base_abspath,
-                                      merged_abspath ? merged_abspath
-                                                     : my_abspath,
-                                      their_abspath,
-                                      _("||||||| ORIGINAL"),
-                                      _("<<<<<<< MINE"),
-                                      _(">>>>>>> THEIRS"),
-                                      "=======",
-                                      
svn_diff_conflict_display_modified_original_latest,
-                                      cancel_func,
-                                      cancel_baton,
-                                      pool));
+  SVN_ERR(svn_diff_mem_string_diff3(&diff, base_propval,
+                                    merged_propval ?
+                                      merged_propval : my_propval,
+                                    their_propval, options, pool));
+  SVN_ERR(svn_diff_mem_string_output_merge3(
+            output, diff, base_propval,
+            merged_propval ? merged_propval : my_propval, their_propval,
+            _("||||||| ORIGINAL"),
+            _("<<<<<<< MINE"),
+            _(">>>>>>> THEIRS"),
+            "=======",
+            svn_diff_conflict_display_modified_original_latest,
+            cancel_func,
+            cancel_baton,
+            pool));
 
   return SVN_NO_ERROR;
 }
@@ -312,8 +305,10 @@ merge_prop_conflict(svn_stream_t *output
  * Assume the values are printable UTF-8 text.
  */
 static svn_error_t *
-show_prop_conflict(const svn_wc_conflict_description2_t *desc,
-                   const char *merged_abspath,
+show_prop_conflict(const svn_string_t *base_propval,
+                   const svn_string_t *my_propval,
+                   const svn_string_t *their_propval,
+                   const svn_string_t *merged_propval,
                    svn_cancel_func_t cancel_func,
                    void *cancel_baton,
                    apr_pool_t *pool)
@@ -321,8 +316,8 @@ show_prop_conflict(const svn_wc_conflict
   svn_stream_t *output;
 
   SVN_ERR(svn_stream_for_stdout(&output, pool));
-  SVN_ERR(merge_prop_conflict(output, desc, merged_abspath,
-                              cancel_func, cancel_baton, pool));
+  SVN_ERR(merge_prop_conflict(output, base_propval, my_propval, their_propval,
+                              merged_propval, cancel_func, cancel_baton, 
pool));
 
   return SVN_NO_ERROR;
 }
@@ -371,12 +366,18 @@ open_editor(svn_boolean_t *performed_edi
   return SVN_NO_ERROR;
 }
 
-/* Run an external editor, passing it the 'merged' property in DESC.
+/* Run an external editor on the merged property value with conflict markers.
+ * Return the path to a file containing the edited result in *MERGED_FILE_PATH
+ * and also return the resulting property value in *MERGED_RPOPVAL.
+ * If the edit is aborted, set *MERGED_FILE_PATH and *MERGED_PROPVAL to NULL.
  * The tool to use is determined by B->editor_cmd, B->config and
  * environment variables; see svn_cl__edit_file_externally() for details. */
 static svn_error_t *
 edit_prop_conflict(const char **merged_file_path,
-                   const svn_wc_conflict_description2_t *desc,
+                   const svn_string_t **merged_propval,
+                   const svn_string_t *base_propval,
+                   const svn_string_t *my_propval,
+                   const svn_string_t *their_propval,
                    svn_cl__interactive_conflict_baton_t *b,
                    apr_pool_t *result_pool,
                    apr_pool_t *scratch_pool)
@@ -391,14 +392,28 @@ edit_prop_conflict(const char **merged_f
                                    result_pool, scratch_pool));
   merged_prop = svn_stream_from_aprfile2(file, TRUE /* disown */,
                                          scratch_pool);
-  SVN_ERR(merge_prop_conflict(merged_prop, desc, NULL,
+  SVN_ERR(merge_prop_conflict(merged_prop, base_propval, my_propval,
+                              their_propval, NULL,
                               b->pb->cancel_func,
                               b->pb->cancel_baton,
                               scratch_pool));
   SVN_ERR(svn_stream_close(merged_prop));
   SVN_ERR(svn_io_file_flush(file, scratch_pool));
   SVN_ERR(open_editor(&performed_edit, file_path, b, scratch_pool));
-  *merged_file_path = (performed_edit ? file_path : NULL);
+  if (performed_edit)
+    {
+      svn_stringbuf_t *buf;
+
+      *merged_file_path = file_path;
+
+      SVN_ERR(svn_stringbuf_from_file2(&buf, file_path, scratch_pool));
+      *merged_propval = svn_string_create_from_buf(buf, result_pool); 
+    }
+  else
+    {
+      *merged_file_path = NULL;
+      *merged_propval = NULL;
+    }
 
   return SVN_NO_ERROR;
 }
@@ -716,14 +731,17 @@ handle_text_conflict(svn_wc_conflict_res
   svn_boolean_t knows_something = FALSE;
   const char *local_relpath;
   const char *local_abspath = svn_client_conflict_get_local_abspath(desc);
-  svn_boolean_t is_binary = svn_client_conflict_get_is_binary(desc);
-  const char *base_abspath = svn_client_conflict_get_base_abspath(desc);
-  const char *my_abspath = svn_client_conflict_get_my_abspath(desc);
-  const char *their_abspath = svn_client_conflict_get_their_abspath(desc);
+  svn_boolean_t is_binary = svn_mime_type_is_binary(
+                              svn_client_conflict_text_get_mime_type(desc));
+  const char *base_abspath;
+  const char *my_abspath;
+  const char *their_abspath;
   const char *merged_file = svn_client_conflict_get_merged_file(desc);
 
-  SVN_ERR_ASSERT(svn_client_conflict_get_kind(desc) ==
-                 svn_wc_conflict_kind_text);
+  SVN_ERR(svn_client_conflict_text_get_contents(NULL, &my_abspath,
+                                                &base_abspath, &their_abspath,
+                                                desc, scratch_pool,
+                                                scratch_pool));
 
   local_relpath = svn_cl__local_style_skip_ancestor(b->path_prefix,
                                                     local_abspath,
@@ -1036,21 +1054,20 @@ handle_prop_conflict(svn_wc_conflict_res
   apr_pool_t *iterpool;
   const char *message;
   const char *merged_file_path = NULL;
+  const svn_string_t *merged_propval = NULL;
   svn_boolean_t resolved_allowed = FALSE;
-
-  /* ### Work around a historical bug in the provider: the path to the
-   *     conflict description file was put in the 'theirs' field, and
-   *     'theirs' was put in the 'merged' field. */
-  ((svn_wc_conflict_description2_t *)desc)->their_abspath = desc->merged_file;
-  ((svn_wc_conflict_description2_t *)desc)->merged_file = NULL;
-
-  SVN_ERR_ASSERT(svn_client_conflict_get_kind(desc) ==
-                 svn_wc_conflict_kind_property);
+  const svn_string_t *base_propval;
+  const svn_string_t *my_propval;
+  const svn_string_t *their_propval;
+
+  SVN_ERR(svn_client_conflict_prop_get_propvals(NULL, &my_propval,
+                                                &base_propval, &their_propval,
+                                                desc, scratch_pool));
 
   SVN_ERR(svn_cmdline_fprintf(stderr, scratch_pool,
                               _("Conflict for property '%s' discovered"
                                 " on '%s'.\n"),
-                              svn_client_conflict_get_property_name(desc),
+                              svn_client_conflict_prop_get_propname(desc),
                               svn_cl__local_style_skip_ancestor(
                                 b->path_prefix,
                                 svn_client_conflict_get_local_abspath(desc),
@@ -1094,15 +1111,17 @@ handle_prop_conflict(svn_wc_conflict_res
         }
       else if (strcmp(opt->code, "dc") == 0)
         {
-          SVN_ERR(show_prop_conflict(desc, merged_file_path,
+          SVN_ERR(show_prop_conflict(base_propval, my_propval, their_propval,
+                                     merged_propval,
                                      b->pb->cancel_func, b->pb->cancel_baton,
                                      scratch_pool));
         }
       else if (strcmp(opt->code, "e") == 0)
         {
-          SVN_ERR(edit_prop_conflict(&merged_file_path, desc, b,
-                                     result_pool, scratch_pool));
-          resolved_allowed = (merged_file_path != NULL);
+          SVN_ERR(edit_prop_conflict(&merged_file_path, &merged_propval,
+                                     base_propval, my_propval, their_propval,
+                                     b, result_pool, scratch_pool));
+          resolved_allowed = (merged_propval != NULL);
         }
       else if (strcmp(opt->code, "r") == 0)
         {
@@ -1142,6 +1161,10 @@ handle_tree_conflict(svn_wc_conflict_res
   const char *readable_desc;
   const char *src_left_version;
   const char *src_right_version;
+  const char *repos_root_url;
+  const char *repos_relpath;
+  svn_revnum_t peg_rev;
+  svn_node_kind_t node_kind;
   apr_pool_t *iterpool;
 
   SVN_ERR(svn_cl__get_human_readable_tree_conflict_description(
@@ -1153,19 +1176,30 @@ handle_tree_conflict(svn_wc_conflict_res
                  svn_client_conflict_get_local_abspath(desc), scratch_pool),
                readable_desc));
 
+  SVN_ERR(svn_client_conflict_get_repos_info(&repos_root_url, NULL,
+                                             desc, scratch_pool, 
scratch_pool));
+  SVN_ERR(svn_client_conflict_get_incoming_old_repos_location(&repos_relpath,
+                                                              &peg_rev,
+                                                              &node_kind,
+                                                              desc,
+                                                              scratch_pool,
+                                                              scratch_pool));
   src_left_version =
-              svn_cl__node_description(
-                svn_client_conflict_get_src_left_version(desc),
-                svn_client_conflict_get_src_left_version(desc)->repos_url,
-                scratch_pool);
+              svn_cl__node_description(repos_root_url, repos_relpath, peg_rev,
+                                       node_kind, repos_root_url, 
scratch_pool);
   if (src_left_version)
     SVN_ERR(svn_cmdline_fprintf(stderr, scratch_pool, "%s: %s\n",
                                 _("Source  left"), src_left_version));
+
+  SVN_ERR(svn_client_conflict_get_incoming_new_repos_location(&repos_relpath,
+                                                              &peg_rev,
+                                                              &node_kind,
+                                                              desc,
+                                                              scratch_pool,
+                                                              scratch_pool));
   src_right_version =
-              svn_cl__node_description(
-                svn_client_conflict_get_src_right_version(desc),
-                svn_client_conflict_get_src_right_version(desc)->repos_url,
-                scratch_pool);
+              svn_cl__node_description(repos_root_url, repos_relpath, peg_rev,
+                                       node_kind, repos_root_url, 
scratch_pool);
   if (src_right_version)
     SVN_ERR(svn_cmdline_fprintf(stderr, scratch_pool, "%s: %s\n",
                                 _("Source right"), src_right_version));
@@ -1195,7 +1229,8 @@ handle_tree_conflict(svn_wc_conflict_res
             {
               if (svn_client_conflict_get_incoming_change(desc) ==
                   svn_wc_conflict_action_edit &&
-                  svn_client_conflict_get_node_kind(desc) == svn_node_dir)
+                  svn_client_conflict_tree_get_victim_node_kind(desc) ==
+                  svn_node_dir)
                 tc_opts = tree_conflict_options_update_edit_deleted_dir;
             }
         }
@@ -1232,11 +1267,18 @@ conflict_func_interactive(svn_wc_conflic
 {
   svn_cl__interactive_conflict_baton_t *b = baton;
   svn_error_t *err;
-  const char *base_abspath = svn_client_conflict_get_base_abspath(desc);
-  const char *my_abspath = svn_client_conflict_get_my_abspath(desc);
-  const char *their_abspath = svn_client_conflict_get_their_abspath(desc);
+  const char *base_abspath = NULL;
+  const char *my_abspath = NULL;
+  const char *their_abspath = NULL;
   const char *merged_file = svn_client_conflict_get_merged_file(desc);
 
+  if (svn_client_conflict_get_kind(desc) == svn_wc_conflict_kind_text)
+    SVN_ERR(svn_client_conflict_text_get_contents(NULL, &my_abspath,
+                                                  &base_abspath,
+                                                  &their_abspath,
+                                                  desc, scratch_pool,
+                                                  scratch_pool));
+
   /* Start out assuming we're going to postpone the conflict. */
   *result = svn_wc_create_conflict_result(svn_wc_conflict_choose_postpone,
                                           NULL, result_pool);

Modified: subversion/branches/fsx-1.10/subversion/svn/info-cmd.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/svn/info-cmd.c?rev=1687422&r1=1687421&r2=1687422&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/svn/info-cmd.c (original)
+++ subversion/branches/fsx-1.10/subversion/svn/info-cmd.c Thu Jun 25 08:00:57 
2015
@@ -581,8 +581,8 @@ print_info(void *baton,
 
       if (info->wc_info->conflicts)
         {
-          svn_boolean_t printed_prop_conflict_file = FALSE;
           svn_boolean_t printed_tc = FALSE;
+          svn_stringbuf_t *conflicted_props = NULL;
           int i;
 
           for (i = 0; i < info->wc_info->conflicts->nelts; i++)
@@ -591,17 +591,18 @@ print_info(void *baton,
                     APR_ARRAY_IDX(info->wc_info->conflicts, i,
                                   const svn_wc_conflict_description2_t *);
               const char *desc;
-              const char *base_abspath;
-              const char *my_abspath;
-              const char *their_abspath;
-
-              base_abspath = svn_client_conflict_get_base_abspath(conflict);
-              my_abspath = svn_client_conflict_get_my_abspath(conflict);
-              their_abspath = svn_client_conflict_get_their_abspath(conflict);
+              const char *base_abspath = NULL;
+              const char *my_abspath = NULL;
+              const char *their_abspath = NULL;
 
               switch (svn_client_conflict_get_kind(conflict))
                 {
                   case svn_wc_conflict_kind_text:
+
+                    SVN_ERR(svn_client_conflict_text_get_contents(
+                              NULL, &my_abspath, &base_abspath, &their_abspath,
+                              conflict, pool, pool));
+
                     if (base_abspath)
                       SVN_ERR(svn_cmdline_printf(pool,
                                 _("Conflict Previous Base File: %s\n"),
@@ -628,15 +629,18 @@ print_info(void *baton,
                   break;
 
                   case svn_wc_conflict_kind_property:
-                    if (! printed_prop_conflict_file)
-                      SVN_ERR(svn_cmdline_printf(pool,
-                                _("Conflict Properties File: %s\n"),
-                                svn_cl__local_style_skip_ancestor(
-                                  receiver_baton->path_prefix,
-                                  svn_client_conflict_get_prop_reject_abspath(
-                                    conflict),
-                                  pool)));
-                    printed_prop_conflict_file = TRUE;
+                    {
+                      const char *name;
+
+                      name = svn_client_conflict_prop_get_propname(conflict);
+                      if (conflicted_props == NULL)
+                        conflicted_props = svn_stringbuf_create(name, pool);
+                      else
+                        {
+                          svn_stringbuf_appendbyte(conflicted_props, ' ');
+                          svn_stringbuf_appendcstr(conflicted_props, name);
+                        }
+                    }
                   break;
 
                   case svn_wc_conflict_kind_tree:
@@ -651,6 +655,10 @@ print_info(void *baton,
                 }
             }
 
+          if (conflicted_props)
+            SVN_ERR(svn_cmdline_printf(pool, _("Conflicted Properties: %s\n"),
+                                       conflicted_props->data));
+
           /* We only store one left and right version for all conflicts, which 
is
              referenced from all conflicts.
              Print it after the conflicts to match the 1.6/1.7 output where it 
is
@@ -658,6 +666,10 @@ print_info(void *baton,
           {
             const char *src_left_version;
             const char *src_right_version;
+            const char *repos_root_url;
+            const char *repos_relpath;
+            svn_revnum_t peg_rev;
+            svn_node_kind_t node_kind;
             const svn_wc_conflict_description2_t *conflict =
                   APR_ARRAY_IDX(info->wc_info->conflicts, 0,
                                 const svn_wc_conflict_description2_t *);
@@ -669,21 +681,28 @@ print_info(void *baton,
                 SVN_ERR(svn_cl__get_human_readable_action_description(&desc,
                           svn_wc_conflict_action_edit,
                           svn_client_conflict_get_operation(conflict),
-                          svn_client_conflict_get_node_kind(conflict), pool));
+                          info->kind,
+                          pool));
 
                 SVN_ERR(svn_cmdline_printf(pool, "%s: %s\n",
                                                _("Conflict Details"), desc));
               }
 
+            SVN_ERR(svn_client_conflict_get_repos_info(&repos_root_url, NULL,
+                                                       conflict, pool, pool));
+            SVN_ERR(svn_client_conflict_get_incoming_old_repos_location(
+                      &repos_relpath, &peg_rev, &node_kind, conflict,
+                      pool, pool));
             src_left_version =
-                        svn_cl__node_description(
-                          svn_client_conflict_get_src_left_version(conflict),
-                          info->repos_root_URL, pool);
+                        svn_cl__node_description(repos_root_url, repos_relpath,
+                          peg_rev, node_kind, info->repos_root_URL, pool);
 
+            SVN_ERR(svn_client_conflict_get_incoming_new_repos_location(
+                      &repos_relpath, &peg_rev, &node_kind, conflict,
+                      pool, pool));
             src_right_version =
-                        svn_cl__node_description(
-                          svn_client_conflict_get_src_right_version(conflict),
-                          info->repos_root_URL, pool);
+                        svn_cl__node_description(repos_root_url, repos_relpath,
+                          peg_rev, node_kind, info->repos_root_URL, pool);
 
             if (src_left_version)
               SVN_ERR(svn_cmdline_printf(pool, "  %s: %s\n",

Modified: subversion/branches/fsx-1.10/subversion/svn/util.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/svn/util.c?rev=1687422&r1=1687421&r2=1687422&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/svn/util.c (original)
+++ subversion/branches/fsx-1.10/subversion/svn/util.c Thu Jun 25 08:00:57 2015
@@ -907,14 +907,17 @@ svn_cl__time_cstring_to_human_cstring(co
 }
 
 const char *
-svn_cl__node_description(const svn_wc_conflict_version_t *node,
+svn_cl__node_description(const char *repos_root_url,
+                         const char *repos_relpath,
+                         svn_revnum_t peg_rev,
+                         svn_node_kind_t node_kind,
                          const char *wc_repos_root_URL,
                          apr_pool_t *pool)
 {
   const char *root_str = "^";
   const char *path_str = "...";
 
-  if (!node)
+  if (!repos_root_url || !repos_relpath || !SVN_IS_VALID_REVNUM(peg_rev))
     /* Printing "(none)" the harder way to ensure conformity (mostly with
      * translations). */
     return apr_psprintf(pool, "(%s)",
@@ -923,18 +926,18 @@ svn_cl__node_description(const svn_wc_co
   /* Construct a "caret notation" ^/URL if NODE matches WC_REPOS_ROOT_URL.
    * Otherwise show the complete URL, and if we can't, show dots. */
 
-  if (node->repos_url &&
+  if (repos_root_url &&
       (wc_repos_root_URL == NULL ||
-       strcmp(node->repos_url, wc_repos_root_URL) != 0))
-    root_str = node->repos_url;
+       strcmp(repos_root_url, wc_repos_root_URL) != 0))
+    root_str = repos_root_url;
 
-  if (node->path_in_repos)
-    path_str = node->path_in_repos;
+  if (repos_relpath)
+    path_str = repos_relpath;
 
   return apr_psprintf(pool, "(%s) %s@%ld",
-                      svn_cl__node_kind_str_human_readable(node->node_kind),
+                      svn_cl__node_kind_str_human_readable(node_kind),
                       svn_path_url_add_component2(root_str, path_str, pool),
-                      node->peg_rev);
+                      peg_rev);
 }
 
 svn_error_t *

Modified: 
subversion/branches/fsx-1.10/subversion/tests/cmdline/merge_tree_conflict_tests.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/merge_tree_conflict_tests.py?rev=1687422&r1=1687421&r2=1687422&view=diff
==============================================================================
--- 
subversion/branches/fsx-1.10/subversion/tests/cmdline/merge_tree_conflict_tests.py
 (original)
+++ 
subversion/branches/fsx-1.10/subversion/tests/cmdline/merge_tree_conflict_tests.py
 Thu Jun 25 08:00:57 2015
@@ -2012,9 +2012,7 @@ def merge_conflict_details(sbox):
   expected_info = [
     {
       "Path" : re.escape(sbox.ospath('B')),
-
-      "Conflict Properties File" :
-            re.escape(sbox.ospath('B/dir_conflicts.prej')) + '.*',
+      "Conflicted Properties" : "key",
       "Conflict Details": re.escape(
             'incoming dir edit upon merge' +
             ' Source  left: (dir) ^/A/B@1' +
@@ -2124,18 +2122,16 @@ def merge_obstruction_recording(sbox):
   })
   expected_mergeinfo_output = wc.State(wc_dir, {
     ''             : Item(status=' U'),
-    'dir'          : Item(status=' U'), # Because dir already exists
   })
   expected_elision_output = wc.State(wc_dir, {
   })
   expected_disk = wc.State('', {
     'dir/file.txt' : Item(contents="The file on branch\n"),
-    'dir'          : Item(props={'svn:mergeinfo':''}),
     '.'            : Item(props={'svn:mergeinfo':'/trunk:2-4'}),
   })
   expected_status = wc.State(wc_dir, {
     ''             : Item(status=' M', wc_rev='4'),
-    'dir'          : Item(status=' M', treeconflict='C', wc_rev='4'),
+    'dir'          : Item(status='  ', treeconflict='C', wc_rev='4'),
     'dir/file.txt' : Item(status='  ', wc_rev='4'),
   })
   expected_skip = wc.State('', {
@@ -2172,7 +2168,7 @@ def merge_obstruction_recording(sbox):
   expected_output = [
     '--- Recording mergeinfo for merge of r4 into \'%s\':\n' % \
             sbox.ospath('dir'),
-    ' G   %s\n' % sbox.ospath('dir'),
+    ' U   %s\n' % sbox.ospath('dir'),
   ]
   # ### Why are r1-r3 not recorded?
   # ### Guess: Because dir's history only exists since r4.


Reply via email to