Author: rhuijben
Date: Thu Jul  1 20:15:01 2010
New Revision: 959766

URL: http://svn.apache.org/viewvc?rev=959766&view=rev
Log:
Following up on r959270 and r959735, tweak information retrieval
for svn_client_info3().

* subversion/libsvn_client/info.c
  (build_info_for_entry): Don't try to build info for a 'hidden' node,
    to fail later.
  (info_found_node_callback): Just expect the specific error from
    build_info_for_entry() and resolve an error leak.

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

Modified: subversion/trunk/subversion/libsvn_client/info.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/info.c?rev=959766&r1=959765&r2=959766&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/info.c (original)
+++ subversion/trunk/subversion/libsvn_client/info.c Thu Jul  1 20:15:01 2010
@@ -87,15 +87,25 @@ build_info_for_entry(svn_info_t **info,
                      const char *local_abspath,
                      apr_pool_t *pool)
 {
-  svn_info_t *tmpinfo = apr_pcalloc(pool, sizeof(*tmpinfo));
+  svn_info_t *tmpinfo;
   const char *copyfrom_url;
   svn_revnum_t copyfrom_rev;
   svn_boolean_t is_copy_target;
   const char *lock_token, *lock_owner, *lock_comment;
   apr_time_t lock_date;
   const svn_checksum_t *checksum;
+  svn_node_kind_t kind;
+
+  SVN_ERR(svn_wc_read_kind(&kind, wc_ctx, local_abspath, FALSE, pool));
+
+  if (kind == svn_node_none)
+    return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
+                             _("The node '%s' was not found."),
+                             svn_dirent_local_style(local_abspath, pool));
+
+  tmpinfo = apr_pcalloc(pool, sizeof(*tmpinfo));
+  tmpinfo->kind = kind;
 
-  SVN_ERR(svn_wc_read_kind(&tmpinfo->kind, wc_ctx, local_abspath, TRUE, pool));
   SVN_ERR(svn_wc__node_get_url(&tmpinfo->URL, wc_ctx, local_abspath,
                                pool, pool));
 
@@ -335,15 +345,23 @@ info_found_node_callback(const char *loc
 
       err = build_info_for_entry(&info, fe_baton->wc_ctx, local_abspath,
                                  pool);
-      if (err && (err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND
-                  || err->apr_err == SVN_ERR_ENTRY_NOT_FOUND))
+      if (err && (err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND))
         {
           /* Check for a tree conflict, and if there is one, send a minimal
              info struct. */
           const svn_wc_conflict_description2_t *tree_conflict;
 
-          SVN_ERR(svn_wc__get_tree_conflict(&tree_conflict, fe_baton->wc_ctx,
-                                            local_abspath, pool, pool));
+          {
+            svn_error_t *err2;
+            err2 = svn_wc__get_tree_conflict(&tree_conflict, fe_baton->wc_ctx,
+                                             local_abspath, pool, pool);
+
+            if (err2)
+              {
+                svn_error_clear(err2);
+                tree_conflict = NULL;
+              }
+          }
 
           if (tree_conflict)
             {


Reply via email to