[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: [PATCH][MERGE-TRACKING] Step 3 of recording copyfrom mergeinfo during repos to repos copy

From: Madan U Sreenivasan <madan_at_collab.net>
Date: 2006-10-25 19:25:25 CEST

On Wed, 25 Oct 2006 18:06:37 +0530, Kamesh Jayachandran
<kamesh@collab.net> wrote:

>
>> * subversion/libsvn_client/copy.c
>> (includes): svn_mergeinfo.h
>> (get_src_merge_info): New. Obtains the existing mergeinfo hash for the
>> given path.
>> (calculate_target_merge_info): Modfied to use get_src_merge_info(),
>> and
>> merge the result with the already available copyfrom information.
>>
> Please use svn diff. I could not see 'calculate_target_merge_info'
> anywhere in the merge-tracking branch.

calculate_target_merge_info() is part of my uncommitted patch submitted at
http://svn.haxx.se/dev/archive-2006-10/0681.shtml. Sorry, I should have
mentioned the dependency.

>> ------------------------------------------------------------------------
>>
>> --- subversion/libsvn_client/copy.c.bu4diff 2006-10-24
>> 04:21:03.000000000 +0530
>> +++ subversion/libsvn_client/copy.c 2006-10-25 04:57:26.000000000 +0530
>> @@ -31,6 +31,7 @@
>> #include "svn_opt.h"
>> #include "svn_time.h"
>> #include "svn_props.h"
>> +#include "svn_mergeinfo.h"
>> #include "client.h"
>> @@ -239,6 +240,33 @@
>> return SVN_NO_ERROR;
>> }
>> +/* Obtain the mergeinfo hash of the given path in SRC_MERGEINFO.
>> + If theres no merge info available, SRC_MERGEINFO will be NULL */
>> +static svn_error_t *
>> +get_src_merge_info(svn_ra_session_t *ra_session,
>> + apr_hash_t **src_mergeinfo,
>> + const char *src_path,
>> + svn_revnum_t src_rev,
>> + apr_pool_t *pool)
>>
> May be we should export this function so that
> subversion/libsvn_client/diff.c:get_wc_target_merge_info can make use of
> the same. I could see the scope for its usage when we might have
> 'mergeaudit' subcommands.

Could you explain a bit more in detail. All this function does is call
svn_ra_get_merge_info(), and wraps it up in a mergeinfo hash.

>> +{
>> + apr_hash_t *merge_info;
>> + apr_array_header_t *rel_paths = apr_array_make(pool, 1,
>> + sizeof(src_path));
>> +
>> + APR_ARRAY_PUSH(rel_paths, const char *) = src_path;
>> +
>> + SVN_ERR(svn_ra_get_merge_info(ra_session, &merge_info, rel_paths,
>> + src_rev, TRUE, pool));
>> +
>> + /* Dereference to obtain only the merge info of the src_path
>> provided */
>> + if (merge_info)
>>
> No need to check for nullity of merge_info. Unless rel_paths->nelts == 0
> merge_info will never be null.

We need to ensure that src_mergeinfo is set to NULL, thats why the
null-check.

>> + *src_mergeinfo = apr_hash_get(merge_info, src_path,
>> APR_HASH_KEY_STRING);
>> + else
>> + *src_mergeinfo = NULL;
>> +
>> + return SVN_NO_ERROR;
>> +}
>> +
>> /* Obtain the copyfrom merge info and the existing merge info of
>> the source path, merge them and set as a svn_string_t in
>> TARGET_MERGEINFO. */
>> @@ -252,7 +280,7 @@
>> {
>> const char *repos_root;
>> const char *copyfrom_path = copyfrom_url;
>> - apr_hash_t *copyfrom_mergeinfo;
>> + apr_hash_t *copyfrom_mergeinfo, *src_mergeinfo;
>> svn_stringbuf_t *mergeinfo;
>> /* Find src path relative to the repos root */
>> @@ -260,14 +288,19 @@
>> while (*copyfrom_path++ == *repos_root++);
>> copyfrom_path--;
>> + /* Obtain copyfrom information of the source */
>> SVN_ERR(get_copyfrom_merge_info(ra_session, &copyfrom_mergeinfo,
>> src_rel_path, copyfrom_path,
>> src_revnum, pool));
>>
> What about using only 'get_src_merge_info'?

get_src_merge_info() is to get the existing mergeinfo of the source.
get_copyfrom_merge_info() is to get the copyfrom information of the
source. How can we use the same function?

Thanks for the comments.

Regards,
Madan.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Wed Oct 25 18:56:18 2006

This is an archived mail posted to the Subversion Dev mailing list.