You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2010/08/10 22:56:05 UTC

svn commit: r984206 [10/35] - in /subversion/branches/ignore-mergeinfo: ./ build/ build/generator/ build/generator/templates/ build/hudson/ build/hudson/jobs/subversion-1.6.x-solaris/ build/hudson/jobs/subversion-1.6.x-ubuntu/ build/hudson/jobs/subvers...

Modified: subversion/branches/ignore-mergeinfo/subversion/libsvn_client/ra.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/libsvn_client/ra.c?rev=984206&r1=984205&r2=984206&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/libsvn_client/ra.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/libsvn_client/ra.c Tue Aug 10 20:55:56 2010
@@ -49,7 +49,7 @@ typedef struct
   /* Holds the directory that corresponds to the REPOS_URL at svn_ra_open3()
      time. When callbacks specify a relative path, they are joined with
      this base directory. */
-  const char *base_dir;
+  const char *base_dir_abspath;
 
   /* When true, makes sure temporary files are created
      outside the working copy. */
@@ -117,12 +117,10 @@ get_wc_prop(void *baton,
     }
 
   /* If we don't have a base directory, then there are no properties. */
-  else if (cb->base_dir == NULL)
+  else if (cb->base_dir_abspath == NULL)
     return SVN_NO_ERROR;
 
-  SVN_ERR(svn_dirent_get_absolute(&local_abspath,
-                                  svn_dirent_join(cb->base_dir, relpath, pool),
-                                  pool));
+  local_abspath = svn_dirent_join(cb->base_dir_abspath, relpath, pool);
 
   return svn_error_return(svn_wc_prop_get2(value, cb->ctx->wc_ctx,
                                            local_abspath, name, pool, pool));
