# HG changeset patch # User Sean Farley # Date 1366297550 18000 # Node ID 45562379ce4e663260ee4bd66605d2843da0ae76 # Parent 6f3fb6a974e0ea9be959c055ca6934bf94018ec7 convert: replace old sha1s in the description This is a simple find-and-replace strategy for matching anything in the old description of a converted commit and, if that matched sha1 exists in the mapping, replacing it with the new sha1. In particular, this is helpful for descriptions that contain tags with messages such as, "Added tag 1.0 for commit abcde1234567" which will now be automatically converted. Tests have been updated accordingly. diff -r 6f3fb6a974e0 -r 45562379ce4e hgext/convert/hg.py --- a/hgext/convert/hg.py Wed Feb 05 20:22:28 2014 -0800 +++ b/hgext/convert/hg.py Thu Apr 18 10:05:50 2013 -0500 @@ -25,6 +25,9 @@ from common import NoRepo, commit, converter_source, converter_sink +import re +sha1re = re.compile(r'\b[0-9a-f]{6,40}\b') + class mercurial_sink(converter_sink): def __init__(self, ui, path): converter_sink.__init__(self, ui, path) @@ -157,6 +160,14 @@ p2 = parents.pop(0) text = commit.desc + + sha1s = re.findall(sha1re, text) + for sha1 in sha1s: + oldrev = source.lookuprev(sha1) + newrev = revmap.get(oldrev) + if newrev is not None: + text = text.replace(sha1, newrev[:len(sha1)]) + extra = commit.extra.copy() if self.branchnames and commit.branch: extra['branch'] = commit.branch diff -r 6f3fb6a974e0 -r 45562379ce4e tests/test-convert-hg-sink.t --- a/tests/test-convert-hg-sink.t Wed Feb 05 20:22:28 2014 -0800 +++ b/tests/test-convert-hg-sink.t Thu Apr 18 10:05:50 2013 -0500 @@ -119,7 +119,7 @@ 0 add baz $ cd new-filemap $ hg tags - tip 2:6f4fd1df87fb + tip 2:3c74706b1ff8 some-tag 0:ba8636729451 $ cd ..