跳转到主要内容

大规模VCS变更管理

项目描述

Silver-Platter logo

Silver-Platter使向版本控制系统(codemods)中的源代码贡献可自动化的更改成为可能。

它自动创建远程仓库的本地检出,执行用户指定的更改,在远程托管网站上发布这些更改,然后创建拉取请求。

此外,它还可以对已提出合并的分支执行基本维护 - 例如,如果它们由于上游更改而存在冲突,可以重新启动它们。

银盘(Silver-Platter)为Debian Janitor(https://janitor.debian.org/)和Kali Janitor(https://kali.janitor.org/)提供动力。然而,它是一个独立的项目,也可以作为一个独立的工具使用。UI界面仍然有点粗糙,我将非常感激使用它的人的任何反馈 - 请在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对工作副本进行一些修改,并将pull请求的提交信息和正文打印到标准输出。例如

#!/bin/sh
sed -i 's/framwork/framework/' README.rst
echo "Fix common typo: framwork ⇒ framework"

如果您留下待处理的变更,银盘将自动创建一个提交,并使用脚本的输出作为提交信息。脚本也可以创建它们自己的提交 - 如果它们需要创建多个提交,这特别有用。

食谱

为了使此过程更容易重复,可以使用食谱文件。对于上面的示例,我们可以创建一个包含以下内容的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会自动删除任何在工作中已经完全落地的条目,即pull请求已被合并或更改已推送到origin的情况。

要检查您更改的状态,运行svp batch status

svp batch status framwork

要刷新可能已经过时的任何合并提案,请再次运行发布

svp batch publish framwork

支持的主机

目前,以下代码托管站点得到支持

与Debian软件包一起工作

Debian软件包的几个常见操作在debian-svp命令下有专门的子命令。这些也会自动查找指定的任何Debian软件包名称的包装仓库位置。

  • upload-pending:构建和上传软件包,并推送/提出变更日志更新。

  • run:类似于svp run,但特定于Debian软件包:它确保upstreampristine-tar分支可用,可以选择更新变更日志,并可以测试分支是否仍然可以构建。

Debian特定的示例食谱提供在 examples/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 jelmer@debian.org

# 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:指示是否应添加changelog条目。可以是“leave”(保留)或“update”(更新changelog)。

凭证

可以使用 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文件,并使用该更改创建合并提案

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')

项目详情


下载文件

下载适合您平台的自定义文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。

源分发

silver_platter-0.5.36.tar.gz (15.4 kB 查看散列值)

上传时间

构建的分发版本

silver_platter-0.5.36-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.2 MB 查看哈希值)

上传时间: CPython 3.13 manylinux: glibc 2.17+ x86-64

silver_platter-0.5.36-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl (4.9 MB 查看哈希值)

上传时间: CPython 3.13 manylinux: glibc 2.17+ i686

silver_platter-0.5.36-cp313-cp313-macosx_11_0_arm64.whl (2.3 MB 查看哈希值)

上传时间: CPython 3.13 macOS 11.0+ ARM64

silver_platter-0.5.36-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.2 MB 查看哈希值)

上传时间: CPython 3.12 manylinux: glibc 2.17+ x86-64

silver_platter-0.5.36-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (4.9 MB 查看哈希值)

上传时间: CPython 3.12 manylinux: glibc 2.17+ i686

silver_platter-0.5.36-cp312-cp312-macosx_11_0_arm64.whl (2.3 MB 查看哈希值)

上传时间: CPython 3.12 macOS 11.0+ ARM64

silver_platter-0.5.36-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.2 MB 查看哈希值)

上传时间: CPython 3.11 manylinux: glibc 2.17+ x86-64

silver_platter-0.5.36-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (4.9 MB 查看哈希值)

上传时间: CPython 3.11 manylinux: glibc 2.17+ i686

silver_platter-0.5.36-cp311-cp311-macosx_11_0_arm64.whl (2.3 MB 查看哈希值)

上传时间: CPython 3.11 macOS 11.0+ ARM64

silver_platter-0.5.36-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.2 MB 查看哈希值)

上传时间: CPython 3.10 manylinux: glibc 2.17+ x86-64

silver_platter-0.5.36-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (4.9 MB 查看哈希值)

上传时间 CPython 3.10 manylinux: glibc 2.17+ i686

silver_platter-0.5.36-cp310-cp310-macosx_11_0_arm64.whl (2.3 MB 查看哈希值)

上传时间 CPython 3.10 macOS 11.0+ ARM64

silver_platter-0.5.36-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.2 MB 查看哈希值)

上传时间 CPython 3.9 manylinux: glibc 2.17+ x86-64

silver_platter-0.5.36-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (4.9 MB 查看哈希值)

上传时间 CPython 3.9 manylinux: glibc 2.17+ i686

silver_platter-0.5.36-cp39-cp39-macosx_11_0_arm64.whl (2.3 MB 查看哈希值)

上传时间 CPython 3.9 macOS 11.0+ ARM64

silver_platter-0.5.36-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.2 MB 查看哈希值)

上传时间 CPython 3.8 manylinux: glibc 2.17+ x86-64

silver_platter-0.5.36-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (4.9 MB 查看哈希值)

上传时间 CPython 3.8 manylinux: glibc 2.17+ i686

silver_platter-0.5.36-cp38-cp38-macosx_11_0_arm64.whl (2.3 MB 查看哈希值)

上传时间 CPython 3.8 macOS 11.0+ ARM64

支持者