@@ -188,9 +186,7 @@ set_wc_prop(void *baton,
   callback_baton_t *cb = baton;
   const char *local_abspath;
 
-  SVN_ERR(svn_dirent_get_absolute(&local_abspath,
-                                  svn_dirent_join(cb->base_dir, path, pool),
-                                  pool));
+  local_abspath = svn_dirent_join(cb->base_dir_abspath, path, pool);
 
   /* We pass 1 for the 'force' parameter here.  Since the property is
      coming from the repository, we definitely want to accept it.
@@ -255,9 +251,7 @@ invalidate_wc_props(void *baton,
   wb.prop_name = prop_name;
   wb.wc_ctx = cb->ctx->wc_ctx;
 
-  SVN_ERR(svn_dirent_get_absolute(&local_abspath,
-                                  svn_dirent_join(cb->base_dir, path, pool),
-                                  pool));
+  local_abspath = svn_dirent_join(cb->base_dir_abspath, path, pool);
 
   return svn_error_return(
     svn_wc__node_walk_children(cb->ctx->wc_ctx, local_abspath, FALSE,
@@ -289,7 +283,7 @@ get_client_string(void *baton,
 svn_error_t *
 svn_client__open_ra_session_internal(svn_ra_session_t **ra_session,
                                      const char *base_url,
-                                     const char *base_dir,
+                                     const char *base_dir_abspath,
                                      const apr_array_header_t *commit_items,
                                      svn_boolean_t use_admin,
                                      svn_boolean_t read_only_wc,
@@ -300,7 +294,9 @@ svn_client__open_ra_session_internal(svn
   callback_baton_t *cb = apr_pcalloc(pool, sizeof(*cb));
   const char *uuid = NULL;
 
-  SVN_ERR_ASSERT(base_dir != NULL || ! use_admin);
+  SVN_ERR_ASSERT(base_dir_abspath != NULL || ! use_admin);
+  SVN_ERR_ASSERT(base_dir_abspath == NULL
+                        || svn_dirent_is_absolute(base_dir_abspath));
 
   cbtable->open_tmp_file = open_tmp_file;
   cbtable->get_wc_prop = use_admin ? get_wc_prop : NULL;
@@ -313,21 +309,17 @@ svn_client__open_ra_session_internal(svn
   cbtable->cancel_func = ctx->cancel_func ? cancel_callback : NULL;
   cbtable->get_client_string = get_client_string;
 
-  cb->base_dir = base_dir;
+  cb->base_dir_abspath = base_dir_abspath;
   cb->read_only_wc = read_only_wc;
   cb->pool = pool;
   cb->commit_items = commit_items;
   cb->ctx = ctx;
 
-  if (base_dir)
+  if (base_dir_abspath)
     {
-      const char *base_dir_abspath;
-      svn_error_t *err;
-
-      SVN_ERR(svn_dirent_get_absolute(&base_dir_abspath, base_dir, pool));
-      err = svn_wc__node_get_repos_info(NULL, &uuid, ctx->wc_ctx,
-                                        base_dir_abspath, FALSE,
-                                        pool, pool);
+      svn_error_t *err = svn_wc__node_get_repos_info(NULL, &uuid, ctx->wc_ctx,
+                                                     base_dir_abspath, FALSE,
+                                                     FALSE, pool, pool);
 
       if (err && (err->apr_err == SVN_ERR_WC_NOT_WORKING_COPY
                   || err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND
@@ -389,7 +381,7 @@ svn_client_uuid_from_path2(const char **
 {
   return svn_error_return(
     svn_wc__node_get_repos_info(NULL, uuid, ctx->wc_ctx, local_abspath,
-                                FALSE, result_pool, scratch_pool));
+                                TRUE, TRUE, result_pool, scratch_pool));
 }
 
 
@@ -411,7 +403,7 @@ svn_client__ra_session_from_path(svn_ra_
                                  svn_revnum_t *rev_p,
                                  const char **url_p,
                                  const char *path_or_url,
-                                 const char *base_dir,
+                                 const char *base_dir_abspath,
                                  const svn_opt_revision_t *peg_revision_p,
                                  const svn_opt_revision_t *revision,
                                  svn_client_ctx_t *ctx,
@@ -440,7 +432,8 @@ svn_client__ra_session_from_path(svn_ra_
                                     pool));
 
   SVN_ERR(svn_client__open_ra_session_internal(&ra_session, initial_url,
-                                               base_dir, NULL, base_dir != NULL,
+                                               base_dir_abspath, NULL,
+                                               base_dir_abspath != NULL,
                                                FALSE, ctx, pool));
 
   dead_end_rev.kind = svn_opt_revision_unspecified;
@@ -589,26 +582,29 @@ svn_client__repos_locations(const char *
      the copyfrom information. */
   if (! svn_path_is_url(path))
     {
-      const svn_wc_entry_t *entry;
+      const char *node_url, *copyfrom_url;
+      svn_revnum_t copyfrom_rev;
 
       SVN_ERR(svn_dirent_get_absolute(&local_abspath_or_url, path, subpool));
-      SVN_ERR(svn_wc__get_entry_versioned(&entry, ctx->wc_ctx,
-                                          local_abspath_or_url,
-                                          svn_node_unknown, FALSE, FALSE,
-                                          pool, pool));
-      if (entry->copyfrom_url && revision->kind == svn_opt_revision_working)
+      SVN_ERR(svn_wc__node_get_url(&node_url, ctx->wc_ctx,
+                                   local_abspath_or_url, pool, subpool));
+      SVN_ERR(svn_wc__node_get_copyfrom_info(&copyfrom_url, &copyfrom_rev,
+                                             NULL, ctx->wc_ctx,
+                                             local_abspath_or_url,
+                                             pool, subpool));
+      if (copyfrom_url && revision->kind == svn_opt_revision_working)
         {
-          url = entry->copyfrom_url;
-          peg_revnum = entry->copyfrom_rev;
-          if (!entry->url || strcmp(entry->url, entry->copyfrom_url) != 0)
+          url = copyfrom_url;
+          peg_revnum = copyfrom_rev;
+          if (!node_url || strcmp(node_url, copyfrom_url) != 0)
             {
               /* We can't use the caller provided RA session in this case */
               ra_session = NULL;
             }
         }
-      else if (entry->url)
+      else if (node_url)
         {
-          url = entry->url;
+          url = node_url;
         }
       else
         {

Modified: subversion/branches/ignore-mergeinfo/subversion/libsvn_client/repos_diff.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/libsvn_client/repos_diff.c?rev=984206&r1=984205&r2=984206&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/libsvn_client/repos_diff.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/libsvn_client/repos_diff.c Tue Aug 10 20:55:56 2010
@@ -111,10 +111,13 @@ struct dir_baton {
   svn_boolean_t tree_conflicted;
 
   /* If TRUE, this node is skipped entirely.
-   * This is currently used to skip all children of a tree-conflicted
+   * This is used to skip all children of a tree-conflicted
    * directory without setting TREE_CONFLICTED to TRUE everywhere. */
   svn_boolean_t skip;
 
+  /* If TRUE, all children of this directory are skipped. */
+  svn_boolean_t skip_children;
+
   /* The path of the directory within the repository */
   const char *path;
 
@@ -210,6 +213,7 @@ make_dir_baton(const char *path,
   dir_baton->added = added;
   dir_baton->tree_conflicted = FALSE;
   dir_baton->skip = FALSE;
+  dir_baton->skip_children = FALSE;
   dir_baton->pool = pool;
   dir_baton->path = apr_pstrdup(pool, path);
   dir_baton->wcpath = svn_dirent_join(edit_baton->target, path, pool);
@@ -346,7 +350,7 @@ get_dir_abspath(const char **local_dir_a
       svn_error_t *err;
       const char *local_abspath;
       SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, pool));
-      err = svn_wc__node_get_kind(&kind, wc_ctx, local_abspath, FALSE, pool);
+      err = svn_wc_read_kind(&kind, wc_ctx, local_abspath, FALSE, pool);
       if (err)
         {
           if (lenient)
@@ -454,8 +458,9 @@ delete_entry(const char *path,
   svn_wc_notify_action_t action = svn_wc_notify_skip;
   svn_boolean_t tree_conflicted = FALSE;
 
-  /* Skip *everything* within a newly tree-conflicted directory. */
-  if (pb->skip || pb->tree_conflicted)
+  /* Skip *everything* within a newly tree-conflicted directory,
+   * and directories the children of which should be skipped. */
+  if (pb->skip || pb->tree_conflicted || pb->skip_children)
     return SVN_NO_ERROR;
 
   /* We need to know if this is a directory or a file */
@@ -556,8 +561,9 @@ add_directory(const char *path,
   b->pristine_props = eb->empty_hash;
   *child_baton = b;
 
-  /* Skip *everything* within a newly tree-conflicted directory. */
-  if (pb->skip || pb->tree_conflicted)
+  /* Skip *everything* within a newly tree-conflicted directory,
+   * and directories the children of which should be skipped. */
+  if (pb->skip || pb->tree_conflicted || pb->skip_children)
     {
       b->skip = TRUE;
       return SVN_NO_ERROR;
@@ -643,8 +649,9 @@ open_directory(const char *path,
   b = make_dir_baton(path, pb, pb->edit_baton, FALSE, pool);
   *child_baton = b;
 
-  /* Skip *everything* within a newly tree-conflicted directory. */
-  if (pb->skip || pb->tree_conflicted)
+  /* Skip *everything* within a newly tree-conflicted directory
+   * and directories the children of which should be skipped. */
+  if (pb->skip || pb->tree_conflicted || pb->skip_children)
     {
       b->skip = TRUE;
       return SVN_NO_ERROR;
@@ -656,8 +663,8 @@ open_directory(const char *path,
                           pool));
 
   SVN_ERR(eb->diff_callbacks->dir_opened
-          (local_dir_abspath, &b->tree_conflicted, b->wcpath, base_revision,
-           b->edit_baton->diff_cmd_baton, pool));
+          (local_dir_abspath, &b->tree_conflicted, &b->skip_children,
+           b->wcpath, base_revision, b->edit_baton->diff_cmd_baton, pool));
 
   return SVN_NO_ERROR;
 }
@@ -680,8 +687,9 @@ add_file(const char *path,
   b = make_file_baton(path, TRUE, pb->edit_baton, pool);
   *file_baton = b;
 
-  /* Skip *everything* within a newly tree-conflicted directory. */
-  if (pb->skip || pb->tree_conflicted)
+  /* Skip *everything* within a newly tree-conflicted directory.
+   * and directories the children of which should be skipped. */
+  if (pb->skip || pb->tree_conflicted || pb->skip_children)
     {
       b->skip = TRUE;
       return SVN_NO_ERROR;
@@ -706,8 +714,9 @@ open_file(const char *path,
   b = make_file_baton(path, FALSE, pb->edit_baton, pool);
   *file_baton = b;
 
-  /* Skip *everything* within a newly tree-conflicted directory. */
-  if (pb->skip || pb->tree_conflicted)
+  /* Skip *everything* within a newly tree-conflicted directory
+   * and directories the children of which should be skipped. */
+  if (pb->skip || pb->tree_conflicted || pb->skip_children)
     {
       b->skip = TRUE;
       return SVN_NO_ERROR;
@@ -945,7 +954,7 @@ close_directory(void *dir_baton,
     svn_hash__clear(svn_client__dry_run_deletions(eb->diff_cmd_baton), pool);
 
   err = get_dir_abspath(&local_dir_abspath, eb->wc_ctx, b->wcpath,
-                        eb->dry_run, b->pool);
+                        FALSE, b->pool);
 
   if (err && err->apr_err == SVN_ERR_WC_NOT_WORKING_COPY)
     {

Modified: subversion/branches/ignore-mergeinfo/subversion/libsvn_client/revisions.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/libsvn_client/revisions.c?rev=984206&r1=984205&r2=984206&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/libsvn_client/revisions.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/libsvn_client/revisions.c Tue Aug 10 20:55:56 2010
@@ -79,7 +79,7 @@ svn_client__get_revision_number(svn_revn
     case svn_opt_revision_working:
     case svn_opt_revision_base:
       {
-        const svn_wc_entry_t *ent;
+        svn_error_t *err;
 
         /* Sanity check. */
         if (local_abspath == NULL)
@@ -91,19 +91,33 @@ svn_client__get_revision_number(svn_revn
         if (svn_path_is_url(local_abspath))
           goto invalid_rev_arg;
 
-        SVN_ERR(svn_wc__get_entry_versioned(&ent, wc_ctx, local_abspath,
-                                            svn_node_unknown, FALSE, FALSE,
-                                            scratch_pool, scratch_pool));
+        err = svn_wc__node_get_commit_base_rev(revnum, wc_ctx,
+                                               local_abspath,
+                                               scratch_pool);
+
+        /* Return the same error as older code did (before and at r935091).
+           At least svn_client_proplist3 promises SVN_ERR_ENTRY_NOT_FOUND. */
+        if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
+          {
+            svn_error_clear(err);
+            return svn_error_createf(SVN_ERR_ENTRY_NOT_FOUND, NULL,
+                                     _("'%s' is not under version control"),
+                                     svn_dirent_local_style(local_abspath,
+                                                            scratch_pool));
+          }
+        else
+          SVN_ERR(err);
 
-        *revnum = ent->revision;
+        if (! SVN_IS_VALID_REVNUM(*revnum))
+          return svn_error_createf(SVN_ERR_CLIENT_BAD_REVISION, NULL,
+                                   _("Path '%s' has no committed "
+                                     "revision"), local_abspath);
       }
       break;
 
     case svn_opt_revision_committed:
     case svn_opt_revision_previous:
       {
-        const svn_wc_entry_t *ent;
-
         /* Sanity check. */
         if (local_abspath == NULL)
           return svn_error_create(SVN_ERR_CLIENT_VERSIONED_PATH_REQUIRED,
@@ -114,15 +128,14 @@ svn_client__get_revision_number(svn_revn
         if (svn_path_is_url(local_abspath))
           goto invalid_rev_arg;
 
-        SVN_ERR(svn_wc__get_entry_versioned(&ent, wc_ctx, local_abspath,
-                                            svn_node_unknown, FALSE, FALSE,
-                                            scratch_pool, scratch_pool));
-
-        if (! SVN_IS_VALID_REVNUM(ent->cmt_rev))
+        SVN_ERR(svn_wc__node_get_changed_info(revnum, NULL, NULL,
+                                              wc_ctx, local_abspath,
+                                              scratch_pool, scratch_pool));
+        if (! SVN_IS_VALID_REVNUM(*revnum))
           return svn_error_createf(SVN_ERR_CLIENT_BAD_REVISION, NULL,
                                    _("Path '%s' has no committed "
                                      "revision"), local_abspath);
-        *revnum = ent->cmt_rev;
+
         if (revision->kind == svn_opt_revision_previous)
           (*revnum)--;
       }

Modified: subversion/branches/ignore-mergeinfo/subversion/libsvn_client/status.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/libsvn_client/status.c?rev=984206&r1=984205&r2=984206&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/libsvn_client/status.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/libsvn_client/status.c Tue Aug 10 20:55:56 2010
@@ -73,7 +73,7 @@ struct status_baton
 static svn_error_t *
 tweak_status(void *baton,
              const char *local_abspath,
-             const svn_wc_status2_t *status,
+             const svn_wc_status3_t *status,
              apr_pool_t *scratch_pool)
 {
   struct status_baton *sb = baton;
@@ -84,7 +84,7 @@ tweak_status(void *baton,
      through here. */
   if (sb->deleted_in_repos)
     {
-      svn_wc_status2_t *new_status = svn_wc_dup_status2(status, scratch_pool);
+      svn_wc_status3_t *new_status = svn_wc_dup_status3(status, scratch_pool);
       new_status->repos_text_status = svn_wc_status_deleted;
       status = new_status;
     }
@@ -324,8 +324,7 @@ svn_client_status5(svn_revnum_t *result_
     svn_node_kind_t kind, disk_kind;
 
     SVN_ERR(svn_io_check_path(target_abspath, &disk_kind, pool));
-    err = svn_wc__node_get_kind(&kind, ctx->wc_ctx, target_abspath, FALSE,
-                                pool);
+    err = svn_wc_read_kind(&kind, ctx->wc_ctx, target_abspath, FALSE, pool);
 
     if (err && ((err->apr_err == SVN_ERR_WC_MISSING) ||
                 (err->apr_err == SVN_ERR_WC_NOT_WORKING_COPY)))
@@ -354,8 +353,8 @@ svn_client_status5(svn_revnum_t *result_
 
         if (kind != svn_node_file)
           {
-            err = svn_wc__node_get_kind(&kind, ctx->wc_ctx, dir_abspath,
-                                        FALSE, pool);
+            err = svn_wc_read_kind(&kind, ctx->wc_ctx, dir_abspath, FALSE,
+                                   pool);
 
             svn_error_clear(err);
 
@@ -448,17 +447,29 @@ svn_client_status5(svn_revnum_t *result_
                                 &kind, pool));
       if (kind == svn_node_none)
         {
-          const svn_wc_entry_t *entry;
-          SVN_ERR(svn_wc__get_entry_versioned(&entry, ctx->wc_ctx,
-                                              dir_abspath, svn_node_dir,
-                                              FALSE, FALSE,
-                                              pool, pool));
-
-          /* Our status target does not exist in HEAD of the
-             repository.  If we're just adding this thing, that's
-             fine.  But if it was previously versioned, then it must
-             have been deleted from the repository. */
-          if (entry->schedule != svn_wc_schedule_add)
+          svn_boolean_t added;
+
+          /* Our status target does not exist in HEAD.  If we've got
+             it localled added, that's okay.  But if it was previously
+             versioned, then it must have since been deleted from the
+             repository.  (Note that "locally replaced" doesn't count
+             as "added" in this case.)  */
+
+          /* ### FIXME:  WC-1 code here was just (! added).  Not sure
+             ### if this WC-NG approach matches semantically.  */
+          SVN_ERR(svn_wc__node_is_added(&added, ctx->wc_ctx,
+                                        dir_abspath, pool));
+          if (added)
+            {
+              svn_boolean_t replaced;
+
+              SVN_ERR(svn_wc__node_is_replaced(&replaced, ctx->wc_ctx,
+                                               dir_abspath, pool));
+              if (replaced)
+                added = FALSE;
+            }
+
+          if (! added)
             sb.deleted_in_repos = TRUE;
 
           /* And now close the edit. */
@@ -526,7 +537,7 @@ svn_client_status5(svn_revnum_t *result_
   else
     {
       err = svn_wc_walk_status(ctx->wc_ctx, target_abspath,
-                               depth, get_all, no_ignore, FALSE, ignores,
+                               depth, get_all, no_ignore, ignores,
                                tweak_status, &sb,
                                ignore_externals ? NULL
                                                 : svn_cl__store_externals,

Modified: subversion/branches/ignore-mergeinfo/subversion/libsvn_client/switch.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/libsvn_client/switch.c?rev=984206&r1=984205&r2=984206&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/libsvn_client/switch.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/libsvn_client/switch.c Tue Aug 10 20:55:56 2010
@@ -57,7 +57,6 @@
 
 static svn_error_t *
 switch_internal(svn_revnum_t *result_rev,
-                const char *path,
                 const char *local_abspath,
                 const char *anchor_abspath,
                 const char *switch_url,
@@ -74,7 +73,7 @@ switch_internal(svn_revnum_t *result_rev
 {
   const svn_ra_reporter3_t *reporter;
   void *report_baton;
-  const char *url, *anchor, *target, *source_root, *switch_rev_url;
+  const char *url, *target, *source_root, *switch_rev_url;
   svn_ra_session_t *ra_session;
   svn_revnum_t revnum;
   svn_error_t *err = SVN_NO_ERROR;
@@ -123,18 +122,15 @@ switch_internal(svn_revnum_t *result_rev
   SVN_ERR_ASSERT(switch_url && (switch_url[0] != '\0'));
 
   if (strcmp(local_abspath, anchor_abspath))
-    svn_dirent_split(path, &anchor, &target, pool);
+    target = svn_dirent_basename(local_abspath, pool);
   else
-    {
-      target = "";
-      anchor = path;
-    }
+    target = "";
 
   SVN_ERR(svn_wc__node_get_url(&url, ctx->wc_ctx, anchor_abspath, pool, pool));
   if (! url)
     return svn_error_createf(SVN_ERR_ENTRY_MISSING_URL, NULL,
                              _("Directory '%s' has no URL"),
-                             svn_dirent_local_style(anchor, pool));
+                             svn_dirent_local_style(anchor_abspath, pool));
 
     /* We may need to crop the tree if the depth is sticky */
   if (depth_is_sticky && depth < svn_depth_infinity)
@@ -153,8 +149,8 @@ switch_internal(svn_revnum_t *result_rev
           return SVN_NO_ERROR;
         }
 
-      SVN_ERR(svn_wc__node_get_kind(&target_kind, ctx->wc_ctx,
-                                    local_abspath, TRUE, pool));
+      SVN_ERR(svn_wc_read_kind(&target_kind, ctx->wc_ctx, local_abspath, TRUE,
+                               pool));
 
       if (target_kind == svn_node_dir)
         SVN_ERR(svn_wc_crop_tree2(ctx->wc_ctx, local_abspath, depth,
@@ -166,7 +162,7 @@ switch_internal(svn_revnum_t *result_rev
   /* Open an RA session to 'source' URL */
   SVN_ERR(svn_client__ra_session_from_path(&ra_session, &revnum,
                                            &switch_rev_url,
-                                           switch_url, anchor,
+                                           switch_url, anchor_abspath,
                                            peg_revision, revision,
                                            ctx, pool));
   SVN_ERR(svn_ra_get_repos_root2(ra_session, &source_root, pool));
@@ -229,7 +225,7 @@ switch_internal(svn_revnum_t *result_rev
     {
       /* Don't rely on the error handling to handle the sleep later, do
          it now */
-      svn_io_sleep_for_timestamps(path, pool);
+      svn_io_sleep_for_timestamps(local_abspath, pool);
       return svn_error_return(err);
     }
   *use_sleep = TRUE;
@@ -240,13 +236,13 @@ switch_internal(svn_revnum_t *result_rev
   if (SVN_DEPTH_IS_RECURSIVE(depth) && (! ignore_externals))
     err = svn_client__handle_externals(efb.externals_old,
                                        efb.externals_new, efb.ambient_depths,
-                                       switch_url, path, source_root, depth,
-                                       use_sleep, ctx, pool);
+                                       switch_url, local_abspath, source_root,
+                                       depth, use_sleep, ctx, pool);
 
   /* Sleep to ensure timestamp integrity (we do this regardless of
      errors in the actual switch operation(s)). */
   if (sleep_here)
-    svn_io_sleep_for_timestamps(path, pool);
+    svn_io_sleep_for_timestamps(local_abspath, pool);
 
   /* Return errors we might have sustained. */
   if (err)
@@ -256,7 +252,8 @@ switch_internal(svn_revnum_t *result_rev
   if (ctx->notify_func2)
     {
       svn_wc_notify_t *notify
-        = svn_wc_create_notify(anchor, svn_wc_notify_update_completed, pool);
+        = svn_wc_create_notify(anchor_abspath, svn_wc_notify_update_completed,
+                               pool);
       notify->kind = svn_node_none;
       notify->content_state = notify->prop_state
         = svn_wc_notify_state_inapplicable;
@@ -301,15 +298,11 @@ svn_client__switch_internal(svn_revnum_t
                                    local_abspath, pool, pool);
   if (err && err->apr_err != SVN_ERR_WC_LOCKED)
     return svn_error_return(err);
-  else if (err)
-    {
-      svn_error_clear(err);
-      acquired_lock = FALSE;
-    }
-  else
-    acquired_lock = TRUE;
 
-  err1 = switch_internal(result_rev, path, local_abspath, anchor_abspath,
+  acquired_lock = (err == SVN_NO_ERROR);
+  svn_error_clear(err);
+
+  err1 = switch_internal(result_rev, local_abspath, anchor_abspath,
                          switch_url, peg_revision, revision,
                          depth, depth_is_sticky,
                          timestamp_sleep, ignore_externals,

Modified: subversion/branches/ignore-mergeinfo/subversion/libsvn_client/update.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/libsvn_client/update.c?rev=984206&r1=984205&r2=984206&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/libsvn_client/update.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/libsvn_client/update.c Tue Aug 10 20:55:56 2010
@@ -49,7 +49,7 @@
 struct ff_baton
 {
   svn_client_ctx_t *ctx;       /* client context used to open ra session */
-  const char *repos_root;      /* the root of the ra session */
+  const char *repos_root;      /* repository root URL */
   svn_ra_session_t *session;   /* the secondary ra session itself */
   apr_pool_t *pool;            /* the pool where the ra session is allocated */
 };
@@ -68,20 +68,27 @@ file_fetcher(void *baton,
              apr_pool_t *pool)
 {
   struct ff_baton *ffb = (struct ff_baton *)baton;
+  const char *dirpath, *base_name, *session_url, *old_session_url;
 
-  if (! ffb->session)
-    SVN_ERR(svn_client__open_ra_session_internal(&(ffb->session),
-                                                 ffb->repos_root,
+  svn_relpath_split(path, &dirpath, &base_name, pool);
+  session_url = svn_path_url_add_component2(ffb->repos_root, 
+                                            dirpath, pool);
+
+  if (ffb->session)
+    SVN_ERR(svn_client__ensure_ra_session_url(&old_session_url, ffb->session,
+                                              session_url, ffb->pool));
+  else
+    SVN_ERR(svn_client__open_ra_session_internal(&(ffb->session), session_url,
                                                  NULL, NULL, FALSE, TRUE,
                                                  ffb->ctx, ffb->pool));
-  return svn_ra_get_file(ffb->session, path, revision, stream,
+
+  return svn_ra_get_file(ffb->session, base_name, revision, stream,
                          fetched_rev, props, pool);
 }
 
 
 static svn_error_t *
 update_internal(svn_revnum_t *result_rev,
-                const char *path,
                 const char *local_abspath,
                 const char *anchor_abspath,
                 const svn_opt_revision_t *revision,
@@ -100,7 +107,7 @@ update_internal(svn_revnum_t *result_rev
   const svn_ra_reporter3_t *reporter;
   void *report_baton;
   const char *anchor_url;
-  const char *anchor, *target;
+  const char *target;
   const char *repos_root;
   svn_error_t *err;
   svn_revnum_t revnum;
@@ -123,15 +130,9 @@ update_internal(svn_revnum_t *result_rev
     depth_is_sticky = FALSE;
 
   if (strcmp(local_abspath, anchor_abspath))
-    {
-      target = svn_dirent_basename(local_abspath, pool);
-      anchor = svn_dirent_basename(path, pool);
-    }
+    target = svn_dirent_basename(local_abspath, pool);
   else
-    {
-      target = "";
-      anchor = path;
-    }
+    target = "";
 
   /* Get full URL from the ANCHOR. */
   SVN_ERR(svn_wc__node_get_url(&anchor_url, ctx->wc_ctx, anchor_abspath,
@@ -161,8 +162,8 @@ update_internal(svn_revnum_t *result_rev
           return SVN_NO_ERROR;
         }
 
-      SVN_ERR(svn_wc__node_get_kind(&target_kind, ctx->wc_ctx,
-                                    local_abspath, TRUE, pool));
+      SVN_ERR(svn_wc_read_kind(&target_kind, ctx->wc_ctx, local_abspath, TRUE,
+                               pool));
       if (target_kind == svn_node_dir)
         {
           SVN_ERR(svn_wc_crop_tree2(ctx->wc_ctx, local_abspath, depth,
@@ -191,7 +192,7 @@ update_internal(svn_revnum_t *result_rev
 
   /* Open an RA session for the URL */
   SVN_ERR(svn_client__open_ra_session_internal(&ra_session, anchor_url,
-                                               anchor, NULL, TRUE, TRUE,
+                                               anchor_abspath, NULL, TRUE, TRUE,
                                                ctx, pool));
 
   /* ### todo: shouldn't svn_client__get_revision_number be able
@@ -260,7 +261,7 @@ update_internal(svn_revnum_t *result_rev
     {
       /* Don't rely on the error handling to handle the sleep later, do
          it now */
-      svn_io_sleep_for_timestamps(path, pool);
+      svn_io_sleep_for_timestamps(local_abspath, pool);
       return svn_error_return(err);
     }
   *use_sleep = TRUE;
@@ -273,13 +274,13 @@ update_internal(svn_revnum_t *result_rev
       SVN_ERR(svn_client__handle_externals(efb.externals_old,
                                            efb.externals_new,
                                            efb.ambient_depths,
-                                           anchor_url, anchor,
+                                           anchor_url, anchor_abspath,
                                            repos_root,
                                            depth, use_sleep, ctx, pool));
     }
 
   if (sleep_here)
-    svn_io_sleep_for_timestamps(path, pool);
+    svn_io_sleep_for_timestamps(local_abspath, pool);
 
   SVN_ERR(svn_wc__release_write_lock(ctx->wc_ctx, anchor_abspath, pool));
 
@@ -287,7 +288,8 @@ update_internal(svn_revnum_t *result_rev
   if (ctx->notify_func2)
     {
       svn_wc_notify_t *notify
-        = svn_wc_create_notify(path, svn_wc_notify_update_completed, pool);
+        = svn_wc_create_notify(local_abspath, svn_wc_notify_update_completed,
+                               pool);
       notify->kind = svn_node_none;
       notify->content_state = notify->prop_state
         = svn_wc_notify_state_inapplicable;
@@ -305,7 +307,7 @@ update_internal(svn_revnum_t *result_rev
 
 svn_error_t *
 svn_client__update_internal(svn_revnum_t *result_rev,
-                            const char *path,
+                            const char *local_abspath,
                             const svn_opt_revision_t *revision,
                             svn_depth_t depth,
                             svn_boolean_t depth_is_sticky,
@@ -317,17 +319,10 @@ svn_client__update_internal(svn_revnum_t
                             svn_client_ctx_t *ctx,
                             apr_pool_t *pool)
 {
-  const char *local_abspath, *anchor_abspath;
+  const char *anchor_abspath;
   svn_error_t *err1, *err2;
 
-  SVN_ERR_ASSERT(path);
-
-  if (svn_path_is_url(path))
-    return svn_error_createf(SVN_ERR_WC_NOT_WORKING_COPY, NULL,
-                             _("Path '%s' is not a directory"),
-                             path);
-
-  SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, pool));
+  SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
 
   if (!innerupdate)
     {
@@ -341,7 +336,7 @@ svn_client__update_internal(svn_revnum_t
       anchor_abspath = local_abspath;
     }
 
-  err1 = update_internal(result_rev, path, local_abspath, anchor_abspath,
+  err1 = update_internal(result_rev, local_abspath, anchor_abspath,
                          revision, depth, depth_is_sticky,
                          ignore_externals, allow_unver_obstructions,
                          timestamp_sleep, send_copyfrom_args,
@@ -365,7 +360,6 @@ svn_client_update3(apr_array_header_t **
                    apr_pool_t *pool)
 {
   int i;
-  svn_error_t *err = SVN_NO_ERROR;
   apr_pool_t *subpool = svn_pool_create(pool);
   const char *path = NULL;
 
@@ -375,6 +369,8 @@ svn_client_update3(apr_array_header_t **
   for (i = 0; i < paths->nelts; ++i)
     {
       svn_boolean_t sleep;
+      svn_boolean_t skipped = FALSE;
+      svn_error_t *err = SVN_NO_ERROR;
       svn_revnum_t result_rev;
       path = APR_ARRAY_IDX(paths, i, const char *);
 
@@ -383,19 +379,36 @@ svn_client_update3(apr_array_header_t **
       if (ctx->cancel_func && (err = ctx->cancel_func(ctx->cancel_baton)))
         break;
 
-      err = svn_client__update_internal(&result_rev, path, revision, depth,
-                                        depth_is_sticky, ignore_externals,
-                                        allow_unver_obstructions,
-                                        &sleep, TRUE, FALSE, ctx, subpool);
-      if (err && err->apr_err != SVN_ERR_WC_NOT_WORKING_COPY)
+      if (svn_path_is_url(path))
         {
-          return svn_error_return(err);
+          skipped = TRUE;
         }
-      else if (err)
+      else
+        {
+          const char *local_abspath;
+
+          SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, subpool));
+          err = svn_client__update_internal(&result_rev, local_abspath,
+                                            revision, depth, depth_is_sticky,
+                                            ignore_externals,
+                                            allow_unver_obstructions,
+                                            &sleep, TRUE, FALSE, ctx, subpool);
+
+          if (err && err->apr_err != SVN_ERR_WC_NOT_WORKING_COPY)
+            {
+              return svn_error_return(err);
+            }
+
+          if (err)
+            {
+              /* SVN_ERR_WC_NOT_WORKING_COPY: it's not versioned */
+              svn_error_clear(err);
+              skipped = TRUE;
+            }
+        }
+
+      if (skipped)
         {
-          /* SVN_ERR_WC_NOT_WORKING_COPY: it's not versioned */
-          svn_error_clear(err);
-          err = SVN_NO_ERROR;
           result_rev = SVN_INVALID_REVNUM;
           if (ctx->notify_func2)
             {
@@ -426,5 +439,5 @@ svn_client_update3(apr_array_header_t **
   svn_pool_destroy(subpool);
   svn_io_sleep_for_timestamps((paths->nelts == 1) ? path : NULL, pool);
 
-  return svn_error_return(err);
+  return SVN_NO_ERROR;
 }

Modified: subversion/branches/ignore-mergeinfo/subversion/libsvn_client/url.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/libsvn_client/url.c?rev=984206&r1=984205&r2=984206&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/libsvn_client/url.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/libsvn_client/url.c Tue Aug 10 20:55:56 2010
@@ -137,7 +137,8 @@ svn_client__entry_location(const char **
                            apr_pool_t *result_pool,
                            apr_pool_t *scratch_pool)
 {
-  const svn_wc_entry_t *entry;
+  const char *copyfrom_url;
+  svn_revnum_t copyfrom_rev;
 
   /* This function doesn't contact the repository, so error out if
      asked to do so. */
@@ -145,39 +146,57 @@ svn_client__entry_location(const char **
       || peg_rev_kind == svn_opt_revision_head)
     return svn_error_create(SVN_ERR_CLIENT_BAD_REVISION, NULL, NULL);
 
-  SVN_ERR(svn_wc__get_entry_versioned(&entry, wc_ctx, local_abspath,
-                                      svn_node_unknown, FALSE, FALSE,
-                                      scratch_pool, scratch_pool));
+  SVN_ERR(svn_wc__node_get_copyfrom_info(&copyfrom_url, &copyfrom_rev,
+                                         NULL, wc_ctx, local_abspath,
+                                         result_pool, scratch_pool));
 
-  if (entry->copyfrom_url && peg_rev_kind == svn_opt_revision_working)
+  if (copyfrom_url && peg_rev_kind == svn_opt_revision_working)
     {
-      *url = apr_pstrdup(result_pool, entry->copyfrom_url);
+      *url = copyfrom_url;
       if (revnum)
-        *revnum = entry->copyfrom_rev;
+        *revnum = copyfrom_rev;
     }
-  else if (entry->url)
+  else
     {
-      *url = apr_pstrdup(result_pool, entry->url);
-      if (revnum)
+      const char *node_url;
+
+      SVN_ERR(svn_wc__node_get_url(&node_url, wc_ctx, local_abspath,
+                                   result_pool, scratch_pool));
+      if (node_url)
         {
-          if (peg_rev_kind == svn_opt_revision_committed)
-            *revnum = entry->cmt_rev;
-          else if (peg_rev_kind == svn_opt_revision_previous)
-            *revnum = entry->cmt_rev - 1;
-          else
-            /* Local modifications are not relevant here, so consider
-               svn_opt_revision_unspecified, svn_opt_revision_number,
-               svn_opt_revision_base, and svn_opt_revision_working
-               as the same. */
-            *revnum = entry->revision;
+          *url = node_url;
+          if (revnum)
+            {
+              if ((peg_rev_kind == svn_opt_revision_committed) ||
+                  (peg_rev_kind == svn_opt_revision_previous))
+                {
+                  SVN_ERR(svn_wc__node_get_changed_info(revnum, NULL, NULL,
+                                                        wc_ctx,
+                                                        local_abspath,
+                                                        result_pool,
+                                                        scratch_pool));
+                  if (peg_rev_kind == svn_opt_revision_previous)
+                    *revnum = *revnum - 1;
+                }
+              else
+                {
+                  /* Local modifications are not relevant here, so consider
+                     svn_opt_revision_unspecified, svn_opt_revision_number,
+                     svn_opt_revision_base, and svn_opt_revision_working
+                     as the same. */
+                  SVN_ERR(svn_wc__node_get_base_rev(revnum,
+                                                    wc_ctx, local_abspath,
+                                                    scratch_pool));
+                }
+            }
+        }
+      else
+        {
+          return svn_error_createf(SVN_ERR_ENTRY_MISSING_URL, NULL,
+                                   _("Entry for '%s' has no URL"),
+                                   svn_dirent_local_style(local_abspath,
+                                                          scratch_pool));
         }
-    }
-  else
-    {
-      return svn_error_createf(SVN_ERR_ENTRY_MISSING_URL, NULL,
-                               _("Entry for '%s' has no URL"),
-                               svn_dirent_local_style(local_abspath,
-                                                      scratch_pool));
     }
 
   return SVN_NO_ERROR;

Modified: subversion/branches/ignore-mergeinfo/subversion/libsvn_client/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/libsvn_client/util.c?rev=984206&r1=984205&r2=984206&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/libsvn_client/util.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/libsvn_client/util.c Tue Aug 10 20:55:56 2010
@@ -150,12 +150,6 @@ wc_path_to_repos_urls(const char **url,
                       apr_pool_t *result_pool,
                       apr_pool_t *scratch_pool)
 {
-  const svn_wc_entry_t *entry;
-
-  SVN_ERR(svn_wc__get_entry_versioned(&entry, wc_ctx, local_abspath,
-                                      svn_node_unknown, FALSE, FALSE,
-                                      scratch_pool, scratch_pool));
-
   SVN_ERR(svn_client__entry_location(url, NULL, wc_ctx, local_abspath,
                                      svn_opt_revision_unspecified,
                                      result_pool, scratch_pool));
@@ -164,7 +158,9 @@ wc_path_to_repos_urls(const char **url,
      the entry.  The entry might not hold a URL -- in that case, we'll
      need a fallback plan. */
   if (*repos_root == NULL)
-    *repos_root = apr_pstrdup(result_pool, entry->repos);
+    SVN_ERR(svn_wc__node_get_repos_info(repos_root, NULL, wc_ctx,
+                                        local_abspath, TRUE, FALSE,
+                                        result_pool, scratch_pool));
 
   return SVN_NO_ERROR;
 }
@@ -247,8 +243,9 @@ svn_client__get_repos_root(const char **
           || peg_revision->kind == svn_opt_revision_base))
     {
       *repos_root = NULL;
-      SVN_ERR(wc_path_to_repos_urls(&abspath_or_url, repos_root, ctx->wc_ctx,
-                                    abspath_or_url, result_pool, scratch_pool));
+      SVN_ERR(wc_path_to_repos_urls(&abspath_or_url, repos_root,
+                                    ctx->wc_ctx, abspath_or_url,
+                                    result_pool, scratch_pool));
     }
   else
     {

Modified: subversion/branches/ignore-mergeinfo/subversion/libsvn_delta/compose_delta.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/libsvn_delta/compose_delta.c?rev=984206&r1=984205&r2=984206&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/libsvn_delta/compose_delta.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/libsvn_delta/compose_delta.c Tue Aug 10 20:55:56 2010
@@ -165,10 +165,12 @@ create_offset_index(const svn_txdelta_wi
    as hint because most lookups come as a sequence of decreasing values
    for OFFSET and they concentrate on the lower end of the array. */
 
-static int
-search_offset_index(const offset_index_t *ndx, apr_size_t offset, int hint)
+static apr_size_t
+search_offset_index(const offset_index_t *ndx,
+                    apr_size_t offset,
+                    apr_size_t hint)
 {
-  int lo, hi, op;
+  apr_size_t lo, hi, op;
 
   assert(offset < ndx->offs[ndx->length]);
 
@@ -635,13 +637,13 @@ build_range_list(apr_size_t offset, apr_
 static void
 copy_source_ops(apr_size_t offset, apr_size_t limit,  
                 apr_size_t target_offset,
-                int hint,
+                apr_size_t hint,
                 svn_txdelta__ops_baton_t *build_baton,
                 const svn_txdelta_window_t *window,
                 const offset_index_t *ndx,
                 apr_pool_t *pool)
 {
-  int op_ndx = search_offset_index(ndx, offset, hint);
+  apr_size_t op_ndx = search_offset_index(ndx, offset, hint);
   for (;; ++op_ndx)
     {
       const svn_txdelta_op_t *const op = &window->ops[op_ndx];

Modified: subversion/branches/ignore-mergeinfo/subversion/libsvn_delta/editor.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/libsvn_delta/editor.c?rev=984206&r1=984205&r2=984206&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/libsvn_delta/editor.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/libsvn_delta/editor.c Tue Aug 10 20:55:56 2010
@@ -391,7 +391,8 @@ svn_editor_copy(svn_editor_t *editor,
     SVN_ERR((*editor->cancel_func)(editor->cancel_baton));
 
   err = (*editor->funcs.cb_copy)(editor->baton, src_relpath, src_revision,
-                                 dst_relpath, replaces_rev, editor->scratch_pool);
+                                 dst_relpath, replaces_rev,
+                                 editor->scratch_pool);
   svn_pool_clear(editor->scratch_pool);
   return err;
 }
@@ -412,7 +413,8 @@ svn_editor_move(svn_editor_t *editor,
     SVN_ERR((*editor->cancel_func)(editor->cancel_baton));
 
   err = (*editor->funcs.cb_move)(editor->baton, src_relpath, src_revision,
-                                 dst_relpath, replaces_rev, editor->scratch_pool);
+                                 dst_relpath, replaces_rev,
+                                 editor->scratch_pool);
   svn_pool_clear(editor->scratch_pool);
   return err;
 }

Modified: subversion/branches/ignore-mergeinfo/subversion/libsvn_delta/svndiff.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/libsvn_delta/svndiff.c?rev=984206&r1=984205&r2=984206&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/libsvn_delta/svndiff.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/libsvn_delta/svndiff.c Tue Aug 10 20:55:56 2010
@@ -90,9 +90,8 @@ struct encoder_baton {
          129 encodes as [1 0000001] [0 0000001]
         2000 encodes as [1 0001111] [0 1010000]
 */
-
-static char *
-encode_int(char *p, svn_filesize_t val)
+static unsigned char *
+encode_int(unsigned char *p, svn_filesize_t val)
 {
   int n;
   svn_filesize_t v;
@@ -116,7 +115,7 @@ encode_int(char *p, svn_filesize_t val)
   while (--n >= 0)
     {
       cont = ((n > 0) ? 0x1 : 0x0) << 7;
-      *p++ = (char)(((val >> (n * 7)) & 0x7f) | cont);
+      *p++ = (unsigned char)(((val >> (n * 7)) & 0x7f) | cont);
     }
 
   return p;
@@ -127,10 +126,10 @@ encode_int(char *p, svn_filesize_t val)
 static void
 append_encoded_int(svn_stringbuf_t *header, svn_filesize_t val)
 {
-  char buf[MAX_ENCODED_INT_LEN], *p;
+  unsigned char buf[MAX_ENCODED_INT_LEN], *p;
 
   p = encode_int(buf, val);
-  svn_stringbuf_appendbytes(header, buf, p - buf);
+  svn_stringbuf_appendbytes(header, (const char *)buf, p - buf);
 }
 
 /* If IN is a string that is >= MIN_COMPRESS_SIZE, zlib compress it and
@@ -183,7 +182,7 @@ window_handler(svn_txdelta_window_t *win
   svn_stringbuf_t *i1 = svn_stringbuf_create("", pool);
   svn_stringbuf_t *header = svn_stringbuf_create("", pool);
   const svn_string_t *newdata;
-  char ibuf[MAX_INSTRUCTION_LEN], *ip;
+  unsigned char ibuf[MAX_INSTRUCTION_LEN], *ip;
   const svn_txdelta_op_t *op;
   apr_size_t len;
 
@@ -225,9 +224,9 @@ window_handler(svn_txdelta_window_t *win
       ip = ibuf;
       switch (op->action_code)
         {
-        case svn_txdelta_source: *ip = (char)0; break;
-        case svn_txdelta_target: *ip = (char)(0x1 << 6); break;
-        case svn_txdelta_new:    *ip = (char)(0x2 << 6); break;
+        case svn_txdelta_source: *ip = 0; break;
+        case svn_txdelta_target: *ip = (0x1 << 6); break;
+        case svn_txdelta_new:    *ip = (0x2 << 6); break;
         }
       if (op->length >> 6 == 0)
         *ip++ |= op->length;
@@ -235,7 +234,7 @@ window_handler(svn_txdelta_window_t *win
         ip = encode_int(ip + 1, op->length);
       if (op->action_code != svn_txdelta_new)
         ip = encode_int(ip, op->offset);
-      svn_stringbuf_appendbytes(instructions, ibuf, ip - ibuf);
+      svn_stringbuf_appendbytes(instructions, (const char *)ibuf, ip - ibuf);
     }
 
   /* Encode the header.  */
@@ -355,43 +354,60 @@ struct decode_baton
    the byte after the integer.  The bytes to be decoded live in the
    range [P..END-1].  See the comment for encode_int earlier in this
    file for more detail on the encoding format.  */
-
 static const unsigned char *
 decode_file_offset(svn_filesize_t *val,
                    const unsigned char *p,
                    const unsigned char *end)
 {
+  svn_filesize_t temp = 0;
+
   if (p + MAX_ENCODED_INT_LEN < end)
     end = p + MAX_ENCODED_INT_LEN;
   /* Decode bytes until we're done.  */
-  *val = 0;
   while (p < end)
     {
-      *val = (*val << 7) | (*p & 0x7f);
-      if (((*p++ >> 7) & 0x1) == 0)
+      /* Don't use svn_filesize_t here, because this might be 64 bits
+       * on 32 bit targets. Optimizing compilers may or may not be
+       * able to reduce that to the effective code below. */
+      unsigned int c = *p++;
+
+      temp = (temp << 7) | (c & 0x7f);
+      if (c < 0x80)
+      {
+        *val = temp;
         return p;
+      }
     }
+
+  *val = temp;
   return NULL;
 }
 
 
-/* Same as above, only decide into a size variable. */
-
+/* Same as above, only decode into a size variable. */
 static const unsigned char *
 decode_size(apr_size_t *val,
             const unsigned char *p,
             const unsigned char *end)
 {
+  apr_size_t temp = 0;
+
   if (p + MAX_ENCODED_INT_LEN < end)
     end = p + MAX_ENCODED_INT_LEN;
   /* Decode bytes until we're done.  */
-  *val = 0;
   while (p < end)
     {
-      *val = (*val << 7) | (*p & 0x7f);
-      if (((*p++ >> 7) & 0x1) == 0)
+      apr_size_t c = *p++;
+
+      temp = (temp << 7) | (c & 0x7f);
+      if (c < 0x80)
+      {
+        *val = temp;
         return p;
+      }
     }
+
+  *val = temp;
   return NULL;
 }
 
@@ -399,7 +415,6 @@ decode_size(apr_size_t *val,
    We expect an integer is prepended to IN that specifies the original
    size, and that if encoded size == original size, that the remaining
    data is not compressed.  */
-
 static svn_error_t *
 zlib_decode(svn_stringbuf_t *in, svn_stringbuf_t *out, apr_size_t limit)
 {
@@ -452,33 +467,38 @@ zlib_decode(svn_stringbuf_t *in, svn_str
 /* Decode an instruction into OP, returning a pointer to the text
    after the instruction.  Note that if the action code is
    svn_txdelta_new, the offset field of *OP will not be set.  */
-
 static const unsigned char *
 decode_instruction(svn_txdelta_op_t *op,
                    const unsigned char *p,
                    const unsigned char *end)
 {
+  apr_size_t c;
+  apr_size_t action;
+
   if (p == end)
     return NULL;
 
+  /* We need this more than once */
+  c = *p++;
+
   /* Decode the instruction selector.  */
-  switch ((*p >> 6) & 0x3)
-    {
-    case 0x0: op->action_code = svn_txdelta_source; break;
-    case 0x1: op->action_code = svn_txdelta_target; break;
-    case 0x2: op->action_code = svn_txdelta_new; break;
-    case 0x3: return NULL;
-    }
+  action = (c >> 6) & 0x3;
+  if (action >= 0x3)
+      return NULL;
+
+  /* This relies on enum svn_delta_action values to match and never to be
+     redefined. */
+  op->action_code = (enum svn_delta_action)(action);
 
   /* Decode the length and offset.  */
-  op->length = *p++ & 0x3f;
+  op->length = c & 0x3f;
   if (op->length == 0)
     {
       p = decode_size(&op->length, p, end);
       if (p == NULL)
         return NULL;
     }
-  if (op->action_code != svn_txdelta_new)
+  if (action != svn_txdelta_new)
     {
       p = decode_size(&op->offset, p, end);
       if (p == NULL)

Modified: subversion/branches/ignore-mergeinfo/subversion/libsvn_delta/xdelta.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/libsvn_delta/xdelta.c?rev=984206&r1=984205&r2=984206&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/libsvn_delta/xdelta.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/libsvn_delta/xdelta.c Tue Aug 10 20:55:56 2010
@@ -308,7 +308,7 @@ compute_delta(svn_txdelta__ops_baton_t *
 {
   struct blocks blocks;
   struct adler32 rolling;
-  apr_size_t sz, lo, hi, pending_insert_start = 0, pending_insert_len = 0;
+  apr_size_t sz, lo, pending_insert_start = 0, pending_insert_len = 0;
 
   /* If the size of the target is smaller than the match blocksize, just
      insert the entire target.  */
@@ -324,7 +324,7 @@ compute_delta(svn_txdelta__ops_baton_t *
 
   /* Initialize our rolling checksum.  */
   init_adler32(&rolling, b, MATCH_BLOCKSIZE);
-  for (sz = bsize, lo = 0, hi = MATCH_BLOCKSIZE; lo < sz;)
+  for (sz = bsize, lo = 0; lo < sz;)
     {
       apr_size_t apos = 0;
       apr_size_t alen = 1;
@@ -362,7 +362,6 @@ compute_delta(svn_txdelta__ops_baton_t *
             adler32_in(&rolling, b[next + MATCH_BLOCKSIZE]);
         }
       lo = next;
-      hi = lo + MATCH_BLOCKSIZE;
     }
 
   /* If we still have an insert pending at the end, throw it in.  */

Modified: subversion/branches/ignore-mergeinfo/subversion/libsvn_diff/diff3.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/libsvn_diff/diff3.c?rev=984206&r1=984205&r2=984206&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/libsvn_diff/diff3.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/libsvn_diff/diff3.c Tue Aug 10 20:55:56 2010
@@ -305,7 +305,6 @@ svn_diff_diff3(svn_diff_t **diff,
     apr_off_t modified_sync;
     apr_off_t latest_sync;
     apr_off_t common_length;
-    apr_off_t original_length;
     apr_off_t modified_length;
     apr_off_t latest_length;
     svn_boolean_t is_modified;
@@ -407,7 +406,6 @@ svn_diff_diff3(svn_diff_t **diff,
 
         if (is_modified || is_latest)
           {
-            original_length = original_sync - original_start;
             modified_length = modified_sync - modified_start;
             latest_length = latest_sync - latest_start;
 

Modified: subversion/branches/ignore-mergeinfo/subversion/libsvn_diff/diff_memory.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/libsvn_diff/diff_memory.c?rev=984206&r1=984205&r2=984206&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/libsvn_diff/diff_memory.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/libsvn_diff/diff_memory.c Tue Aug 10 20:55:56 2010
@@ -46,7 +46,7 @@ typedef struct source_tokens_t
   apr_size_t next_token;
 
   /* The source, containing the in-memory data to be diffed */
-  svn_string_t *source;
+  const svn_string_t *source;
 
   /* The last token ends with a newline character (sequence) */
   svn_boolean_t ends_without_eol;
@@ -214,7 +214,7 @@ fill_source_tokens(source_tokens_t *src,
 
   src->tokens = apr_array_make(pool, 0, sizeof(svn_string_t *));
   src->next_token = 0;
-  src->source = (svn_string_t *)text;
+  src->source = text;
 
   for (startp = curp = text->data, endp = curp + text->len;
        curp != endp; curp++)

Modified: subversion/branches/ignore-mergeinfo/subversion/libsvn_diff/parse-diff.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/libsvn_diff/parse-diff.c?rev=984206&r1=984205&r2=984206&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/libsvn_diff/parse-diff.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/libsvn_diff/parse-diff.c Tue Aug 10 20:55:56 2010
@@ -260,14 +260,16 @@ reverse_diff_transformer(svn_stringbuf_t
 
 /* Return the next *HUNK from a PATCH, using STREAM to read data
  * from the patch file. If no hunk can be found, set *HUNK to NULL.
- * If REVERSE is TRUE, invert the hunk while parsing it.
- * Allocate results in RESULT_POOL.
- * Use SCRATCH_POOL for all other allocations. */
+ * If REVERSE is TRUE, invert the hunk while parsing it. If
+ * IGNORE_WHiTESPACES is TRUE, let lines without leading spaces be
+ * recognized as context lines.  Allocate results in RESULT_POOL.  Use
+ * SCRATCH_POOL for all other allocations. */
 static svn_error_t *
 parse_next_hunk(svn_hunk_t **hunk,
                 svn_patch_t *patch,
                 svn_stream_t *stream,
                 svn_boolean_t reverse,
+                svn_boolean_t ignore_whitespace,
                 apr_pool_t *result_pool,
                 apr_pool_t *scratch_pool)
 {
@@ -281,6 +283,7 @@ parse_next_hunk(svn_hunk_t **hunk,
   svn_stream_t *original_text;
   svn_stream_t *modified_text;
   svn_linenum_t original_lines;
+  svn_linenum_t modified_lines;
   svn_linenum_t leading_context;
   svn_linenum_t trailing_context;
   svn_boolean_t changed_line_seen;
@@ -354,27 +357,42 @@ parse_next_hunk(svn_hunk_t **hunk,
 
           c = line->data[0];
           /* Tolerate chopped leading spaces on empty lines. */
-          if (original_lines > 0 && (c == ' ' || (! eof && line->len == 0)))
+          if (original_lines > 0 && modified_lines > 0 
+              && ((c == ' ')
+              || (! eof && line->len == 0)
+              || (ignore_whitespace && c != del && c != add)))
             {
               hunk_seen = TRUE;
               original_lines--;
+              modified_lines--;
               if (changed_line_seen)
                 trailing_context++;
               else
                 leading_context++;
             }
-          else if (c == add || c == del)
+          else if (original_lines > 0 && c == del)
             {
               hunk_seen = TRUE;
               changed_line_seen = TRUE;
 
-              /* A hunk may have context in the middle. We only want the
-                 last lines of context. */
+              /* A hunk may have context in the middle. We only want
+                 trailing lines of context. */
               if (trailing_context > 0)
                 trailing_context = 0;
 
-              if (original_lines > 0 && c == del)
-                original_lines--;
+              original_lines--;
+            }
+          else if (modified_lines > 0 && c == add)
+            {
+              hunk_seen = TRUE;
+              changed_line_seen = TRUE;
+
+              /* A hunk may have context in the middle. We only want
+                 trailing lines of context. */
+              if (trailing_context > 0)
+                trailing_context = 0;
+
+              modified_lines--;
             }
           else
             {
@@ -395,7 +413,10 @@ parse_next_hunk(svn_hunk_t **hunk,
               in_hunk = parse_hunk_header(line->data, *hunk, reverse,
                                           iterpool);
               if (in_hunk)
-                original_lines = (*hunk)->original_length;
+                {
+                  original_lines = (*hunk)->original_length;
+                  modified_lines = (*hunk)->modified_length;
+                }
             }
           else if (starts_with(line->data, minus))
             /* This could be a header of another patch. Bail out. */
@@ -500,6 +521,7 @@ svn_error_t *
 svn_diff_parse_next_patch(svn_patch_t **patch,
                           apr_file_t *patch_file,
                           svn_boolean_t reverse,
+                          svn_boolean_t ignore_whitespace,
                           apr_pool_t *result_pool,
                           apr_pool_t *scratch_pool)
 {
@@ -607,7 +629,7 @@ svn_diff_parse_next_patch(svn_patch_t **
           svn_pool_clear(iterpool);
 
           SVN_ERR(parse_next_hunk(&hunk, *patch, stream, reverse,
-                                  result_pool, iterpool));
+                                  ignore_whitespace, result_pool, iterpool));
           if (hunk)
             APR_ARRAY_PUSH((*patch)->hunks, svn_hunk_t *) = hunk;
         }

Modified: subversion/branches/ignore-mergeinfo/subversion/libsvn_fs/fs-loader.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/libsvn_fs/fs-loader.c?rev=984206&r1=984205&r2=984206&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/libsvn_fs/fs-loader.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/libsvn_fs/fs-loader.c Tue Aug 10 20:55:56 2010
@@ -263,7 +263,7 @@ fs_library_vtable(fs_library_vtable_t **
   SVN_ERR(svn_fs_type(&fs_type, path, pool));
 
   /* Fetch the library vtable by name, now that we've chosen one. */
-  return get_library_vtable(vtable, fs_type, pool);
+  return svn_error_return(get_library_vtable(vtable, fs_type, pool));
 }
 
 static svn_error_t *
@@ -279,7 +279,7 @@ write_fs_type(const char *path, const ch
   SVN_ERR(svn_io_file_write_full(file, fs_type, strlen(fs_type), NULL,
                                  pool));
   SVN_ERR(svn_io_file_write_full(file, "\n", 1, NULL, pool));
-  return svn_io_file_close(file, pool);
+  return svn_error_return(svn_io_file_close(file, pool));
 }
 
 
@@ -419,9 +419,9 @@ svn_fs_create(svn_fs_t **fs_p, const cha
   if (err)
     {
       svn_error_clear(err2);
-      return err;
+      return svn_error_return(err);
     }
-  return err2;
+  return svn_error_return(err2);
 }
 
 svn_error_t *
@@ -440,9 +440,9 @@ svn_fs_open(svn_fs_t **fs_p, const char 
   if (err)
     {
       svn_error_clear(err2);
-      return err;
+      return svn_error_return(err);
     }
-  return err2;
+  return svn_error_return(err2);
 }
 
 svn_error_t *
@@ -461,9 +461,9 @@ svn_fs_upgrade(const char *path, apr_poo
   if (err)
     {
       svn_error_clear(err2);
-      return err;
+      return svn_error_return(err);
     }
-  return err2;
+  return svn_error_return(err2);
 }
 
 const char *
@@ -478,7 +478,7 @@ svn_fs_delete_fs(const char *path, apr_p
   fs_library_vtable_t *vtable;
 
   SVN_ERR(fs_library_vtable(&vtable, path, pool));
-  return vtable->delete_fs(path, pool);
+  return svn_error_return(vtable->delete_fs(path, pool));
 }
 
 svn_error_t *
@@ -491,7 +491,7 @@ svn_fs_hotcopy(const char *src_path, con
   SVN_ERR(svn_fs_type(&fs_type, src_path, pool));
   SVN_ERR(get_library_vtable(&vtable, fs_type, pool));
   SVN_ERR(vtable->hotcopy(src_path, dest_path, clean, pool));
-  return write_fs_type(dest_path, fs_type, pool);
+  return svn_error_return(write_fs_type(dest_path, fs_type, pool));
 }
 
 svn_error_t *
@@ -516,9 +516,9 @@ svn_fs_pack(const char *path,
   if (err)
     {
       svn_error_clear(err2);
-      return err;
+      return svn_error_return(err);
     }
-  return err2;
+  return svn_error_return(err2);
 }
 
 svn_error_t *
@@ -539,11 +539,11 @@ svn_fs_recover(const char *path,
   if (err)
     {
       svn_error_clear(err2);
-      return err;
+      return svn_error_return(err);
     }
   if (! err2)
     err2 = vtable->recover(fs, cancel_func, cancel_baton, pool);
-  return err2;
+  return svn_error_return(err2);
 }
 
 
@@ -569,9 +569,9 @@ svn_fs_create_berkeley(svn_fs_t *fs, con
   if (err)
     {
       svn_error_clear(err2);
-      return err;
+      return svn_error_return(err);
     }
-  return err2;
+  return svn_error_return(err2);
 }
 
 svn_error_t *
@@ -588,9 +588,9 @@ svn_fs_open_berkeley(svn_fs_t *fs, const
   if (err)
     {
       svn_error_clear(err2);
-      return err;
+      return svn_error_return(err);
     }
-  return err2;
+  return svn_error_return(err2);
 }
 
 const char *
@@ -602,27 +602,28 @@ svn_fs_berkeley_path(svn_fs_t *fs, apr_p
 svn_error_t *
 svn_fs_delete_berkeley(const char *path, apr_pool_t *pool)
 {
-  return svn_fs_delete_fs(path, pool);
+  return svn_error_return(svn_fs_delete_fs(path, pool));
 }
 
 svn_error_t *
 svn_fs_hotcopy_berkeley(const char *src_path, const char *dest_path,
                         svn_boolean_t clean_logs, apr_pool_t *pool)
 {
-  return svn_fs_hotcopy(src_path, dest_path, clean_logs, pool);
+  return svn_error_return(svn_fs_hotcopy(src_path, dest_path, clean_logs,
+                                         pool));
 }
 
 svn_error_t *
 svn_fs_berkeley_recover(const char *path, apr_pool_t *pool)
 {
-  return svn_fs_recover(path, NULL, NULL, pool);
+  return svn_error_return(svn_fs_recover(path, NULL, NULL, pool));
 }
 
 svn_error_t *
 svn_fs_set_berkeley_errcall(svn_fs_t *fs,
                             void (*handler)(const char *errpfx, char *msg))
 {
-  return fs->vtable->bdb_set_errcall(fs, handler);
+  return svn_error_return(fs->vtable->bdb_set_errcall(fs, handler));
 }
 
 svn_error_t *
@@ -634,7 +635,8 @@ svn_fs_berkeley_logfiles(apr_array_heade
   fs_library_vtable_t *vtable;
 
   SVN_ERR(fs_library_vtable(&vtable, path, pool));
-  return vtable->bdb_logfiles(logfiles, path, only_unused, pool);
+  return svn_error_return(vtable->bdb_logfiles(logfiles, path, only_unused,
+                                               pool));
 }
 
 
@@ -644,7 +646,7 @@ svn_error_t *
 svn_fs_begin_txn2(svn_fs_txn_t **txn_p, svn_fs_t *fs, svn_revnum_t rev,
                   apr_uint32_t flags, apr_pool_t *pool)
 {
-  return fs->vtable->begin_txn(txn_p, fs, rev, flags, pool);
+  return svn_error_return(fs->vtable->begin_txn(txn_p, fs, rev, flags, pool));
 }
 
 
@@ -652,7 +654,7 @@ svn_error_t *
 svn_fs_begin_txn(svn_fs_txn_t **txn_p, svn_fs_t *fs, svn_revnum_t rev,
                  apr_pool_t *pool)
 {
-  return svn_fs_begin_txn2(txn_p, fs, rev, 0, pool);
+  return svn_error_return(svn_fs_begin_txn2(txn_p, fs, rev, 0, pool));
 }
 
 svn_error_t *
@@ -661,7 +663,8 @@ svn_fs__begin_obliteration_txn(svn_fs_tx
                                svn_revnum_t rev,
                                apr_pool_t *pool)
 {
-  return fs->vtable->begin_obliteration_txn(txn_p, fs, rev, pool);
+  return svn_error_return(fs->vtable->begin_obliteration_txn(txn_p, fs, rev,
+                                                             pool));
 }
 
 svn_error_t *
@@ -703,13 +706,13 @@ svn_fs__commit_obliteration_txn(svn_revn
 svn_error_t *
 svn_fs_abort_txn(svn_fs_txn_t *txn, apr_pool_t *pool)
 {
-  return txn->vtable->abort(txn, pool);
+  return svn_error_return(txn->vtable->abort(txn, pool));
 }
 
 svn_error_t *
 svn_fs_purge_txn(svn_fs_t *fs, const char *txn_id, apr_pool_t *pool)
 {
-  return fs->vtable->purge_txn(fs, txn_id, pool);
+  return svn_error_return(fs->vtable->purge_txn(fs, txn_id, pool));
 }
 
 svn_error_t *
@@ -729,41 +732,41 @@ svn_error_t *
 svn_fs_open_txn(svn_fs_txn_t **txn, svn_fs_t *fs, const char *name,
                 apr_pool_t *pool)
 {
-  return fs->vtable->open_txn(txn, fs, name, pool);
+  return svn_error_return(fs->vtable->open_txn(txn, fs, name, pool));
 }
 
 svn_error_t *
 svn_fs_list_transactions(apr_array_header_t **names_p, svn_fs_t *fs,
                          apr_pool_t *pool)
 {
-  return fs->vtable->list_transactions(names_p, fs, pool);
+  return svn_error_return(fs->vtable->list_transactions(names_p, fs, pool));
 }
 
 svn_error_t *
 svn_fs_txn_prop(svn_string_t **value_p, svn_fs_txn_t *txn,
                 const char *propname, apr_pool_t *pool)
 {
-  return txn->vtable->get_prop(value_p, txn, propname, pool);
+  return svn_error_return(txn->vtable->get_prop(value_p, txn, propname, pool));
 }
 
 svn_error_t *
 svn_fs_txn_proplist(apr_hash_t **table_p, svn_fs_txn_t *txn, apr_pool_t *pool)
 {
-  return txn->vtable->get_proplist(table_p, txn, pool);
+  return svn_error_return(txn->vtable->get_proplist(table_p, txn, pool));
 }
 
 svn_error_t *
 svn_fs_change_txn_prop(svn_fs_txn_t *txn, const char *name,
                        const svn_string_t *value, apr_pool_t *pool)
 {
-  return txn->vtable->change_prop(txn, name, value, pool);
+  return svn_error_return(txn->vtable->change_prop(txn, name, value, pool));
 }
 
 svn_error_t *
 svn_fs_change_txn_props(svn_fs_txn_t *txn, const apr_array_header_t *props,
                         apr_pool_t *pool)
 {
-  return txn->vtable->change_props(txn, props, pool);
+  return svn_error_return(txn->vtable->change_props(txn, props, pool));
 }
 
 
@@ -776,7 +779,7 @@ svn_fs_revision_root(svn_fs_root_t **roo
   /* We create a subpool for each root object to allow us to implement
      svn_fs_close_root.  */
   apr_pool_t *subpool = svn_pool_create(pool);
-  return fs->vtable->revision_root(root_p, fs, rev, subpool);
+  return svn_error_return(fs->vtable->revision_root(root_p, fs, rev, subpool));
 }
 
 svn_error_t *
@@ -785,7 +788,7 @@ svn_fs_txn_root(svn_fs_root_t **root_p, 
   /* We create a subpool for each root object to allow us to implement
      svn_fs_close_root.  */
   apr_pool_t *subpool = svn_pool_create(pool);
-  return txn->vtable->root(root_p, txn, subpool);
+  return svn_error_return(txn->vtable->root(root_p, txn, subpool));
 }
 
 void
@@ -871,14 +874,15 @@ svn_error_t *
 svn_fs_check_path(svn_node_kind_t *kind_p, svn_fs_root_t *root,
                   const char *path, apr_pool_t *pool)
 {
-  return root->vtable->check_path(kind_p, root, path, pool);
+  return svn_error_return(root->vtable->check_path(kind_p, root, path, pool));
 }
 
 svn_error_t *
 svn_fs_node_history(svn_fs_history_t **history_p, svn_fs_root_t *root,
                     const char *path, apr_pool_t *pool)
 {
-  return root->vtable->node_history(history_p, root, path, pool);
+  return svn_error_return(root->vtable->node_history(history_p, root, path,
+                                                     pool));
 }
 
 svn_error_t *
@@ -907,42 +911,47 @@ svn_error_t *
 svn_fs_node_id(const svn_fs_id_t **id_p, svn_fs_root_t *root,
                const char *path, apr_pool_t *pool)
 {
-  return root->vtable->node_id(id_p, root, path, pool);
+  return svn_error_return(root->vtable->node_id(id_p, root, path, pool));
 }
 
 svn_error_t *
 svn_fs_node_created_rev(svn_revnum_t *revision, svn_fs_root_t *root,
                         const char *path, apr_pool_t *pool)
 {
-  return root->vtable->node_created_rev(revision, root, path, pool);
+  return svn_error_return(root->vtable->node_created_rev(revision, root, path,
+                                                         pool));
 }
 
 svn_error_t *
 svn_fs_node_origin_rev(svn_revnum_t *revision, svn_fs_root_t *root,
                        const char *path, apr_pool_t *pool)
 {
-  return root->vtable->node_origin_rev(revision, root, path, pool);
+  return svn_error_return(root->vtable->node_origin_rev(revision, root, path,
+                                                        pool));
 }
 
 svn_error_t *
 svn_fs_node_created_path(const char **created_path, svn_fs_root_t *root,
                          const char *path, apr_pool_t *pool)
 {
-  return root->vtable->node_created_path(created_path, root, path, pool);
+  return svn_error_return(root->vtable->node_created_path(created_path, root,
+                                                          path, pool));
 }
 
 svn_error_t *
 svn_fs_node_prop(svn_string_t **value_p, svn_fs_root_t *root,
                  const char *path, const char *propname, apr_pool_t *pool)
 {
-  return root->vtable->node_prop(value_p, root, path, propname, pool);
+  return svn_error_return(root->vtable->node_prop(value_p, root, path,
+                                                  propname, pool));
 }
 
 svn_error_t *
 svn_fs_node_proplist(apr_hash_t **table_p, svn_fs_root_t *root,
                      const char *path, apr_pool_t *pool)
 {
-  return root->vtable->node_proplist(table_p, root, path, pool);
+  return svn_error_return(root->vtable->node_proplist(table_p, root, path,
+                                                      pool));
 }
 
 svn_error_t *
@@ -950,7 +959,8 @@ svn_fs_change_node_prop(svn_fs_root_t *r
                         const char *name, const svn_string_t *value,
                         apr_pool_t *pool)
 {
-  return root->vtable->change_node_prop(root, path, name, value, pool);
+  return svn_error_return(root->vtable->change_node_prop(root, path, name,
+                                                         value, pool));
 }
 
 svn_error_t *
@@ -958,22 +968,26 @@ svn_fs_props_changed(svn_boolean_t *chan
                      const char *path1, svn_fs_root_t *root2,
                      const char *path2, apr_pool_t *pool)
 {
-  return root1->vtable->props_changed(changed_p, root1, path1, root2, path2,
-                                      pool);
+  return svn_error_return(root1->vtable->props_changed(changed_p,
+                                                       root1, path1,
+                                                       root2, path2,
+                                                       pool));
 }
 
 svn_error_t *
 svn_fs_copied_from(svn_revnum_t *rev_p, const char **path_p,
                    svn_fs_root_t *root, const char *path, apr_pool_t *pool)
 {
-  return root->vtable->copied_from(rev_p, path_p, root, path, pool);
+  return svn_error_return(root->vtable->copied_from(rev_p, path_p, root, path,
+                                                    pool));
 }
 
 svn_error_t *
 svn_fs_closest_copy(svn_fs_root_t **root_p, const char **path_p,
                     svn_fs_root_t *root, const char *path, apr_pool_t *pool)
 {
-  return root->vtable->closest_copy(root_p, path_p, root, path, pool);
+  return svn_error_return(root->vtable->closest_copy(root_p, path_p,
+                                                     root, path, pool));
 }
 
 svn_error_t *
@@ -984,8 +998,10 @@ svn_fs_get_mergeinfo(svn_mergeinfo_catal
                      svn_boolean_t include_descendants,
                      apr_pool_t *pool)
 {
-  return root->vtable->get_mergeinfo(catalog, root, paths, inherit,
-                                     include_descendants, pool);
+  return svn_error_return(root->vtable->get_mergeinfo(catalog, root, paths,
+                                                      inherit,
+                                                      include_descendants,
+                                                      pool));
 }
 
 svn_error_t *
@@ -994,29 +1010,32 @@ svn_fs_merge(const char **conflict_p, sv
              const char *target_path, svn_fs_root_t *ancestor_root,
              const char *ancestor_path, apr_pool_t *pool)
 {
-  return target_root->vtable->merge(conflict_p, source_root, source_path,
-                                    target_root, target_path, ancestor_root,
-                                    ancestor_path, pool);
+  return svn_error_return(target_root->vtable->merge(conflict_p,
+                                                     source_root, source_path,
+                                                     target_root, target_path,
+                                                     ancestor_root,
+                                                     ancestor_path, pool));
 }
 
 svn_error_t *
 svn_fs_dir_entries(apr_hash_t **entries_p, svn_fs_root_t *root,
                    const char *path, apr_pool_t *pool)
 {
-  return root->vtable->dir_entries(entries_p, root, path, pool);
+  return svn_error_return(root->vtable->dir_entries(entries_p, root, path,
+                                                    pool));
 }
 
 svn_error_t *
 svn_fs_make_dir(svn_fs_root_t *root, const char *path, apr_pool_t *pool)
 {
   SVN_ERR(path_valid(path, pool));
-  return root->vtable->make_dir(root, path, pool);
+  return svn_error_return(root->vtable->make_dir(root, path, pool));
 }
 
 svn_error_t *
 svn_fs_delete(svn_fs_root_t *root, const char *path, apr_pool_t *pool)
 {
-  return root->vtable->delete_node(root, path, pool);
+  return svn_error_return(root->vtable->delete_node(root, path, pool));
 }
 
 svn_error_t *
@@ -1024,21 +1043,24 @@ svn_fs_copy(svn_fs_root_t *from_root, co
             svn_fs_root_t *to_root, const char *to_path, apr_pool_t *pool)
 {
   SVN_ERR(path_valid(to_path, pool));
-  return to_root->vtable->copy(from_root, from_path, to_root, to_path, pool);
+  return svn_error_return(to_root->vtable->copy(from_root, from_path,
+                                                to_root, to_path, pool));
 }
 
 svn_error_t *
 svn_fs_revision_link(svn_fs_root_t *from_root, svn_fs_root_t *to_root,
                      const char *path, apr_pool_t *pool)
 {
-  return to_root->vtable->revision_link(from_root, to_root, path, pool);
+  return svn_error_return(to_root->vtable->revision_link(from_root, to_root,
+                                                         path, pool));
 }
 
 svn_error_t *
 svn_fs_file_length(svn_filesize_t *length_p, svn_fs_root_t *root,
                    const char *path, apr_pool_t *pool)
 {
-  return root->vtable->file_length(length_p, root, path, pool);
+  return svn_error_return(root->vtable->file_length(length_p, root, path,
+                                                    pool));
 }
 
 svn_error_t *
@@ -1086,14 +1108,15 @@ svn_error_t *
 svn_fs_file_contents(svn_stream_t **contents, svn_fs_root_t *root,
                      const char *path, apr_pool_t *pool)
 {
-  return root->vtable->file_contents(contents, root, path, pool);
+  return svn_error_return(root->vtable->file_contents(contents, root, path,
+                                                      pool));
 }
 
 svn_error_t *
 svn_fs_make_file(svn_fs_root_t *root, const char *path, apr_pool_t *pool)
 {
   SVN_ERR(path_valid(path, pool));
-  return root->vtable->make_file(root, path, pool);
+  return svn_error_return(root->vtable->make_file(root, path, pool));
 }
 
 svn_error_t *
@@ -1111,8 +1134,13 @@ svn_fs_apply_textdelta(svn_txdelta_windo
   SVN_ERR(svn_checksum_parse_hex(&result, svn_checksum_md5, result_checksum,
                                  pool));
 
-  return root->vtable->apply_textdelta(contents_p, contents_baton_p, root,
-                                       path, base, result, pool);
+  return svn_error_return(root->vtable->apply_textdelta(contents_p,
+                                                        contents_baton_p,
+                                                        root,
+                                                        path,
+                                                        base,
+                                                        result,
+                                                        pool));
 }
 
 svn_error_t *
@@ -1127,7 +1155,8 @@ svn_fs_apply_text(svn_stream_t **content
   SVN_ERR(svn_checksum_parse_hex(&result, svn_checksum_md5, result_checksum,
                                  pool));
 
-  return root->vtable->apply_text(contents_p, root, path, result, pool);
+  return svn_error_return(root->vtable->apply_text(contents_p, root, path,
+                                                   result, pool));
 }
 
 svn_error_t *
@@ -1135,41 +1164,46 @@ svn_fs_contents_changed(svn_boolean_t *c
                         const char *path1, svn_fs_root_t *root2,
                         const char *path2, apr_pool_t *pool)
 {
-  return root1->vtable->contents_changed(changed_p, root1, path1, root2,
-                                         path2, pool);
+  return svn_error_return(root1->vtable->contents_changed(changed_p,
+                                                          root1, path1,
+                                                          root2, path2,
+                                                          pool));
 }
 
 svn_error_t *
 svn_fs_youngest_rev(svn_revnum_t *youngest_p, svn_fs_t *fs, apr_pool_t *pool)
 {
-  return fs->vtable->youngest_rev(youngest_p, fs, pool);
+  return svn_error_return(fs->vtable->youngest_rev(youngest_p, fs, pool));
 }
 
 svn_error_t *
 svn_fs_deltify_revision(svn_fs_t *fs, svn_revnum_t revision, apr_pool_t *pool)
 {
-  return fs->vtable->deltify(fs, revision, pool);
+  return svn_error_return(fs->vtable->deltify(fs, revision, pool));
 }
 
 svn_error_t *
 svn_fs_revision_prop(svn_string_t **value_p, svn_fs_t *fs, svn_revnum_t rev,
                      const char *propname, apr_pool_t *pool)
 {
-  return fs->vtable->revision_prop(value_p, fs, rev, propname, pool);
+  return svn_error_return(fs->vtable->revision_prop(value_p, fs, rev,
+                                                    propname, pool));
 }
 
 svn_error_t *
 svn_fs_revision_proplist(apr_hash_t **table_p, svn_fs_t *fs, svn_revnum_t rev,
                          apr_pool_t *pool)
 {
-  return fs->vtable->revision_proplist(table_p, fs, rev, pool);
+  return svn_error_return(fs->vtable->revision_proplist(table_p, fs, rev,
+                                                        pool));
 }
 
 svn_error_t *
 svn_fs_change_rev_prop(svn_fs_t *fs, svn_revnum_t rev, const char *name,
                        const svn_string_t *value, apr_pool_t *pool)
 {
-  return fs->vtable->change_rev_prop(fs, rev, name, value, pool);
+  return svn_error_return(fs->vtable->change_rev_prop(fs, rev, name, value,
+                                                      pool));
 }
 
 svn_error_t *
@@ -1179,15 +1213,16 @@ svn_fs_get_file_delta_stream(svn_txdelta
                              svn_fs_root_t *target_root,
                              const char *target_path, apr_pool_t *pool)
 {
-  return target_root->vtable->get_file_delta_stream(stream_p, source_root,
-                                                    source_path, target_root,
-                                                    target_path, pool);
+  return svn_error_return(target_root->vtable->get_file_delta_stream(
+                            stream_p,
+                            source_root, source_path,
+                            target_root, target_path, pool));
 }
 
 svn_error_t *
 svn_fs_get_uuid(svn_fs_t *fs, const char **uuid, apr_pool_t *pool)
 {
-  return fs->vtable->get_uuid(fs, uuid, pool);
+  return svn_error_return(fs->vtable->get_uuid(fs, uuid, pool));
 }
 
 svn_error_t *
@@ -1205,7 +1240,7 @@ svn_fs_set_uuid(svn_fs_t *fs, const char
         return svn_error_createf(SVN_ERR_BAD_UUID, NULL,
                                  _("Malformed UUID '%s'"), uuid);
     }
-  return fs->vtable->set_uuid(fs, uuid, pool);
+  return svn_error_return(fs->vtable->set_uuid(fs, uuid, pool));
 }
 
 svn_error_t *
@@ -1229,28 +1264,30 @@ svn_fs_lock(svn_lock_t **lock, svn_fs_t 
           (SVN_ERR_INCORRECT_PARAMS, NULL,
            _("Negative expiration date passed to svn_fs_lock"));
 
-  return fs->vtable->lock(lock, fs, path, token, comment, is_dav_comment,
-                          expiration_date, current_rev, steal_lock, pool);
+  return svn_error_return(fs->vtable->lock(lock, fs, path, token, comment,
+                                           is_dav_comment, expiration_date,
+                                           current_rev, steal_lock, pool));
 }
 
 svn_error_t *
 svn_fs_generate_lock_token(const char **token, svn_fs_t *fs, apr_pool_t *pool)
 {
-  return fs->vtable->generate_lock_token(token, fs, pool);
+  return svn_error_return(fs->vtable->generate_lock_token(token, fs, pool));
 }
 
 svn_error_t *
 svn_fs_unlock(svn_fs_t *fs, const char *path, const char *token,
               svn_boolean_t break_lock, apr_pool_t *pool)
 {
-  return fs->vtable->unlock(fs, path, token, break_lock, pool);
+  return svn_error_return(fs->vtable->unlock(fs, path, token, break_lock,
+                                             pool));
 }
 
 svn_error_t *
 svn_fs_get_lock(svn_lock_t **lock, svn_fs_t *fs, const char *path,
                 apr_pool_t *pool)
 {
-  return fs->vtable->get_lock(lock, fs, path, pool);
+  return svn_error_return(fs->vtable->get_lock(lock, fs, path, pool));
 }
 
 svn_error_t *
@@ -1259,8 +1296,8 @@ svn_fs_get_locks(svn_fs_t *fs, const cha
                  void *get_locks_baton,
                  apr_pool_t *pool)
 {
-  return fs->vtable->get_locks(fs, path, get_locks_func,
-                               get_locks_baton, pool);
+  return svn_error_return(fs->vtable->get_locks(fs, path, get_locks_func,
+                                                get_locks_baton, pool));
 }
 
 
@@ -1272,14 +1309,16 @@ svn_fs_history_prev(svn_fs_history_t **p
                     svn_fs_history_t *history, svn_boolean_t cross_copies,
                     apr_pool_t *pool)
 {
-  return history->vtable->prev(prev_history_p, history, cross_copies, pool);
+  return svn_error_return(history->vtable->prev(prev_history_p, history,
+                                                cross_copies, pool));
 }
 
 svn_error_t *
 svn_fs_history_location(const char **path, svn_revnum_t *revision,
                         svn_fs_history_t *history, apr_pool_t *pool)
 {
-  return history->vtable->location(path, revision, history, pool);
+  return svn_error_return(history->vtable->location(path, revision, history,
+                                                    pool));
 }
 
 

Modified: subversion/branches/ignore-mergeinfo/subversion/libsvn_fs_base/bdb/env.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/libsvn_fs_base/bdb/env.c?rev=984206&r1=984205&r2=984206&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/libsvn_fs_base/bdb/env.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/libsvn_fs_base/bdb/env.c Tue Aug 10 20:55:56 2010
@@ -376,7 +376,7 @@ clear_cache(void *data)
 static volatile svn_atomic_t bdb_cache_state;
 
 static svn_error_t *
-bdb_init_cb(apr_pool_t *pool)
+bdb_init_cb(void *baton, apr_pool_t *pool)
 {
 #if APR_HAS_THREADS
   apr_status_t apr_err;
@@ -403,7 +403,7 @@ bdb_init_cb(apr_pool_t *pool)
 svn_error_t *
 svn_fs_bdb__init(apr_pool_t* pool)
 {
-  return svn_atomic__init_once(&bdb_cache_state, bdb_init_cb, pool);
+  return svn_atomic__init_once(&bdb_cache_state, bdb_init_cb, NULL, pool);
 }
 
 static APR_INLINE void

Modified: subversion/branches/ignore-mergeinfo/subversion/libsvn_fs_base/fs.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/libsvn_fs_base/fs.c?rev=984206&r1=984205&r2=984206&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/libsvn_fs_base/fs.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/libsvn_fs_base/fs.c Tue Aug 10 20:55:56 2010
@@ -657,20 +657,22 @@ base_create(svn_fs_t *fs, const char *pa
   int format = SVN_FS_BASE__FORMAT_NUMBER;
   svn_error_t *svn_err;
 
-  /* See if we had an explicitly specified pre-1.5-compatible.  */
-  if (fs->config && apr_hash_get(fs->config, SVN_FS_CONFIG_PRE_1_6_COMPATIBLE,
-                                 APR_HASH_KEY_STRING))
-    format = 3;
-
-  /* See if we had an explicitly specified pre-1.5-compatible.  */
-  if (fs->config && apr_hash_get(fs->config, SVN_FS_CONFIG_PRE_1_5_COMPATIBLE,
-                                 APR_HASH_KEY_STRING))
-    format = 2;
-
-  /* See if we had an explicitly specified pre-1.4-compatible.  */
-  if (fs->config && apr_hash_get(fs->config, SVN_FS_CONFIG_PRE_1_4_COMPATIBLE,
-                                 APR_HASH_KEY_STRING))
-    format = 1;
+  /* See if compatibility with older versions was explicitly requested. */
+  if (fs->config)
+    {
+      if (apr_hash_get(fs->config, SVN_FS_CONFIG_PRE_1_4_COMPATIBLE,
+                                   APR_HASH_KEY_STRING))
+        format = 1;
+      else if (apr_hash_get(fs->config, SVN_FS_CONFIG_PRE_1_5_COMPATIBLE,
+                                        APR_HASH_KEY_STRING))
+        format = 2;
+      else if (apr_hash_get(fs->config, SVN_FS_CONFIG_PRE_1_6_COMPATIBLE,
+                                        APR_HASH_KEY_STRING))
+        format = 3;
+      else if (apr_hash_get(fs->config, SVN_FS_CONFIG_PRE_1_7_COMPATIBLE,
+                                        APR_HASH_KEY_STRING))
+        format = 4;
+    }
 
   /* Create the environment and databases. */
   svn_err = open_databases(fs, TRUE, format, path, pool);

Modified: subversion/branches/ignore-mergeinfo/subversion/libsvn_fs_base/lock.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/libsvn_fs_base/lock.c?rev=984206&r1=984205&r2=984206&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/libsvn_fs_base/lock.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/libsvn_fs_base/lock.c Tue Aug 10 20:55:56 2010
@@ -85,7 +85,6 @@ txn_body_lock(void *baton, trail_t *trai
   struct lock_args *args = baton;
   svn_node_kind_t kind = svn_node_file;
   svn_lock_t *existing_lock;
-  const char *fs_username;
   svn_lock_t *lock;
 
   SVN_ERR(svn_fs_base__get_path_kind(&kind, args->path, trail, trail->pool));
@@ -114,8 +113,6 @@ txn_body_lock(void *baton, trail_t *trai
   /* There better be a username attached to the fs. */
   if (!trail->fs->access_ctx || !trail->fs->access_ctx->username)
     return SVN_FS__ERR_NO_USER(trail->fs);
-  else
-    fs_username = trail->fs->access_ctx->username; /* for convenience */
 
   /* Is the caller attempting to lock an out-of-date working file? */
   if (SVN_IS_VALID_REVNUM(args->current_rev))