1个不稳定版本

使用旧的Rust 2015

0.1.0 2024年2月18日

#30#debian

Apache-2.0

6KB
131

Silver-Platter

Silver-Platter logo

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软件包:它确保upstreampristine-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