Re: Merge metadata lost

Michael Haggerty <[email protected]> Mon, 15 Apr 2013 06:09:44 +0200
Newsgroups gmane.comp.version-control.subversion.cvs2svn.user
Message-ID <[email protected]>
(Please send plain text, not HTML, emails to mailing lists.)

On 04/14/2013 01:03 PM, Florian Jung wrote:
> <html><head></head><body><div style="font-family: Verdana;font-size: 12.0px;"><div>
> <div style="font-family: Verdana;font-size: 12.0px;">
> <div>Dear all,</div>
> 
> <div>currently I am working on a CVS migration to SVN for a fairly
large project and after a successful run I realized that the merge
information of branches towards the trunk are lost, i.e. there is no
information left that changes originated from commits on a branch and
were merged back to the trunk. I stumbled across a post on stackoverflow
(http://stackoverflow.com/questions/632729/cvs2svn-and-merge-info) where
Michael stated that it is not possible to migrate such information as
CVS does not have them. I hope I got it right.</div>
> 
> <div>&nbsp;</div>
> 
> <div>Nevertheless and just for clarification, as I have to report to
any disadvantages of the cvs/svn migration, where do IDE like Eclipse
and Intellij draw this merge information from if not from cvs itself.
Both are capable of showing the history of commits in a tree-like
manner, e.g. when being on the head and you take a look on the history
of a particular file that has been used on head and branch and finally
merged back it shows something similar to</div>
> 
> <div>&nbsp;</div>
> 
> <div>* 1.13 some change on head</div>
> 
> <div>&nbsp;&nbsp; - 1.13.6.1 some change on branch</div>
> 
> <div>&nbsp;&nbsp; - 1.13.6.2 another change on branch</div>
> 
> <div>* 1.14 merge of branch</div>
> 
> <div>&nbsp;</div>
> 
> <div>Are these informations based on heuristics that are too weak to
be considered for the migration or are these informations hidden in the
repos metadata and are not accessible yet and could be addressed in a
later version of cvs2svn.</div>
> 
> <div>&nbsp;</div>
> Lots of thanks for those who can give any advice.</div>
> </div></div></body></html>

The output that you provided shows branch 1.13.6 being created, but it
is not obvious that the tool knows that a merge took place.  The text
"1.14 merge of branch" is presumably from the commit message, not from
the tool, right?

cvs2svn definitely knows when branches are created and reconstructs them
as Subversion branches.  You will see equivalent diagrams after you have
converted to Subversion.  But cvs2svn doesn't reconstruct merges because
CVS doesn't record the fact that a particular commit came from a merge.

I've never heard of a tool that automatically infers merges from a CVS
commit history in any way that is more robust than matching commit
messages to regular expressions.  It would be a very difficult task and
probably would never yield satisfactory results.

It may be that there are tools that can reconstruct merge commits on the
instructions of a user (reposurgeon?).  I myself have done manual
reconstruction of merge commits when converting from Subversion to Git;
it is possible using Git's excellent tools but it sure was a lot of work.

I think that CVSNT makes some effort at recording merges in the
repository, so it might be feasible to convert CVSNT merges into
Subversion merges.  Unfortunately, CVSNT is poorly documented and not
freely available and cvs2svn does not officially support conversions
from CVSNT.

Michael

-- 
Michael Haggerty
[email protected]
http://softwareswirl.blogspot.com/

------------------------------------------------------
http://cvs2svn.tigris.org/ds/viewMessage.do?dsForumId=1670&dsMessageId=3053289

To unsubscribe from this discussion, e-mail: [[email protected]].