1个不稳定版本
使用旧的Rust 2015
0.1.0 | 2024年2月18日 |
---|
#30 在 #debian
6KB
131 行
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-svp命令下为Debian软件包提供专门的子命令。这些子命令也会自动查找指定的任何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软件包运行"fix dpkg"。
debian-svp run接受软件包名称参数,这些参数将解析为软件包中的Vcs-Git字段指定的仓库位置。
请参阅debian-svp 命令 --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软件包)
以下是一个示例,向Debian软件包中的更改日志文件添加新条目,并使用该更改创建合并提议。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')
lib.rs
:
svp-client
svp-client
是一个用于与 SVP 协议交互的库,该协议由 svp
命令行工具支持。
依赖项
~0.8–1.7MB
~37K SLoC