You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by cm...@apache.org on 2010/09/15 21:27:29 UTC

svn commit: r997471 - /subversion/trunk/subversion/libsvn_client/list.c

Author: cmpilato
Date: Wed Sep 15 19:27:29 2010
New Revision: 997471

URL: http://svn.apache.org/viewvc?rev=997471&view=rev
Log:
For issue #3709 ("Inconsistency between "svn list" and "svn
checkout"), ignore authz errors raised when recursing.

* subversion/libsvn_client/list.c
  (get_dir_contents): Catch and ignore SVN_ERR_RA_NOT_AUTHORIZED and
    SVN_ERR_RA_DAV_FORBIDDEN errors returned from the server.

Modified:
    subversion/trunk/subversion/libsvn_client/list.c

Modified: subversion/trunk/subversion/libsvn_client/list.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/list.c?rev=997471&r1=997470&r2=997471&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/list.c (original)
+++ subversion/trunk/subversion/libsvn_client/list.c Wed Sep 15 19:27:29 2010
@@ -63,14 +63,23 @@ get_dir_contents(apr_uint32_t dirent_fie
   apr_hash_t *tmpdirents;
   apr_pool_t *iterpool = svn_pool_create(pool);
   apr_array_header_t *array;
+  svn_error_t *err;
   int i;
 
   if (depth == svn_depth_empty)
     return SVN_NO_ERROR;
 
-  /* Get the directory's entries, but not its props. */
-  SVN_ERR(svn_ra_get_dir2(ra_session, &tmpdirents, NULL, NULL,
-                          dir, rev, dirent_fields, pool));
+  /* Get the directory's entries, but not its props.  Ignore any
+     not-authorized errors.  */
+  err = svn_ra_get_dir2(ra_session, &tmpdirents, NULL, NULL,
+                        dir, rev, dirent_fields, pool);
+  if (err && ((err->apr_err == SVN_ERR_RA_NOT_AUTHORIZED) ||
+              (err->apr_err == SVN_ERR_RA_DAV_FORBIDDEN)))
+    {
+      svn_error_clear(err);
+      return SVN_NO_ERROR;
+    }
+  SVN_ERR(err);
 
   if (ctx->cancel_func)
     SVN_ERR(ctx->cancel_func(ctx->cancel_baton));