1个不稳定版本
0.1.0 | 2021年11月20日 |
---|
#169 in macOS和iOS API
36KB
734 行
Apple开源代码下载器
此存储库定义了一个Rust包和CLI程序,用于自动化从https://opensource.apple.com/下载Apple的开源代码。
此项目的核心目标是使Apple开源代码的使用和检查更加直观。使用此工具,您可以
- 将Apple组件的历史(如核心操作系统原语
xnu
)转换为Git仓库,并轻松查看不同版本之间的差异。 - 将一组开源组件的历史(如构成macOS的所有内容)转换为Git仓库,并轻松查看不同版本之间的差异。
- 查询所有可用的开源组件和版本。
此项目的标准主页是https://github.com/indygreg/apple-opensource-downloader。请在那里报告问题或提交改进建议。
安装
# From crates.io
$ cargo install apple-opensource-downloader
# From Git
$ cargo install --git https://github.com/indygreg/apple-opensource-downloader.git --branch main
使用
提供apple-opensource-downloader
CLI。它定义了子命令以执行各种操作。运行apple-opensource-downloader help
查看帮助信息。
将单个组件下载到Git仓库
component-to-git
子命令将下载指定软件组件的所有版本(请参阅https://opensource.apple.com/tarballs/上的组件列表),并将它们的内容作为Git提交写入Git仓库。这允许您查看组件版本之间的差异。
$ apple-opensource-downloader component-to-git --no-bare xnu aos/xnu
<wait for this to finish>
$ cd aos/xnu
$ git log
commit c2011455c3d75195791bd20d189abae4917c8c81 (HEAD -> main, tag: 7195.141.2)
Author: Apple Open Source <[email protected]>
Date: Fri Jan 1 00:00:00 2021 +0000
xnu 7195.141.2
Downloaded from https://opensource.apple.com/tarballs/xnu/xnu-7195.141.2.tar.gz
commit e76ea20b5519ae2eaf2b74698bd2331141e028fa (tag: 7195.121.3)
Author: Apple Open Source <[email protected]>
Date: Fri Jan 1 00:00:00 2021 +0000
xnu 7195.121.3
Downloaded from https://opensource.apple.com/tarballs/xnu/xnu-7195.121.3.tar.gz
...
如果此软件的版本相同且Apple托管源存档没有更改,Git树和提交对象应该是确定的。也就是说,不同的机器应该产生具有相同提交ID的Git提交。
将所有组件下载到Git仓库
子命令 components-to-gits
将下载每个可用的组件,并将每个组件写入单独的 Git 仓库。这相当于为每个命名的组件运行 component-to-git
。
将苹果软件发布版下载到 Git 仓库
可以使用 release-to-git
命令将逻辑苹果软件发布版(如 macOS 或 iOS)中的所有组件下载到 Git 仓库。这使您能够查看发布版之间开源组件的历史和更改。
$ apple-opensource-downloader release-to-git --no-bare macos aos/macOS
$ cd aos/macOS
$ git log
已知问题
HTML 解析不是最健壮的,可能无法抓取所有可用的软件。
如果苹果更改了 opensource.apple.com 上的 HTML,这将破坏此工具。
如果苹果对其服务器实施限制,这可能会破坏此工具。
创建的 Git 仓库不使用打包文件,其性能可能不是最优的。在创建 Git 仓库后运行 git gc
以优化 Git 仓库。
我们不支持增量更新 Git 仓库。每次调用时都会从零开始重新创建 Git 仓库的历史。这显然是不高效的。
在 opensource.apple.com 上的各种广告 URL 导致 HTTP 404。这些有时会被此工具忽略。
在导入软件发布版(如 macOS)时,一个发布版到下一个发布版的组件可能有所不同。例如,SQLite 可能在发布 A 中存在,在发布 B 中消失,并在发布 C 中再次出现。这可能会导致 git diff
输出不可代表。
Git 提交有一个硬编码的日期,没有任何现实基础。
苹果组件的命名和布局有时可能会令人困惑和不一致。我们尚未努力解决这个问题。
法律合规性
此工具下载的内容可能受本工具之外定义的许可和使用权限制的约束。请检查在 https://opensource.apple.com/ 和下载内容中发布的使用权限制。
例如,如果您重新分发下载的内容,苹果可能会对此提出异议。
依赖关系
~18–36MB
~668K SLoC