bug in convert
Christoph Egger
Christoph_Egger at gmx.de
Wed Jul 22 00:40:24 CDT 2009
Greg Ward wrote:
> On Tue, Jul 21, 2009 at 2:49 AM, Christoph Egger<Christoph_Egger at gmx.de> wrote:
>> To allow a smooth migration, mercurial (and all other scm's) must permit
>>
>> - to convert cvs to hg
>
> Be warned that git and Mercurial both include tools for converting
> from CVS that are simple, easy-to-use, fast, and wrong. 'hg convert'
> (and, I believe, git-cvs-import) will give you a Mercurial (or git)
> repo with all your code in the right order, but with tags and branch
> points not necessarily converted correctly. It's a good way to dip
> your feet in the water and see if you like the feel of Mercurial on
> your code, but not suitable for a production-quality conversion.
>
> AFAIK, there is only one tool that can correctly handle CVS
> repositories with all their quirks and strangeness: cvs2svn. It has
> recently sprouted a new growth called cvs2git, and I'm currently
> working on giving it a usable cvs2hg.
Thanks for the information.
>> - to import new cvs history into hg (after conversion)
>
> In general, this is impossible. (What if you create a tag or branch
> that refers to revisions already converted?) 'hg convert' gives it a
> brave try, but I wouldn't trust it.
>
>> I retried and this is the result:
>>
>> 802600 sys/arch/hpcmips/conf/GENERIC
>> 802700 sys/arch/hpcmips/conf/LCARD
>> run hg sink post-conversion action
>> ** unknown exception encountered, details follow
>> ** report bug details to http://mercurial.selenic.com/bts/
>> ** or mercurial at selenic.com
>> ** Mercurial Distributed SCM (version 1.3)
>> ** Extensions loaded: convert, rebase
>> Traceback (most recent call last):
>> File "/sw/bin/hg", line 27, in <module>
>> mercurial.dispatch.run()
>> AssertionError: expected revision number (got '')
>> cvs [rlog aborted]: received broken pipe signal
>
> OK... that's slightly more useful. I must remember to submit a proper
> patch for that.
>
>>> Finally, can you show us the output of "cvs rlog" on a representative
>>> file? (Ideally the one that caused the crash, but I'm not sure if
>>> that info is available to you. Running with --debug might help.)
>> $ cvs rlog src/sys/arch/hpcmips/conf/LCARD
>>
>> RCS file: /cvsroot/src/sys/arch/hpcmips/conf/LCARD,v
>> head: 1.11
>> branch:
> [...lots of 'cvs rlog' output skipped...]
>> ----------------------------
>> revision 1.1
>> date: 2003/05/01 07:01:58; author: igy; state: Exp;
>> branches: 1.1.2;
>> Support for Laser5's L-Card+ Embedded CPU Board
>> ===============================================
> [...]
>> L-Card+ Embedded CPU Board
>> --------------------------
>
> And here it is: a line with 28 dashes. Sheesh, I thought *everyone*
> knew not to put lines with 28 dashes in their CVS commit messages.
> That's your problem.
The CVS repository is old enough (more than 10 years) that you can
assume things being committed from before 'everyone knows what not to do'.
> Since hg's CVS conversion is based on parsing "cvs rlog" output, I
> don't see a quick and easy fix in the code.
>
> One possible temporary workaround is to exclude that file from the
> conversion. You should be able to do that with a filemap (see hg help
> convert).
>
> Another workaround is to edit the CVS log message for that revision.
> Be very very careful if you do that; you can easily destroy valuable
> history. Better to work on a copy of the repo if you can arrange
> that. (e.g. rsync it over, or use something like cvssuck if you don't
> have rsync access to the server).
I can get the cvs repo via rsync and try hg convert on the repo directly.
> Hopefully I'll have a working cvs2hg in a couple of days. Keep an eye
> on this list: I'll be looking for testers soon!
umm... I'm not subscribed on the list. I got the mail address from the
hg convert error output.
Christoph
More information about the Mercurial
mailing list