Hi All,
Find the attached patch/log.
With regards
Kamesh Jayachandran
[[[
'Merge' on a subtree working copy should elide for the mergeinfo
through 'ra' layers.
* subversion/libsvn_client/diff.c
(get_wc_target_merge_info):
Get the elided 'mergeinfo' for repos relative path of wc.
Merge the resultant 'mergeinfo' for each path(currently only one)
to local wc mergeinfo.
Patch by: Kamesh Jayachandran <kamesh@collab.net>
]]]
Index: subversion/libsvn_client/diff.c
===================================================================
--- subversion/libsvn_client/diff.c (revision 21996)
+++ subversion/libsvn_client/diff.c (working copy)
@@ -1816,8 +1816,10 @@
apr_pool_t *pool)
{
apr_hash_t *repos_mergeinfo;
+ apr_hash_index_t *hi;
apr_array_header_t *mergeinfo_paths = apr_array_make(pool, 1,
sizeof(target_wcpath));
+ const char *wc_repos_rel_path;
svn_revnum_t target_rev;
SVN_ERR(svn_wc_entry(entry, target_wcpath, adm_access, FALSE, pool));
@@ -1826,6 +1828,7 @@
_("'%s' is not under version control"),
svn_path_local_style(target_wcpath, pool));
+ wc_repos_rel_path = ((*entry)->url) + strlen((*entry)->repos);
/* ### FIXME: dionisos sez: "We can have schedule 'normal' files
### with a copied parameter of TRUE and a revision number of
### INVALID_REVNUM. Copied directories cause this behaviour on
@@ -1843,7 +1846,7 @@
default:
target_rev = (*entry)->revision;
- /* ### TODO: Add target_wcpath to mergeinfo_paths. */
+ APR_ARRAY_PUSH(mergeinfo_paths, const char *) = wc_repos_rel_path;
break;
}
SVN_ERR(svn_ra_get_merge_info(ra_session, &repos_mergeinfo, mergeinfo_paths,
@@ -1851,12 +1854,28 @@
SVN_ERR(parse_merge_info(target_mergeinfo, *entry, target_wcpath,
adm_access, ctx, pool));
if (repos_mergeinfo != NULL)
- /* ### FIXME: Pre-existing WC-local changes may've reverted some
- ### of the merge info on WC_TARGET. How should we combine
- ### these sets of merge info (e.g. give precedence to the WC if
- ### it has merge info set)? */
- SVN_ERR(svn_mergeinfo_merge(target_mergeinfo, repos_mergeinfo,
- *target_mergeinfo, pool));
+ {
+ const char *mergeinfo_path_name;
+ apr_hash_t *mergeinfo_for_path;
+ for (hi = apr_hash_first(pool, repos_mergeinfo);
+ hi; hi = apr_hash_next(hi))
+ {
+ const void *key;
+ void *val;
+
+ apr_hash_this(hi, &key, NULL, &val);
+
+ mergeinfo_path_name = key;
+ mergeinfo_for_path = val;
+ /* ### FIXME: Pre-existing WC-local changes may've reverted some
+ ### of the merge info on WC_TARGET. How should we combine
+ ### these sets of merge info (e.g. give precedence to the WC if
+ ### it has merge info set)? */
+ SVN_ERR(svn_mergeinfo_merge(target_mergeinfo, mergeinfo_for_path,
+ *target_mergeinfo, pool));
+ }
+ }
+
return SVN_NO_ERROR;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Tue Oct 17 21:59:27 2006