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

Re: [PATCH] no mergeinfo on 'mergeinfo NON-affecting' wc-to-wc copy

From: C. Michael Pilato <cmpilato_at_collab.net>
Date: Wed, 10 Sep 2008 10:27:44 -0400

Vlad Georgescu wrote:
> Hi,
>
> 2008/9/10 Danil Shopyrin <danil_at_visualsvn.com>:
>> Hi!
>>
>> Here is the patch that is trying to fix on of the problem discussed at
>> http://svn.haxx.se/dev/archive-2008-08/0793.shtml
>> [[
>> 2) Mergeinfo produced during WC-to-WC copy differs from equivalent
>> REPO-to-REPO copy. If you copy file in working copy and there is no
>> mergeinfo in the working copy then the new file will get an empty
>> mergeinfo record. Similar REPO-to-REPO copy operation doesn't produce
>> empty mergeinfo record.
>> ]]
>>
>> The general idea of the patch is as follows: we don't produce any
>> mergeinfo record if we [definitely] know that it's unnecessary. The
>> patch should ease the pain in the most cases. For example, it's not
>> needed to worry about mergeinfo in the cases when:
>> a. copy is performed within a working copy (it's just a 'local file
>> rename because of refactoring')
>> b. there is no merges except ones on the trunk/branches level (or
>> there is no merges at all)
>>
>
> The patch looks correct, but I think it's more complicated than it
> needs to be. I'd rather not put the extra checks in a different
> function, and I don't think you need to extend
> svn_client__get_wc_mergeinfo().
>
> In propagate_mergeinfo_within_wc(), we need to do the following:
>
> 1. Get the mergeinfo for the source. If it's explicit, not inherited,
> we're done, there's nothing to propagate, because the destination
> already has the same explicit mergeinfo as the source, as a result of
> the copy. Currently, propagate_mergeinfo_within_wc() calls
> calculate_target_mergeinfo(), we can replace this with a call to
> svn_client__get_wc_mergeinfo().
> 2. Figure out which path the destination inherits mergeinfo from, if any.

   ...making sure to honor the wc-to-wc copy's promise not to talk to the
   repository. If, in this scenario, you don't find any inheritable
   mergeinfo in a working copy parent, you must not assume that *no*
   parent has mergeinfo (since maybe you only checked out /trunk/project
   but it's /trunk that carries the mergeinfo). Unless you can otherwise
   determine that's safe not to do so in this case, you must continue to
   set the empty mergeinfo property on the copy destination.

> 3. If the source and destination inherit from the same parent path (or
> no path at all), we're done.
> 4. Add the mergeinfo to the destination.
>
> If we want to be really smart, we can add a check between steps 1 and
> 2 to see if the source and destination are in the same directory, and
> bail out if they are.

-- 
C. Michael Pilato <cmpilato_at_collab.net>
CollabNet   <>   www.collab.net   <>   Distributed Development On Demand

Received on 2008-09-10 16:27:59 CEST

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

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.