Author: cmpilato Date: Fri Jun 10 23:12:03 2011 New Revision: 1134473 URL: http://svn.apache.org/viewvc?rev=1134473&view=rev Log: Fix issue #3904 ("serf regression test failures with v1 protocol").
* subversion/libsvn_ra_serf/commit.c (checkout_dir, checkout_file): Look all the way up the parent_dir baton stack for an added directory, not just at the immediate parent. (NOTE: In retrospect, there's room for improvement here by having each parent directory baton stash a boolean flag indicating that it is the descendent of an added directory, left as an exercise for a future commit.) Modified: subversion/trunk/subversion/libsvn_ra_serf/commit.c Modified: subversion/trunk/subversion/libsvn_ra_serf/commit.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_serf/commit.c?rev=1134473&r1=1134472&r2=1134473&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_ra_serf/commit.c (original) +++ subversion/trunk/subversion/libsvn_ra_serf/commit.c Fri Jun 10 23:12:03 2011 @@ -355,17 +355,19 @@ checkout_dir(dir_context_t *dir) checkout_context_t *checkout_ctx; svn_ra_serf__handler_t *handler; svn_error_t *err; + dir_context_t *parent_dir = dir->parent_dir; if (dir->checkout) { return SVN_NO_ERROR; } - if (dir->parent_dir) + /* Is one of our parent dirs newly added? If so, we're already + * implicitly checked out. + */ + while (parent_dir) { - /* Is our parent newly added? If so, we're already implicitly checked - * out. */ - if (dir->parent_dir->added) + if (parent_dir->added) { /* Implicitly checkout this dir now. */ dir->checkout = apr_pcalloc(dir->pool, sizeof(*dir->checkout)); @@ -378,6 +380,7 @@ checkout_dir(dir_context_t *dir) return SVN_NO_ERROR; } + parent_dir = parent_dir->parent_dir; } /* Checkout our directory into the activity URL now. */ @@ -543,28 +546,28 @@ checkout_file(file_context_t *file) { svn_ra_serf__handler_t *handler; svn_error_t *err; + dir_context_t *parent_dir = file->parent_dir; - if (file->parent_dir) + /* Is one of our parent dirs newly added? If so, we're already + * implicitly checked out. + */ + while (parent_dir) { - dir_context_t *dir = file->parent_dir; - - /* Is our parent newly added? If so, we're already implicitly checked out. */ - if (dir->added) + if (parent_dir->added) { - const char *diff_path; - - /* Implicitly checkout this dir now. */ + /* Implicitly checkout this file now. */ file->checkout = apr_pcalloc(file->pool, sizeof(*file->checkout)); file->checkout->pool = file->pool; - file->checkout->activity_url = file->commit->activity_url; - diff_path = svn_relpath_is_child(dir->name, file->name, file->pool); file->checkout->resource_url = - svn_path_url_add_component2(dir->checkout->resource_url, - diff_path, + svn_path_url_add_component2(parent_dir->checkout->resource_url, + svn_relpath_is_child(parent_dir->name, + file->name, + file->pool), file->pool); return SVN_NO_ERROR; } + parent_dir = parent_dir->parent_dir; } /* Checkout our file into the activity URL now. */