Search code examples
svnmercurialhgsvn

How can I force mercurial to accept an empty commit during SVN conversion?


I'm trying to convert an SVN repo with hgsvn and I have some commits where SVN properties where modified, but since Mercurial doesn't use those, it sees this as an empty commit and aborts. Is there any way to force this hg commit to accept a commit that doesn't change anything?

I'm not familiar enough with the internals of hgsvn to hack it to skip empty commits.


Solution

  • You can skip this commit if you add a local svn.$REVNUM tag to the head revision (=the revision which also has the svn.($REVNUM-1) tag now). Then you can continue with hgpullsvn.

    Say your import is at this state (last imported rev is 15800, the property-only rev is 15801):

    $ hg log -l1
    changeset:   1234:123456789abc
    branch:      trunk
    tag:         tip
    tag:         svn.15800
    parent:      1233:cba987654321
    user:        Rudi <[email protected]>
    date:        Tue Aug 24 11:42:23 2010 +0200
    summary:     Foobar
    
    $ svn info
    Path: .
    URL: svn+ssh://example.com/foobar/trunk
    Repository Root: svn+ssh://example.com/foobar
    Repository UUID: 26c7c274-8ed1-4e7f-bdc1-5c767a948b10
    Revision: 15801
    Node Kind: directory
    Schedule: normal
    Last Changed Author: rudi
    Last Changed Rev: 15801
    Last Changed Date: 2010-08-24 14:00:29 +0200 (Di, 24 Aug 2010)
    

    Then you simply add the svn.15801 tag:

    $ hg tag -l -r 123456789abc svn.15801
    

    and contunie to import.

    But make a backup before you try this.