On Thu, 18 Jun 2009 14:28:13 -0300, Sidnei da Silva wrote:

> Hi Wolfgang,
> On Thu, Jun 18, 2009 at 7:31 AM, Wolfgang Schnerring<w...@gocept.com>
> wrote:
>> * Sebastien Douche <sdou...@gmail.com> [2009-06-18 01:34]:
>>> This is a first attempt to build an Mercurial mirror :
>>> http://hg.zope.mirrors.securactive.org/
>> How did you convert the repository?
>> I'm asking because I noticed that basically all SVN->DVCS conversion
>> tools (hg convert, git-svn, bzr svn-import, svn2bzr,
>> svn-fast-export.py, svn-all-fast-export.cpp) do not convert the history
>> properly, more precisely, history that happened on branches is lost:
>> 1. import /trunk/foo.txt
>> 2. branch /trunk to /branches/mybranch 3. edit /mybranch/foo.txt
>> 4. merge /mybranch to /trunk
>> If you now ask svn for the history of /trunk/foo.txt (say with 'svn
>> log'), you see both steps 3 and 4. After conversion to a DVCS with one
>> of the above mentioned tools, you only see step 4, while step 3 never
>> happened in the DVCS repository. I think that's unacceptable, most
>> importantly because all commit messages that happened on branches are
>> lost that way.
>> Does somebody here know something about this phenomenon, by any chance?
>> Am I missing something?
> Here's some context about this from one of the Bazaar developers, John
> Arbash Meinel. Hopefully that will solve some of your questions?
> """
> In pretty much all dvcs merging a content exactly back to trunk does not
> generate a change message when doing "bzr log foo.txt".
> I'm not really sure what he means by "edit" and then "merge" without a
> commit inbetween. So I'm assuming there is one.
> Now, what really matters is whether or not *Subversion* recorded 4
> correctly, such that it can actually see that it was a merge from 3.
> My understanding is that before svn 1.5 that isn't possible. So you are
> left with trying to infer that sort of thing from the history. Which
> would be possible, but probably expensive.
> I'm pretty sure SVN represents (4) as not a *merge* but as an indentical
> commit.
> I don't have a great answer there. Though the fact that Wolfgang says
> svn shows both... I suppose because "svn log" shows everything across
> all branches?
> """

I'm somewhat confused here. According to my understanding:

- all DVCS shows, if a merge is done, the changesets that origin from the 
merged branch. (this is the normal operation)

- afaik svn does _not_ show this, what's more, it does not store any 
metadata about the merges or changesets involved. When doing the merge 
you really select a diff of the branch by specifying which changesets you 
want to include back in trunk. This is why it's so important with svn to 
note in the commit message, which revisions from which branch you merged. 
Otherwise you would not know at all what has been merged.

So although, DVCS could represent the information about the merged 
changesets, this information will not be imported from SVN, simply, 
because the information is not represented in SVN.

I'd like to add that I'm not using Hg, I am only using bazaar and svn, 
and I'm talking from what I experienced in practice with working on 
various svn repos and bzr. It's possible that newer svn does try to 
attack this problem by storing more metadata with the merges, which then 
would make sense to be considered at a DVCS import, but I believe that in 
the vast majority of svn repositories that you would consider importing, 
this information would not be there anyway, due to the fact that they are 
product of the older svn version.

Balazs Ree

Zope-Dev maillist  -  Zope-Dev@zope.org
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://mail.zope.org/mailman/listinfo/zope )

Reply via email to