我有一个Mercurial存储库,只想在新的Mercurial存储库中使用其内容的子集。我知道如何使用带有文件映射文件的Convert Extension来执行此操作。
但是,我也喜欢过滤标签,即只保留一个特定于我想要包含的文件。我将能够命名所有这些标签,并且还想重命名它们。换句话说,我也需要一个标签图功能。
我知道我可以排除.hgtags
,然后手动添加所有代码或如何rename tags,但我实际上希望保留原始标记日期和修订版,因此转换后的存储库看起来“真实”。
任何想法如何做到这一点?我也不介意编写一些Python代码。
答案 0 :(得分:3)
如您所知,此功能今天不存在。写它将是一个有趣的小练习:-)你应该从hg
接收器的源开始并更改_rewritetags
function。它解析data
(当前正在转换的变更集的.hgtags
文件的内容)并重写变更集哈希值以匹配新的哈希值。
这是您重写或排除代码的机会!我修改了这样的文件,以排除版本2.0以下的标签并稍微重写它们:
def _rewritetags(self, source, revmap, data):
def keep(tag):
try:
version = map(int, tag.split('.'))
return version >= [2, 0]
except ValueError:
return False
def rename(tag):
return tag + "-partial"
fp = cStringIO.StringIO()
for line in data.splitlines():
s = line.split(' ', 1)
if len(s) != 2:
continue
if not keep(s[1]):
continue
revid = revmap.get(source.lookuprev(s[0]))
if not revid:
continue
fp.write('%s %s\n' % (revid, rename(s[1])))
return fp.getvalue()
为了进行测试,我还无条件地将self.filemapmode
更改为True
。否则,convert
将不会检测并过滤掉空提交。既然你已经使用了文件地图,那你应该没问题。
最后,删除转换后添加的额外“更新标记”更改集,您将再次获得良好的历史记录。