跳转到内容

ROSE 编译器框架/源代码仓库

来自维基教科书,为开放世界提供开放书籍

为什么我们要考虑这个?

  • ROSE 的单个单片式 git 仓库变得太大
    • 如果人们只关心其中一部分,克隆大型仓库没有生产力
  • 我们有许多使用 ROSE 的协作项目。许多项目贡献者被迫为提交采用与核心 ROSE 贡献者相同的标准。
    • Jenkins 对不同平台、不同版本的 GCC、boost 等执行相同的严格回归测试。这对于某些项目并不总是必要的。
  • 我们在 ROSE 的 git 仓库中有一些 LaTeX 文档和 HTML 网页。它们本质上可以独立存在。但是,即使对它们进行微小的错别字修复也需要进行长时间的 Jenkins 测试(大约 10 小时或更长时间)才能生效。这真的降低了我们添加/更新文档的兴趣。

为 ROSE 项目提供精益、干净且组织良好的源代码仓库

  • 精益(<=100 MB):只有必要的东西应该存储在中心核心仓库中
  • 干净:只有代码审查和测试过的内容才能添加到中心仓库中
  • 组织良好:直观的、标准化的目录布局

促进协作

  • 允许协作、实验项目具有增量/替代测试要求

其他要求:大部分已经通过使用 git 解决

  • 安全
  • 备份

待办事项

[编辑 | 编辑源代码]
  • 找出其他大型项目如何管理多个仓库?
  • 删除不必要的 大文件:从仓库和历史记录中删除
  • 将单个仓库拆分为更小的仓库。
    • 允许用户只下载/克隆他们关心的内容。
    • 确保它们在需要时协同工作并作为一个整体进行测试
  • 准备示例仓库,演示不同类型的仓库应该如何使用

最佳实践调查

[编辑 | 编辑源代码]

风险和缓解

[编辑 | 编辑源代码]

最大的问题是,通过拥有多个仓库,

  • 很难确保非核心仓库始终与核心 ROSE 仓库协同工作
  • 或者,对核心仓库的更改可能会在未被注意到的情况下破坏其他仓库
  • 确保项目和 librose.so 版本之间的准确链接

如何防止这些问题?

  • 对 ROSE 核心仓库的提交将触发对所有官方项目的测试。只有通过所有项目测试的提交才会被接受到核心仓库中。
  • 类似地,对任何官方项目的更改都会触发针对最新 ROSE 的测试。只有通过所有 ROSE 测试的提交才会被接受到各个项目中
  • 更好的 librose.so 版本控制:非官方(外部)项目可以轻松检测 librose.so 版本是否兼容。

核心仓库

[编辑 | 编辑源代码]

对于 80% 的 ROSE 用户来说绝对必要的东西应该放在 ROSE 的核心仓库中。

它应该只包含

  • 用于构建 librose.so 的源文件和头文件
  • 用户开箱即用的内置工具
  • Doxygen 文档

子模块

  • 核心测试

问题

  • 一些必要的文件怎么样:例如安装指南
  • 以及与 ROSE 中某些功能紧密耦合的一些测试?

文档仓库

[编辑 | 编辑源代码]

为什么我们要将一些文档从 ROSE 仓库中分离出来?

  • 现在,对 ROSE 中的文档的任何更改(即使是修复错别字)都需要 Jenkins 进行相同的严格回归测试。这是不必要的,也是浪费的。

项目仓库/仓库

[编辑 | 编辑源代码]

我们可能有两种选择

  • 为所有项目创建一个单片式仓库。
  • 允许每个项目使用单独的仓库。这样人们就可以只克隆他们想要的内容。每个项目都可以有自己的生命周期(放弃、合并到 rose 中、永远分离等)。

我认为从长远来看,大多数项目应该被视为

  • 插件(或增量库) of ROSE (librose.so)。
  • 与 ROSE 的内置工具相比,它是额外的工具

它们很重要且有用,但由于各种原因,它们没有合并到 ROSE 的核心。


目前的思路

  • 各个项目应该是单独的仓库,可配置的 "--with-rose=/path/to/rose/installation" 用于建立 ROSE 与项目之间的连接。
  • 所有官方项目的集合应该包含在一个单片式仓库中(例如“rose-projects”),其中每个项目只是一个子模块

待讨论

  • 我们可以允许用户贡献只使用简单 Makefile 的项目。工作人员或付费实习生可以负责将构建系统转换为使用 autotools。

测试仓库

[编辑 | 编辑源代码]

常用的测试输入文件,用于测试 ROSE 核心的健壮性的基准测试。

项目也可以利用同一套测试。

参考文献

[编辑 | 编辑源代码]
华夏公益教科书