views:

74

answers:

1

I have a project in Mercurial with a group of committers. Unfortunately, some of the committers has changed names several times, e.g. first it was "nickname", and then it became "Name Surname ", and then something else.

Most of the repository analysis tools expect committer to have same name over the course of the project, so ideally I'd like to rename committers of previous revisions in our main repository and have everyone make a fresh clone. Is it possible?

Are there any other ways to deal with this problem?

+7  A: 

Yes, it's possible. Use the Convert extension and then hg convert from the repository with the bad names to the new repository with the good names and use an authormap. There are many things you can accomplish using the convert extension and converting from Mercurial to another Mercurial repo.

Authormap file, supposing Eric Hopper <[email protected]> is the canonical name for the author:

Eric Hopper <[email protected]>=Eric Hopper <[email protected]>
Eric M. Hopper <[email protected]>=Eric Hopper <[email protected]>
Eric Hopper <[email protected]>=Eric Hopper <[email protected]>

Then:

hg convert -s hg -d hg -authors authormap badnamesrepo goodnamesrepo

Note: that while converting an hg to an hg repository will not always create lots of new changesets, in this case it will, and they will be equivalent to (but different from) changesets in the original repository. This means that everybody using this repository is going to have to erase any clones they have and fetch new ones.

In the general case, converting an hg repository to an hg repository is likely to create at least a few new changesets or there wouldn't be a reason to do it. And that will always likely necessitate everybody destroying all their clones and re-cloning.

If you analysis tool has the ability to remap author names, that's probably the better way to go. But that's not what you asked for, so I gave you the answer you asked for. :-)

Omnifarious
One **very** important caveat: hg convert will *break* all the clones that are out there since the hashes will change, push/pull won't work between clone anymore unless everybody reclones.
tonfa
tonfa: The question did include everyone making a fresh clone, for this reason.
Piet Delport
@tonfa - Yes, I thought of that, but the OP did mention everyone having to get a fresh clone, so I assumed (s)he was aware. I should put it in the answer though so unwary and uncareful readers in the future don't get unexpected results.
Omnifarious
@tonfa - There, fixed it. :-)
Omnifarious