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

时间:2017-08-09 16:07:35

标签: git gerrit

因此,问题的长短不一,是因为他们狂热地遵守代码审查原则和用户归属....

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

我从那时起告诉我,我应该(合理地)先推动一个压扁的提交来测试gerrit,然后将它们指向我的回购合并......

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

我现在如何大规模放弃那里该死的话题? (用压扁的提交代替)

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

2 个答案:

答案 0 :(得分:3)

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

抱歉,我太懒了,不能让你准备好使用解决方案,但这就是我的脚本会做的事情:

  1. 准备环境

    alias gerrit="ssh -p 29418 gerrit.yourdomain.com gerrit"
    
  2. 列出所有主题提交:

    gerrit query topic:<topic>
    
  3. 剥离Change-Id&#39;

  4. Abandon一个接一个地提交:

    gerrit review <id> --abandon
    
  5. <强>更新

    感谢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替换为您需要的任何内容,或者修改脚本以获取参数。

答案 1 :(得分:0)

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

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

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

所以改变:

  • 添加查询 --current-patch-set
  • grep 表示“修订”
  • 切入“:”而不是空格(不确定是否需要它......我只是觉得前导空格更好)
  • 转义消息中的所有空格(我需要记住为此提交错误)
#!/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="$1"
    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

)}