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(©from_url, ©from_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(©from_url, ©from_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))