Author: julianfoad
Date: Wed Apr 4 12:16:25 2012
New Revision: 1309354
URL: http://svn.apache.org/viewvc?rev=1309354&view=rev
Log:
Convert svn_client__get_history_as_mergeinfo() to use svn_client__pathrev_t
as its input coordinates.
* subversion/libsvn_client/mergeinfo.h,
subversion/libsvn_client/mergeinfo.c
(svn_client__get_history_as_mergeinfo): Change the parameter list.
(svn_client_mergeinfo_log): Adjust the implementation accordingly.
* subversion/libsvn_client/merge.c
(...everywhere...): Adjust accordingly.
* subversion/libsvn_client/ra.c
(svn_client__get_youngest_common_ancestor): Adjust accordingly.
Modified:
subversion/trunk/subversion/libsvn_client/merge.c
subversion/trunk/subversion/libsvn_client/mergeinfo.c
subversion/trunk/subversion/libsvn_client/mergeinfo.h
subversion/trunk/subversion/libsvn_client/ra.c
Modified: subversion/trunk/subversion/libsvn_client/merge.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/merge.c?rev=1309354&r1=1309353&r2=1309354&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/merge.c (original)
+++ subversion/trunk/subversion/libsvn_client/merge.c Wed Apr 4 12:16:25 2012
@@ -1087,8 +1087,8 @@ filter_self_referential_mergeinfo(apr_ar
svn_mergeinfo_t implicit_mergeinfo;
SVN_ERR(svn_client__get_history_as_mergeinfo(
- &implicit_mergeinfo, NULL, target_base.url,
- target_base.rev, target_base.rev, SVN_INVALID_REVNUM,
+ &implicit_mergeinfo, NULL,
+ &target_base, target_base.rev, SVN_INVALID_REVNUM,
ra_session, ctx, iterpool));
/* Remove PATH's implicit mergeinfo from the incoming mergeinfo. */
@@ -3556,8 +3556,7 @@ get_full_mergeinfo(svn_mergeinfo_t *reco
/* Fetch the implicit mergeinfo. */
SVN_ERR(svn_client__get_history_as_mergeinfo(implicit_mergeinfo,
NULL,
- target->url,
target->rev,
- start, end,
+ target, start, end,
ra_session, ctx,
result_pool));
}
@@ -4141,10 +4140,9 @@ find_gaps_in_merge_source_history(svn_re
apr_pool_t *scratch_pool)
{
svn_mergeinfo_t implicit_src_mergeinfo;
- svn_revnum_t young_rev = MAX(source->loc1->rev, source->loc2->rev);
svn_revnum_t old_rev = MIN(source->loc1->rev, source->loc2->rev);
- const char *primary_url = (source->loc1->rev < source->loc2->rev)
- ? source->loc2->url : source->loc1->url;
+ const svn_client__pathrev_t *primary_src
+ = (source->loc1->rev < source->loc2->rev) ? source->loc2 : source->loc1;
const char *merge_src_fspath;
apr_array_header_t *rangelist;
@@ -4153,12 +4151,13 @@ find_gaps_in_merge_source_history(svn_re
/* Get SOURCE as mergeinfo. */
SVN_ERR(svn_client__get_history_as_mergeinfo(&implicit_src_mergeinfo, NULL,
- primary_url, young_rev,
- young_rev, old_rev, ra_session,
+ primary_src,
+ primary_src->rev, old_rev,
+ ra_session,
merge_b->ctx, scratch_pool));
SVN_ERR(svn_ra__get_fspath_relative_to_root(
- ra_session, &merge_src_fspath, primary_url, scratch_pool));
+ ra_session, &merge_src_fspath, primary_src->url, scratch_pool));
rangelist = apr_hash_get(implicit_src_mergeinfo,
merge_src_fspath,
APR_HASH_KEY_STRING);
@@ -7777,10 +7776,12 @@ record_mergeinfo_for_dir_merge(svn_merge
svn_error_t *err;
svn_mergeinfo_t subtree_history_as_mergeinfo;
apr_array_header_t *child_merge_src_rangelist;
- const char *subtree_mergeinfo_url =
-
svn_path_url_add_component2(merge_b->target->loc.repos_root_url,
- child_merge_src_fspath + 1,
- iterpool);
+ svn_client__pathrev_t *subtree_mergeinfo_pathrev
+ = svn_client__pathrev_create_with_relpath(
+ merge_b->target->loc.repos_root_url,
+ merge_b->target->loc.repos_uuid,
+ merged_range->end, child_merge_src_fspath + 1,
+ iterpool);
/* Confirm that the naive mergeinfo we want to set on
CHILD->ABSPATH both exists and is part of
@@ -7790,7 +7791,7 @@ record_mergeinfo_for_dir_merge(svn_merge
because we only do this for forward merges. */
err = svn_client__get_history_as_mergeinfo(
&subtree_history_as_mergeinfo, NULL,
- subtree_mergeinfo_url, merged_range->end,
+ subtree_mergeinfo_pathrev,
merged_range->end, merged_range->start,
merge_b->ra_session2, merge_b->ctx, iterpool);
@@ -7938,7 +7939,7 @@ record_mergeinfo_for_added_subtrees(
apr_array_header_t *rangelist;
const char *rel_added_path;
const char *added_path_mergeinfo_fspath;
- const char *added_path_mergeinfo_url;
+ svn_client__pathrev_t *added_path_pathrev;
SVN_ERR(svn_wc_read_kind(&added_path_kind, merge_b->ctx->wc_ctx,
added_abspath, FALSE, iterpool));
@@ -7976,14 +7977,14 @@ record_mergeinfo_for_added_subtrees(
will describe non-existent merge sources. To avoid this we get
take the intersection of the naive mergeinfo with
MERGEINFO_PATH/rel_added_path's history. */
- added_path_mergeinfo_url =
- svn_path_url_add_component2(merge_b->target->loc.repos_root_url,
- added_path_mergeinfo_fspath + 1,
- iterpool);
+ added_path_pathrev = svn_client__pathrev_create_with_relpath(
+ merge_b->target->loc.repos_root_url,
+ merge_b->target->loc.repos_uuid,
+ MAX(merged_range->start, merged_range->end),
+ added_path_mergeinfo_fspath + 1, iterpool);
SVN_ERR(svn_client__get_history_as_mergeinfo(
&adds_history_as_mergeinfo, NULL,
- added_path_mergeinfo_url,
- MAX(merged_range->start, merged_range->end),
+ added_path_pathrev,
MAX(merged_range->start, merged_range->end),
MIN(merged_range->start, merged_range->end),
merge_b->ra_session2, merge_b->ctx, iterpool));
@@ -9917,9 +9918,9 @@ find_youngest_merged_rev(svn_revnum_t *y
* that are not present in the source branch.
*
* SOURCE_MERGEINFO is the explicit or inherited mergeinfo of the source
- * branch SOURCE_URL@SOURCE_REV. Extend SOURCE_MERGEINFO, modifying it in
+ * branch SOURCE_PATHREV. Extend SOURCE_MERGEINFO, modifying it in
* place, to include the natural history (implicit mergeinfo) of
- * SOURCE_URL@SOURCE_REV. ### But make these additions in SCRATCH_POOL.
+ * SOURCE_PATHREV. ### But make these additions in SCRATCH_POOL.
*
* ### [JAF] This function is named '..._subroutine' simply because I
* factored it out based on code similarity, without knowing what it's
@@ -9929,8 +9930,7 @@ static svn_error_t *
find_unmerged_mergeinfo_subroutine(svn_mergeinfo_t *filtered_mergeinfo_p,
svn_mergeinfo_t target_history_as_mergeinfo,
svn_mergeinfo_t source_mergeinfo,
- const char *source_url,
- svn_revnum_t source_rev,
+ const svn_client__pathrev_t *source_pathrev,
svn_ra_session_t *source_ra_session,
svn_client_ctx_t *ctx,
apr_pool_t *result_pool,
@@ -9942,7 +9942,7 @@ find_unmerged_mergeinfo_subroutine(svn_m
path's explicit or inherited mergeinfo. */
SVN_ERR(svn_client__get_history_as_mergeinfo(
&source_history_as_mergeinfo, NULL /* has_rev_zero_history */,
- source_url, source_rev, source_rev, SVN_INVALID_REVNUM,
+ source_pathrev, source_pathrev->rev, SVN_INVALID_REVNUM,
source_ra_session, ctx, scratch_pool));
SVN_ERR(svn_mergeinfo_merge2(source_mergeinfo,
source_history_as_mergeinfo,
@@ -10049,6 +10049,7 @@ find_unmerged_mergeinfo(svn_mergeinfo_ca
= svn_relpath_skip_ancestor(target_repos_rel_path, target_path);
const char *source_path;
const char *source_url;
+ svn_client__pathrev_t *source_pathrev;
svn_mergeinfo_t source_mergeinfo, filtered_mergeinfo;
svn_pool_clear(iterpool);
@@ -10121,12 +10122,15 @@ find_unmerged_mergeinfo(svn_mergeinfo_ca
source_mergeinfo = apr_hash_make(iterpool);
}
+ SVN_ERR(svn_client__pathrev_create_with_session(
+ &source_pathrev, source_ra_session, source_rev, source_url,
+ iterpool));
/* Use scratch_pool rather than iterpool because filtered_mergeinfo
is going into new_catalog below and needs to last to the end of
this function. */
SVN_ERR(find_unmerged_mergeinfo_subroutine(
&filtered_mergeinfo, target_history_as_mergeinfo,
- source_mergeinfo, source_url, source_rev,
+ source_mergeinfo, source_pathrev,
source_ra_session, ctx, scratch_pool, iterpool));
apr_hash_set(new_catalog,
apr_pstrdup(scratch_pool, source_path),
@@ -10150,6 +10154,7 @@ find_unmerged_mergeinfo(svn_mergeinfo_ca
svn_mergeinfo_t source_mergeinfo = svn__apr_hash_index_val(hi);
svn_mergeinfo_t filtered_mergeinfo;
const char *target_url;
+ svn_client__pathrev_t *target_pathrev;
svn_mergeinfo_t target_history_as_mergeinfo;
svn_error_t *err;
@@ -10159,10 +10164,13 @@ find_unmerged_mergeinfo(svn_mergeinfo_ca
path_rel_to_session, iterpool);
target_url = svn_path_url_add_component2(target->loc.url,
path_rel_to_session, iterpool);
+ target_pathrev = svn_client__pathrev_create(
+ target->loc.repos_root_url, target->loc.repos_uuid,
+ target->loc.rev, target_url, iterpool);
err = svn_client__get_history_as_mergeinfo(&target_history_as_mergeinfo,
NULL /* has_rev_zero_history
*/,
- target_url,
- target->loc.rev,
target->loc.rev,
+ target_pathrev,
+ target->loc.rev,
SVN_INVALID_REVNUM,
target_ra_session,
ctx, iterpool);
@@ -10183,6 +10191,8 @@ find_unmerged_mergeinfo(svn_mergeinfo_ca
}
else
{
+ svn_client__pathrev_t *pathrev;
+
SVN_ERR(find_youngest_merged_rev(youngest_merged_rev,
target_history_as_mergeinfo,
source_mergeinfo,
@@ -10192,9 +10202,12 @@ find_unmerged_mergeinfo(svn_mergeinfo_ca
is going into new_catalog below and needs to last to the end of
this function. */
/* ### Why looking at SOURCE_url at TARGET_rev? */
+ SVN_ERR(svn_client__pathrev_create_with_session(
+ &pathrev, source_ra_session, target->loc.rev, source_url,
+ iterpool));
SVN_ERR(find_unmerged_mergeinfo_subroutine(
&filtered_mergeinfo, target_history_as_mergeinfo,
- source_mergeinfo, source_url, target->loc.rev,
+ source_mergeinfo, pathrev,
source_ra_session, ctx, scratch_pool, iterpool));
if (apr_hash_count(filtered_mergeinfo))
apr_hash_set(new_catalog,
@@ -10294,7 +10307,7 @@ calculate_left_hand_side(svn_client__pat
hi = apr_hash_next(hi))
{
const char *absolute_path = svn__apr_hash_index_key(hi);
- const char *url;
+ svn_client__pathrev_t *target_child;
const char *path_rel_to_root;
svn_mergeinfo_t target_history_as_mergeinfo;
@@ -10307,12 +10320,13 @@ calculate_left_hand_side(svn_client__pat
NULL, FALSE,
NULL, scratch_pool,
iterpool));
- url = svn_path_url_add_component2(target->loc.repos_root_url,
- path_rel_to_root, iterpool);
+ target_child = svn_client__pathrev_create_with_relpath(
+ target->loc.repos_root_url, target->loc.repos_uuid,
+ target->loc.rev, path_rel_to_root, iterpool);
SVN_ERR(svn_client__get_history_as_mergeinfo(&target_history_as_mergeinfo,
NULL /* has_rev_zero_hist
*/,
- url,
- target->loc.rev,
target->loc.rev,
+ target_child,
+ target->loc.rev,
SVN_INVALID_REVNUM,
target_ra_session,
ctx, scratch_pool));
Modified: subversion/trunk/subversion/libsvn_client/mergeinfo.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/mergeinfo.c?rev=1309354&r1=1309353&r2=1309354&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/mergeinfo.c (original)
+++ subversion/trunk/subversion/libsvn_client/mergeinfo.c Wed Apr 4 12:16:25
2012
@@ -748,26 +748,26 @@ svn_client__get_wc_or_repos_mergeinfo_ca
svn_error_t *
svn_client__get_history_as_mergeinfo(svn_mergeinfo_t *mergeinfo_p,
- svn_boolean_t *has_rev_zero_history,
- const char *url,
- svn_revnum_t peg_revnum,
- svn_revnum_t range_youngest,
- svn_revnum_t range_oldest,
- svn_ra_session_t *ra_session,
- svn_client_ctx_t *ctx,
- apr_pool_t *pool)
+ svn_boolean_t *has_rev_zero_history,
+ const svn_client__pathrev_t *pathrev,
+ svn_revnum_t range_youngest,
+ svn_revnum_t range_oldest,
+ svn_ra_session_t *ra_session,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
{
apr_array_header_t *segments;
/* Fetch the location segments for our URL@PEG_REVNUM. */
if (! SVN_IS_VALID_REVNUM(range_youngest))
- range_youngest = peg_revnum;
+ range_youngest = pathrev->rev;
if (! SVN_IS_VALID_REVNUM(range_oldest))
range_oldest = 0;
- SVN_ERR(svn_client__repos_location_segments(&segments, ra_session, url,
- peg_revnum, range_youngest,
- range_oldest, ctx, pool));
+ SVN_ERR(svn_client__repos_location_segments(&segments, ra_session,
+ pathrev->url, pathrev->rev,
+ range_youngest, range_oldest,
+ ctx, pool));
if (has_rev_zero_history)
{
@@ -1714,32 +1714,30 @@ svn_client_mergeinfo_log(svn_boolean_t f
if (!finding_merged)
{
svn_ra_session_t *target_session;
- svn_revnum_t rev;
- const char *url;
+ svn_client__pathrev_t *pathrev;
- SVN_ERR(svn_client__ra_session_from_path(
- &target_session, &rev, &url,
+ SVN_ERR(svn_client__ra_session_from_path2(
+ &target_session, &pathrev,
target_path_or_url, NULL,
target_peg_revision, target_peg_revision,
ctx, sesspool));
SVN_ERR(svn_client__get_history_as_mergeinfo(
&target_history, NULL,
- url, rev, SVN_INVALID_REVNUM, SVN_INVALID_REVNUM,
+ pathrev, SVN_INVALID_REVNUM, SVN_INVALID_REVNUM,
target_session, ctx, scratch_pool));
}
{
svn_ra_session_t *source_session;
- svn_revnum_t rev;
- const char *url;
+ svn_client__pathrev_t *pathrev;
- SVN_ERR(svn_client__ra_session_from_path(
- &source_session, &rev, &url,
+ SVN_ERR(svn_client__ra_session_from_path2(
+ &source_session, &pathrev,
source_path_or_url, NULL,
source_peg_revision, source_peg_revision,
ctx, sesspool));
SVN_ERR(svn_client__get_history_as_mergeinfo(
&source_history, NULL,
- url, rev, SVN_INVALID_REVNUM, SVN_INVALID_REVNUM,
+ pathrev, SVN_INVALID_REVNUM, SVN_INVALID_REVNUM,
source_session, ctx, scratch_pool));
}
/* Close the source and target sessions. */
Modified: subversion/trunk/subversion/libsvn_client/mergeinfo.h
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/mergeinfo.h?rev=1309354&r1=1309353&r2=1309354&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/mergeinfo.h (original)
+++ subversion/trunk/subversion/libsvn_client/mergeinfo.h Wed Apr 4 12:16:25
2012
@@ -26,6 +26,7 @@
#include "svn_wc.h"
#include "svn_client.h"
+#include "private/svn_client_private.h"
/*** Data Structures ***/
@@ -289,7 +290,7 @@ svn_client__get_wc_or_repos_mergeinfo_ca
apr_pool_t *scratch_pool);
/* Set *MERGEINFO_P to a mergeinfo constructed solely from the
- natural history of URL at PEG_REVNUM.
+ natural history of PATHREV.
If RANGE_YOUNGEST and RANGE_OLDEST are valid, use them to bound the
revision ranges of returned mergeinfo. They are governed by the same
@@ -305,8 +306,7 @@ svn_client__get_wc_or_repos_mergeinfo_ca
svn_error_t *
svn_client__get_history_as_mergeinfo(svn_mergeinfo_t *mergeinfo_p,
svn_boolean_t *has_rev_zero_history,
- const char *url,
- svn_revnum_t peg_revnum,
+ const svn_client__pathrev_t *pathrev,
svn_revnum_t range_youngest,
svn_revnum_t range_oldest,
svn_ra_session_t *ra_session,
Modified: subversion/trunk/subversion/libsvn_client/ra.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/ra.c?rev=1309354&r1=1309353&r2=1309354&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/ra.c (original)
+++ subversion/trunk/subversion/libsvn_client/ra.c Wed Apr 4 12:16:25 2012
@@ -859,13 +859,13 @@ svn_client__get_youngest_common_ancestor
saves us a bunch of annoying custom data comparisons and such. */
SVN_ERR(svn_client__get_history_as_mergeinfo(&history1,
&has_rev_zero_history1,
- loc1->url, loc1->rev,
+ loc1,
SVN_INVALID_REVNUM,
SVN_INVALID_REVNUM,
session, ctx, scratch_pool));
SVN_ERR(svn_client__get_history_as_mergeinfo(&history2,
&has_rev_zero_history2,
- loc2->url, loc2->rev,
+ loc2,
SVN_INVALID_REVNUM,
SVN_INVALID_REVNUM,
session, ctx, scratch_pool));