我正在尝试将现有的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

07-24 12:33