TL;DR: Fixed and nominated for backport.

I see it was a change I made that broke this case.

Filed as: http://subversion.apache.org/issue/4837

Test added: http://svn.apache.org/r1870393

More below...

Nathan Hartman wrote:
[...]
(1) This line in svn_client_info4():

   SVN_ERR(same_resource_in_head(&related, pathrev->url, pathrev->rev,
                                 ra_session, ctx, pool));

     would terminate if any error occurs in same_resource_in_head().
     Perhaps we should: check the specific error code; consider certain
     error codes as signifying that the object is not locked, set
     lock = NULL, and proceed?

(2) Alternately, perhaps svn_client_info4() should remain as-is and
     instead same_resource_in_head() should change: Maybe under certain
     conditions that currently return an error, it should instead
     set *same_p = FALSE and return SVN_NO_ERROR?

Yes, (2): it already checks for two error codes:

      ((err->apr_err == SVN_ERR_CLIENT_UNRELATED_RESOURCES) ||
       (err->apr_err == SVN_ERR_FS_NOT_FOUND)))

we need to add:

       (err->apr_err == SVN_ERR_FS_NOT_DIRECTORY) ||

Fixed: http://svn.apache.org/r1870395

This does beg the question of what is the total set of possible failure modes that should be handled the same way.

We really ought to:
  * do random testing (svn info on all sorts of combinations of paths)
  * group error codes better so we don't have to guess what ones to expect

(4) Optimization: Currently same_resource_in_head() is being called
     unconditionally. Perhaps this should not be called at all if there
     are no locks?

Someone could look into the pros and cons of switching the order (query for locks first, then check relatedness) as a separate exercise. We currently have no indication that would be an optimization in general; it would be different in different cases. There are cases like recursive info request to consider. It doesn't sound like a priority.


While those follow-ups remain possible, the basic issue is fixed.

Nominated for backport to 1.10 and 1.13.

- Julian

Reply via email to