资讯动态

Sapling 开发者快速上手指南:从源码构建、测试到扩展开发

发布时间:2026/10/9 10:13:54 来源:尧图企业网站定制
开发工具CLI后端【免费下载链接】saplingA Scalable, User-Friendly Source Control System.项目地址https://gitcode.com/gh_mirrors/sa/sapling点击查看免费下载本篇技术指南以 SaplingMeta 开源的源码控制系统开发流程为核心面向希望在 eden/scm/newdoc/dev/process/QuickStart.rst 基础上快速进入 Sapling 开发状态的工程师。你将掌握本地构建hg可执行文件、运行原生组件与集成测试的具体命令理解mercurial、lib、exec、ext、tests五大目录的分工并了解仓库既有的 Python/Rust 编码规范与提交信息格式为后续阅读 WritingExtensions.rst 编写自己的扩展打好基础。快速构建一条命令产出本地hgSapling 的源码树位于eden/scm/QuickStart.rst给出的构建入口非常简单cd ~/fbsource/fbcode/eden/scm make local在开源仓库的当前布局下这一命令通过 Makefile 触发local: $(BUILD_PY) $(BUILD_ARGS) $(RM) $(SL_BIN_NAME) ln -s out/$(SL_BIN_NAME) $(SL_BIN_NAME)即调用 build.py仓库根eden/scm/build.py执行完整构建然后在eden/scm下创建指向out/下产物的软链接。构建完成后本地编译出的hg可执行文件位于~/fbsource/fbcode/eden/scm/hgQuickStart.rst特别提示由于该路径下的hg处于开发态建议在$PATH中准备一个类似~/bin/lhglocal hg的包装脚本方便随时调用开发版#!/bin/bash ~/fbsource/fbcode/eden/scm/hg $注意上述路径~/fbsource/fbcode/...是 Meta 内部 monorepo 布局。在当前开源镜像仓库中对应目录即eden/scm/构建后软链接hg/sl同样直接生成在该目录下。此外Makefile 还提供了hg与sl两个等价构建目标——make sl生成名为sl的可执行文件make hg生成名为hg的可执行文件实际产物都指向out/下同一份二进制HG_BIN_NAME、SL_BIN_NAME在 Makefile 中按平台区分Windows 下对应hg.exe/sl.exe。源码注释中lhg local hg的命名约定也与这一构建产物名保持一致。测试体系原生单元测试与集成测试QuickStart.rst将测试分成两层对应不同性质的代码原生组件单元测试cd lib cargo testlib/存放与 Python 无关的原生Rust组件例如 eden/scm/lib 下的dag、checkout、commits、config等 crate。cargo test会遍历整个 workspace 执行这些组件的单元测试。集成测试主测试套件集成测试依赖构建产物因此流程是「先 Build再跑测试」cd tests ./run-tests.pyQuickStart.rst称之为「the main test suite」。从源码看测试目录 eden/scm/tests 当前包含上千个测试文件以.t测试为主README 见 eden/scm/tests/README.md。run-tests.py 头部的注释明确列出了多种运行模式例如串行、本地hg默认--local./run-tests.py -j1 --local test-s*并行、临时安装./run-tests.py -j2 -b test-s*指定临时目录./run-tests.py -j2 --tmpdir /tmp/myhgtestsQuickStart.rst提供的./run-tests.py无参数即采用「本地 hg」的默认模式直接复用刚构建好的可执行文件。Makefile中make tests目标见 Makefile等价于在tests/下调用run-tests.py。从当前仓库的tests/README.md可以看到现代 Sapling 测试已大量使用debugruntest——一种基于 Python 的 shell 模拟器可在进程内运行.t测试而不依赖/bin/bash以获得更快的执行速度和跨平台可移植性。这与run-tests.py的「串行/并行、覆盖率、临时安装」等传统模式并存。目录布局hg的本质是一个多语言程序QuickStart.rst给出了以「hg 主要是 Python 程序」为前提的目录分工目录职责mercurial/核心 Python 模块与纯 C 工具mercurial/cext/C Python 扩展封装sapling/cext/mercurial/rust/Rust Python 扩展封装sapling/rust/lib/与 Python 无关的原生组件exec/与 Python 无关的原生独立可执行项目ext/扩展ext/extlib/扩展的 Python 封装类似mercurial/rust/mercurial/cexttests/以集成测试为主需要说明两点与现代仓库的对应关系目录名已演进当前开源仓库中mercurial/对应 eden/scm/sapling其下cext/、rust/分别对应 C 扩展与 Rust 扩展封装可参考 context.py 中大量以mercurial/注释保留下来的历史术语lib/、exec/、ext/、tests/则与原文档一一对应。QuickStart.rst原文档是基于旧版目录fbsource/fbcode/eden/scm编写的这一点被 Makefile 与 build.py 的产物路径所印证。布局正在变化QuickStart.rst结尾以.. note::明确提示「以上布局假设hg主要是 Python 程序这一点将随时间改变」。从当前仓库的saplingnative/Rust 原生实现目录、sapling/下大量 Rust 代码如lib/中的 Rust crates可以看出Sapling 正在逐步把核心逻辑迁移到 Rust 原生实现。编码风格规范QuickStart.rst用一句话概括整体原则模仿现有代码的风格。在此基础上分别给出 Python、Rust 与提交信息的细则。Python命名使用foobar驼峰/连续小写风格不要用foo_bar也不要用fooBar私有字段使用_foobar前缀。变量名使用完整英文单词但对社区公认的缩写网开一面QuickStart.rst明确列出p1、p2第一、第二父提交first and second parentsctx、fctxcontext.changectx与context.filectx实例fp、fdPython 类文件对象file-like object、文件描述符file descriptorrepo、unfi仓库repo与未过滤仓库unfiltered repo实例这些缩写在源码中随处可见例如 context.py 中changectx.p1()/p2()的定义以及 revset.py 中getset(repo, subset, x, orderdefineorder)的函数签名——repo与ctx/fctx的用法与文档描述完全一致。Rust使用foo_barsnake_case与 Rust 社区保持一致。若 Rust 代码被 Python 绑定供foobar风格代码库调用QuickStart.rst建议「为绑定使用def foobar」——即绑定函数遵循 Python 侧的命名风格降低混用成本。尽量匹配 Rust 社区标准尤其是文档注释doc comment。Commit 信息提交标题遵循[hg] topic: short summary without capital letters即[hg]前缀 主题topic 小写开头的简短摘要。这是一个典型的仓库内部约定写扩展或提交代码前建议先git log观察现有提交再动手。接下来读什么QuickStart.rst的「Whats next」给出了三条进阶路径写扩展阅读 WritingExtensions.rst学习如何在sapling/ext/下用 Python 注册新命令registrar.command、新 revsetregistrar.revsetpredicate或通过extensions.wrapfunction与reposetup对既有逻辑打补丁。写测试阅读WritingTests.rst该文档目前尚未随仓库同步相关内容可先参考 eden/scm/tests/README.md 关于.t文件格式与debugruntest运行器的说明。理解内部数据结构与协议参考 newdoc/dev/internals 下的文档如SegmentedChangelog分段变更日志、Mutation变更追踪、Visibility可见性等。这三条路径与本篇 QuickStart 一起构成了 Sapling 开发者从「构建、测试、目录结构、编码规范」到「扩展与测试编写」的完整入门闭环。赞分享开发工具CLI后端【免费下载链接】saplingA Scalable, User-Friendly Source Control System.项目地址https://gitcode.com/gh_mirrors/sa/sapling点击查看免费下载相关推荐QGroundControl 开发者指南从源码构建到 UI 扩展的完整开发手册QGroundControl 开发者指南从源码构建到 UI 扩展的完整开发手册 本文是 QGroundControlQGC开发者指南的深度解读与实战手册。无人机智能硬件Abogen 开发者快速上手指南从环境准备、源码安装到插件架构与测试Abogen 开发者快速上手指南从环境准备、源码安装到插件架构与测试 本文是 Abogen 开源项目的开发者快速入门指南面向需要在本地搭建开发环境、运行桌面AI 应用语音音频媒体生成本地部署JupyterLab Desktop开发者指南从源码构建到自定义扩展JupyterLab Desktop开发者指南从源码构建到自定义扩展 JupyterLab Desktop是基于Electron框架构建的桌面应用为数据科学桌面应用数据科学上一篇TensorTrade 订单执行服务与滑点模型全解析tensortrade.oms.services 包深度指南下一篇TVM TVMScript 解析器tvm.script.parser架构解析从 Python AST 到 IRModule 的多方言解析引擎创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