On Tue, Jan 19, 2010 at 04:01:47PM +0100, Daniel Näslund wrote:
> Ping!
> 
> This patch hasn't been reviewed.

I'll leave this to externals/wc-ng experts to commit.

Small review:

> > @@ -69,5 +76,78 @@
> >                           ctx->notify_func2, ctx->notify_baton2,
> >                           scratch_pool));
> >  
> > +  /* Now it's time to upgrade the externals too. We do it after the wc 
> > +     upgrade to avoid that errors in the externals causes the wc upgrade to

s/causes/cause/

> > +     fail. Thanks to caching the performance penalty of walking the wc a 
> > +     second time shouldn't be too severe */
> > +  SVN_ERR(svn_client_propget3(&externals, SVN_PROP_EXTERNALS, path, &rev, 
> > +                              &rev, NULL, svn_depth_infinity, NULL, ctx, 
> > +                              scratch_pool));
> > +
> > +  iterpool = svn_pool_create(scratch_pool);
> > +
> > +  for (hi = apr_hash_first(scratch_pool, externals); hi; 
> > +       hi = apr_hash_next(hi))
> > +    {
> > +      const char *key;
> > +      int i;
> > +      apr_ssize_t klen;
> > +      svn_string_t *external_desc;
> > +      apr_array_header_t *externals_p;
> > +      
> > +      svn_pool_clear(iterpool);
> > +      externals_p = apr_array_make(iterpool, 1,
> > +                                   sizeof(svn_wc_external_item2_t*));
> > +
> > +      apr_hash_this(hi, (void*)&key, &klen, NULL);
> > +
> > +      external_desc = apr_hash_get(externals, key, klen);
> > +
> > +      SVN_ERR(svn_wc_parse_externals_description3(&externals_p, 
> > +                                            svn_dirent_dirname(path, 
> > +                                                               iterpool),
> > +                                                  external_desc->data, 
> > TRUE,
> > +                                                  iterpool));

Maybe indent the above like this:

      SVN_ERR(svn_wc_parse_externals_description3(
                &externals_p, 
                svn_dirent_dirname(path, iterpool),
                external_desc->data, TRUE,
                iterpool));

> > +      for (i = 0; i < externals_p->nelts; i++)
> > +        {
> > +          svn_wc_external_item2_t *item;
> > +          const char *external_abspath;
> > +          const char *external_path;
> > +          svn_node_kind_t kind;
> > +          svn_error_t *err;
> > +
> > +          item = APR_ARRAY_IDX(externals_p, i, svn_wc_external_item2_t*);
> > +
> > +          /* The key is the path to the dir the svn:externals was set on */
> > +          external_path = svn_dirent_join(key, item->target_dir, iterpool);
> > +
> > +          SVN_ERR(svn_dirent_get_absolute(&external_abspath, external_path,
> > +                                          iterpool));
> > +
> > +          /* This is hack. We can only send dirs to svn_wc_upgrade(). This
> > +             way we will get an exception saying that the wc must be
> > +             upgraded if it's a dir. If it's a file then the lookup is done
> > +             in an adm_dir belonging to the real wc and since that was
> > +             updated before the externals no error is returned. */
> > +          err = svn_wc__node_get_kind(&kind, ctx->wc_ctx, external_abspath,
> > +                                        FALSE, iterpool);
> > +
> > +          if (err && err->apr_err == SVN_ERR_WC_UPGRADE_REQUIRED)
> > +            {
> > +              SVN_ERR(svn_wc_upgrade(ctx->wc_ctx, external_abspath,
> > +                                     ctx->cancel_func, ctx->cancel_baton,
> > +                                     ctx->notify_func2, ctx->notify_baton2,
> > +                                     iterpool));
> > +              svn_error_clear(err);
> > +            }
> > +          else if (err)
> > +            return svn_error_return(err);
> > +          else
> > +            ;

You can replace the 'else if (err) ... else ;' with just:

 else
  SVN_ERR(err);

Stefan

> > +        }
> > +    }
> > +
> > +  svn_pool_destroy(iterpool);
> > +
> >    return SVN_NO_ERROR;
> >  }

-- 
printf("Eh???/n");

Reply via email to