我正在尝试将现有的sccs存储库转换为svn格式,并且一直在使用推荐的sccs2svn python脚本。但是,它似乎正在“洗牌”修订信息,如下所示:
SCCS PRT给出:
修订版5,日期5,作者5,评论5
修订版4,日期4,作者4,评论4
修订版3,日期3,作者3,评论3
修订版2,日期2,作者2,评论2
修订版1,日期1,作者1,评论1
SVN日志给出:
修订版8,今天的日期,今天的作者,注释='自动关键字替换'
修订版7,日期5,今天的作者,注释='自动属性集'
修订版6,今天的日期,作者5,评论5
修订版5,日期5,作者4,评论4
修订版4,日期4,作者3,评论3
修订版3,日期3,作者2,评论2
修订版2,日期2,作者1,评论1
修订版1,日期1,作者1,评论1
在我开始深入研究sccs2svn.py之前,有人遇到过这个问题吗?
最佳答案
Sonyah在问题中发布了这个,这里是一个整理好的答案:run()
中有一个off by one错误。此代码:
mergedVersions = [[versions[0]]]
i = 0
while i < len(versions):
if versions[i].match(mergedVersions[-1][-1]):
mergedVersions[-1].append(versions[i])
else:
mergedVersions.append([versions[i]])
i += 1
如果替换为
mergedVersions = [[versions[0]]]
for v in versions([1:]):
if v.match(mergedVersions[-1][-1]):
mergedVersions[-1].append(v)
else:
mergedVersions.append([v])
此外,
_commit
类中的SVNInterface
方法也有问题。它更改最新版本号(由sccs2svn知道)的日期,然后提交该版本。不幸的是,sccs2svn从零开始计算修订号,subversion从1开始计算。因此,如果按以下顺序颠倒函数调用的顺序,则现在所有内容都匹配:def _commit(self, rev, date, txn, subpool):
svn_rev = repos.svn_repos_fs_commit_txn(self.repos_ptr, txn, subpool)
fs.change_rev_prop(self.fsob, svn_rev, core.SVN_PROP_REVISION_DATE,
date, subpool)
return svn_rev