This was causing breakage with hg-git installed, and I'm more tired of
user gripes that hg-git and hgsubversion are incompatible than of
hearing complaints about doubled authentication prompts.
Hopefully at some point we can do better than this.
Previously, cloning a Mercurial repository that required
authentication would prompt for authentication twice. This is because
hgclonewrapper() first created a repository instance, but didn't pass
it on. hg.close() would then create another instance, and since
Mercurial doesn't cache authentication credentials across instances,
this would cause a second credential prompt.
This change could have unfortunate side effects in case of other
extensions wanting to modify the source passed to clone. This seems
like a somewhat unlikely scenario. I'll think about a possible way to
avoid all this hackery...
The value of the default commit message is now configurable by setting
'hgsubversion.defaultmessage'. In addition, the log output is made
consistent with the result of the conversion.
At this point, only pulling externals definitions into .hgsub and .hgsubstate
is supported. One difference between subrepos and svn:externals is the former
separate the source definition and target revision in two files, while
svn:externals definitions contain both. To handle this, the svn:externals
revision references is replaced with a {REV} placeholder and stored in .hgsub,
prefixed with the external base directory separated with a ':', while the
revision is extracted in .hgsubstate.
For instance, the following external:
-r3 ^/externals/proj2@2 deps/proj2
Becomes:
(.hgsub)
deps/proj2 = [hgsubversion] :-r{REV} ^/externals/proj2@2 deps/proj2
(.hgsubstate)
3 deps/proj2
The incoming, outgoing and push commands are updated. Running any of
parents, diff and rebase as the first command will fail, suggesting an
'hg svn rebuildmeta'.
Previously, not passing a UUID when instantiating an SVNMeta instance
would cause it to succeed even if no UUID was previously known. First
when the UUID was actually read would an exception be raised.
This slight refactoring of _set_uuid() makes it so an exception is
raised immediately. While at it, the exception message is changed to
be slightly more accurate and helpful.
The previous assertStringEqual() utility method pointed to standard
output. This is fairly annoying when running our own test-runner as it
suppresses that output. The assertMultiLineEqual() method shows
essentially the same information in the AssertionError itself.
While at it, all other comparisons that contain line-breaks are made
to use assertMultiLineEqual().
Previously, property changes to links caused 'link ' to be prepended
to the link destination. Removing a line that prepended it in
Revision::set() appears to fix it. In these cases, the "file marked as
link, but contains data" warning might be triggered. This should be
safe, so it's lowered to a note and the language made less conclusive.
In order to test this, extra revisions are added to the
'symlinks.svndump' fixture. As one of the new revisions add a link
that points to 'link to this', a check that asserted that link
destinations must not start with 'link ' was removed. This change is
safe, as the test later on asserts exact equality with the contents of
the 'links' dictionary.