On Thu, Dec 17, 2009 at 08:40:15PM +0100, Daniel Näslund wrote:
> Hi!
> 
> NOTE: This patch depends on my patch for #3390 that has not been
> commited yet [1]. The external_func uses abspaths and that is fixed in
> the referred patch. I have two more patches that depend on [1].
> 
> make check passes with [1] applied.

I'm travelling, and because I am being disorganised I don't have [1]
in my mailbox right now. So I cannot reply there. Sorry about messing
up the threading.

Reviewing [1]:

> @@ -1193,19 +1196,30 @@
>    ib.pool              = cb->pool;
>    ib.iter_pool         = svn_pool_create(cb->pool);
>  
> -  /* Get the URL of the parent directory by appending a portion of
> -     parent_dir to from_url.  from_url is the URL for to_path and
> -     to_path is a substring of parent_dir, so append any characters in
> -     parent_dir past strlen(to_path) to from_url (making sure to move
> -     past a '/' in parent_dir, otherwise svn_path_url_add_component()
> -     will error. */
> -  len = strlen(cb->to_path);
> -  if (ib.parent_dir[len] == '/')
> -    ++len;
> -  ib.parent_dir_url = svn_path_url_add_component2(cb->from_url,
> -                                                  ib.parent_dir + len,
> -                                                  cb->pool);
> +  SVN_ERR(svn_dirent_get_absolute(&abs_parent_dir, ib.parent_dir, 
> +                                  cb->pool));
>  
> +  err = svn_wc__node_get_url(&url, cb->ctx->wc_ctx, 
> +                             abs_parent_dir, cb->pool, cb->pool);
> +  ib.parent_dir_url = url;

I'd rather put "ib.parent_dir_url = url;" into a final 'else' clause
of the following if statement.

> +
> +  if (err)
> +    {
> +      /* Get the URL of the parent directory by appending a portion of
> +         parent_dir to from_url.  from_url is the URL for to_path and
> +         to_path is a substring of parent_dir, so append any characters in
> +         parent_dir past strlen(to_path) to from_url (making sure to move
> +         past a '/' in parent_dir, otherwise svn_path_url_add_component()
> +         will error. */
> +      len = strlen(cb->to_path);
> +      if (ib.parent_dir[len] == '/')
> +        ++len;
> +      ib.parent_dir_url = svn_path_url_add_component2(cb->from_url,
> +                                                      ib.parent_dir + len,
> +                                                      cb->pool);
> +      svn_error_clear(err);
> +    }

The above ignores any error returned from svn_wc__node_get_url().
Usually, we only ignore specific errors, and pass others back to the caller.
The idiom goes like this:

if (err)
  {
    if (err->apr_err == ...)
      {
        /* ignore this */
        svn_error_clear(err);
      }
    else
      SVN_ERR(err);
  }

Any reason why you made this code ignore all errors?

Stefan

Reply via email to