在处理一个包时,我经常想知道这个函数最近是否被修改过。
函数可能已从一个脚本移动到另一个脚本,其代码或文档可能已更改。
如果能打电话就太好了:git_history(my_function, branch = "main")
,并获得例如 Dataframe ,其中:
- commit_id
- 提交文本
- 作者
- 时间戳
- 文件
- 代码(对象定义,理想情况下但不一定包括roxygen 2块)
通过使用{diffobj}包,我们将能够轻松地导航更改。
如果它能处理所有对象就好了,但如果只处理使用srcref的函数就更容易了,这样我们就能得到95%的值。
更好的方法是增加一个包含对象名称的列,并将所有内容放在一个df中,但这样做可能会有点昂贵?
我有一些关于如何实现这一点的想法,但我不确定这是否有效,如果已经完成了,我不想在这上面花时间。如果我没有得到满意的答案,我会回到这个问题上来回答自己。
我看到的方式是:
- 使用git命令获取提交列表
- 循环它们,并将它们签入临时文件夹
- 在每次迭代中,解析
getParseData(parse(file = ))
所有文件并提取定义,或者只是正则化它们,或者源所有文件并提取srcref(这不会给予我们roxygen 2的东西,也不会给我们非函数定义) - 为每一个提交(以及每一个对象定义,如果我们这样做的话)构建一行上述df
- 只为连续重复代码保留最旧的
- 删除临时文件夹,返回数据框
我认为如果有一个模板来指导如何使用R和git进行一些语言感知的版本控制,那就太好了,所以让我们在这里做吧。
1条答案
按热度按时间bxgwgixi1#
我提供了一个函数来获取给定分支的存储库中所有函数的历史,以及一个函数来使用获取的历史查看给定对象的历史。
前一个函数在大型存储库中可能会花费一些时间,但我已经放了一些进度条来帮助。
一些参数来限制文件范围和期间也会有帮助。这应该在一个包里。