23 个版本
新增 0.5.36 | 2024年8月20日 |
---|---|
0.5.35 | 2024年8月9日 |
0.5.27 | 2024年7月16日 |
0.5.26 | 2024年6月27日 |
0.5.7 | 2023年5月23日 |
#547 在 开发工具
2,387 每月下载量
在 disperse 中使用
460KB
9K SLoC
Silver-Platter

Silver-Platter 允许向版本控制系统(codemods)中的源代码贡献可自动化的更改。
它自动创建远程仓库的本地检出,进行用户指定的更改,在远程托管网站上发布这些更改,然后创建拉取请求。
除此之外,它还可以对已提出合并的分支进行基本维护 - 例如,如果由于上游更改而产生冲突,则重新启动它们。
Silver-Platter 为 Debian Janitor (https://janitor.debian.org/) 和 Kali Janitor (https://kali.janitor.org/) 提供动力。然而,它是一个独立的项目,也可以作为一个独立的工具使用。界面仍然有点粗糙,我将非常感谢使用它的人的任何反馈 - 请在 https://github.com/jelmer/silver-platter/issues/new 的问题跟踪器中提交错误。
入门
要登录到代码托管网站,请使用svp login:
svp login https://github.com/
创建作为合并提案的更改的最简单方法是运行类似以下命令
svp run --mode=propose ./framwork.sh https://github.com/jelmer/dulwich
其中framwork.sh对工作副本进行一些修改,并将拉取请求的提交信息和正文中打印到标准输出。例如
#!/bin/sh sed -i 's/framwork/framework/' README.rst echo "Fix common typo: framwork ⇒ framework"
如果您留下挂起的更改,Silver-Platter 将自动创建一个提交,并使用脚本输出作为提交信息。脚本也可以创建自己的提交 - 如果它们希望创建多个提交,这特别有用。
食谱
为了使此过程更容易重复,可以使用食谱文件。对于上面的示例,我们可以创建一个framwork.yaml以下内容
--- name: framwork command: |- sed -i 's/framwork/framework/' README.rst echo "Fix common typo: framwork ⇒ framework" mode: propose merge-request: commit-message: Fix a typo description: markdown: |- I spotted that we often mistype *framework* as *framwork*.
要执行此食谱,请运行
svp run --recipe=framwork.yaml https://github.com/jelmer/dulwich
有关具有大量注释的示例食谱,请参阅 example.yaml。
此外,您可以通过指定候选列表来在一系列存储库上运行特定的食谱。例如,如果 candidates.yaml 看起来像这样
--- - url: https://github.com/dulwich/dulwich - url: https://github.com/jelmer/xandikos
则以下命令将依次处理每个存储库
svp run --recipe=framwork.yaml --candidates=candidates.yaml
批量模式
当您将要进行大量更改并希望在发送之前查看或修改差异时,请使用批量模式
svp batch generate --recipe=framwork.yaml --candidates=candidate.syml framwork
然后创建一个名为 "framwork" 的目录,并包含一个名为batch.yaml其中包含所有待处理的更改
name: framwork work: - url: https://github.com/dulwich/dulwich name: dulwich description: I spotted that we often mistype *framework* as *framwork*. commit-message: Fix a typo mode: propose - url: https://github.com/jelmer/xandikos name: dulwich description: I spotted that we often mistype *framework* as *framwork*. commit-message: Fix a typo mode: propose recipe: ../framwork.yaml
对于每个候选者,将创建一个带有更改的克隆。您可以根据需要检查和修改克隆。
在您审查更改后,根据需要编辑 batch.yaml - 删除看起来不正确的条目,编辑合并请求的详细信息等。
一旦您满意,您就可以发布结果
svp batch publish framwork
这将发布所有更改,使用在batch.yaml.
batch.yaml中指定的模式和参数
自动删除任何已经完全落地的作业条目,即已合并的拉取请求或已推送到原始分支的更改。要检查更改的状态,运行:
svp batch status framwork
svp batch status
svp batch publish framwork
与 Debian 软件包一起工作
Debian 软件包的几个常见操作都有特定的子命令在debian-svp命令下。这些也会自动查找任何指定 Debian 软件包名称的打包存储库位置。
- upload-pending:构建和上传软件包,并推送/提出更改日志更新。
- run:类似于 svp run,但针对 Debian 软件包:它确保 upstream 和 pristine-tar 分支可用,可选地更新更改日志,并可以测试分支是否仍然可构建。
在 examples/debian/ 中提供了几个 Debian 特定的示例食谱。
- lintian-fixes.yaml:运行 lintian-brush 命令来修复由 lintian 报告的常见问题。
- new-upstream-release.yaml:合并新的上游版本。
- multi-arch-hints.yaml:应用多架构提示。
- orphan.yaml:将软件包标记为弃用,更新其 Maintainer 字段并将其移动到常见的 Debian salsa 组。
- rules-requires-root.yaml:将软件包标记为 "Rules-Requires-Root: no"。
- cme.yaml:运行来自 cme 软件包 的 "cme fix dpkg"。
debian-svp run 接收软件包名称参数,这些参数将解析为软件包中的 Vcs-Git 字段中的存储库位置。
查看更多详细信息。debian-svp COMMAND --help。
示例运行debian-svp:
# Create merge proposal running lintian-brush against Samba debian-svp run --recipe=examples/lintian-brush.yaml samba # Upload pending changes for tdb debian-svp upload-pending tdb # Upload pending changes for any packages maintained by Jelmer, # querying vcswatch. debian-svp upload-pending --vcswatch --maintainer [email protected] # Import the latest upstream release for tdb, without testing # the build afterwards. debian-svp run --recipe=examples/debian/new-upstream-release.yaml \ --no-build-verify tdb # Apply multi-arch hints to tdb debian-svp run --recipe=examples/debian/multiarch-hints.yaml tdb
以下环境变量为 Debian 软件包提供
- DEB_SOURCE:源软件包名称
- DEB_UPDATE_CHANGELOG:指示是否应添加更改日志条目。可以是 "leave"(保留)或 "update"(更新更改日志)。
凭据
可以使用svp hosters子命令来显示 silver-platter 所知的主机网站
svp hosters
要登录到新的主机网站,只需运行svp login BASE-URL,例如
svp login https://launchpad.net/
退出状态
svp run如果没有进行更改,则退出 0;如果至少有一个存储库已更改,则退出 1;如果遇到问题,则退出 2。
Python API
除了命令行 API 之外,silver-platter 还有一个 Python API。核心类是Workspace上下文管理器,存在于两种形式
- silver_platter.workspace.Workspace(用于通用项目)
- silver_platter.debian.Workspace(用于Debian软件包)
示例:在dulwich Debian软件包的changelog文件中添加新条目并创建一个包含该更改的合并提案dulwichDebian软件包和创建一个包含该更改的合并提案
from silver_platter.debian import Workspace import subprocess with Workspace.from_apt_package(package="dulwich") as ws: subprocess.check_call(['dch', 'some change'], cwd=ws.path) ws.commit() # Behaves like debcommit ws.publish(mode='propose')
依赖项
~16–34MB
~527K SLoC