如何放弃关于 Gerrit 的整个话题?

How to abandon a whole topic on Gerrit?

因此,问题的长短在于,狂热地遵守代码审查原则和用户归属....

我将大约 834 次提交从上游分支推送到项目的 gerrit 服务器。

从那时起我就被告知我应该(合理地)首先推送一个压缩的提交以在 gerrit 上进行测试,然后将它们指向我的 repo 以进行合并...

幸运的是,我在上传时用主题标记了提交(为了便于测试....-_-)

我现在怎么能集体放弃整个该死的话题呢? (将替换为压缩的提交)

也许应该有某种终端命令?我的 gerrit-fu 很弱而且我没有任何访问服务器的特权..

AFAIK,没有现成的方法来实现这一点。但是,gerrit 是一个很棒的工具,您可以通过编写自定义脚本来解决这个问题。

抱歉,我太懒了,无法为您提供现成的解决方案,但这是我的脚本将执行的操作:

  1. 准备环境

    alias gerrit="ssh -p 29418 gerrit.yourdomain.com gerrit"
    
  2. 列出主题为:

    的所有提交
    gerrit query topic:<topic>
    
  3. Change-Id

  4. 放弃一一提交:

    gerrit review <id> --abandon
    

更新

感谢 Marcelo Avila de Oliveira,您现在有了可以使用的脚本:

#!/bin/bash

alias gerrit="ssh -p 29418 gerrit.yourdomain.com gerrit"

for c in $(gerrit query topic:trololo | grep "сhange" | cut -d ' ' -f 2);
    do gerrit review $c --abandon;
done

trololo 替换为您需要的任何内容,或调整脚本以接受参数。

评论 --> 回答以便代码可读。因为答案中缺少代码意味着我不明白 lanyusea 用原始答案解决了我 1/2 的问题。不幸的是,由于缺少格式,我无法分辨:( ...但我正在添加一些新内容...我发誓

我发现了一些问题(我们刚刚更新了 gerrit ...所以它可能只是一个临时错误)

  • Commit-Id 和更改编号均无效
  • --message 中的空格无效

所以改变:

  • 已添加查询 --current-patch-set
  • grep 获取“修订版”
  • 剪掉':'而不是space(不确定是否需要...我只是觉得领先的白色更好space)
  • 转义消息中的所有 space(我需要记住为此提交错误)
#!/bin/bash

alias gerrit="ssh -p 29418 gerrit.yourdomain.com gerrit"

for id in $(gerrit query topic:yolo --current-patch-set | grep "revision" | cut -d ':' -f 2); do
    gerrit review --abandon $id -m "Abandoning\ for\ reasons"
done

所有功劳归功于 Andrejs 和该线程中的每一个人

并变成了您可以获取的可重复使用的函数。它处理转义,提供有关其操作的反馈,并在没有通常查询限制的情况下运行:

#!/bin/bash

alias gerrit="ssh -p 29418 gerrit.yourdomain.com gerrit"

gerrit_abandon_patches() {(
    set -e

    local message=""
    shift 1 # remove message

    local id=
    local commit=

    #Quote spaces in message to work around gerrit bug
    message=${message//[ ]/\ }
    

    IFS=$'\n' # We don't need to scope because we are in a closure
    
    for commit in $(gerrit query "$@" --current-patch-set --no-limit --format JSON | grep -e '"id":' ); do
        commit=$( echo "$commit" | sed -e 's/["{}]//g' -e 's/,/\n/g' )
        id=$(echo "$commit" | grep -e 'revision' | cut -d ':' -f 2 )

        echo "Abandoning: $id"
        echo "$commit" | grep \
            -e url \
            -e id \
            -e revision \
            -e commitMessage
        echo

        gerrit review --abandon $id -m "$message"
    done

)}