以编程方式更改github pull请求的基本分支

以编程方式更改github pull请求的基本分支,github,pull-request,Github,Pull Request,标题说明一切 有人有代码以编程方式更新github拉请求的基本分支吗?不必真正关心语言。更改PR(拉请求)基本分支的API方法是: GitHub最近(2016年8月,撰写本文时不到2年前)在其创建后添加了功能。 现在我们正在更新Pull请求API以启用新功能 例如: 拉取请求基础将更新为指向主分支 您可以将该curl调用嵌入任何脚本语言中。我在Go中编写了一个util来实现这一点: 主程序包 进口( “上下文” “fmt” “github.com/google/go-github/github”

标题说明一切


有人有代码以编程方式更新github拉请求的基本分支吗?不必真正关心语言。

更改PR(拉请求)基本分支的API方法是:

GitHub最近(2016年8月,撰写本文时不到2年前)在其创建后添加了功能。
现在我们正在更新Pull请求API以启用新功能

例如:

拉取请求基础将更新为指向
主分支


您可以将该
curl
调用嵌入任何脚本语言中。

我在Go中编写了一个util来实现这一点:

主程序包
进口(
“上下文”
“fmt”
“github.com/google/go-github/github”
“操作系统”
“字符串”
)
func envVarError(名称字符串){
fmt.Errorf(“未找到%v环境变量”,名称)
操作系统退出(1)
}
func missingArg(参数字符串,索引int){
fmt.Printf(“位置%d处缺少参数%v\n”,参数,索引)
操作系统退出(1)
}
func validateArgs(args[]字符串){
如果len(args)<2{
missingArg(“Github账户”,1)
}
如果len(args)<3{
missingArg(“旧分支”,2)
}
如果len(args)<4{
missingArg(“新分行”,第3页)
}
如果len(args)<5{
missingArg(“回购协议”(例如,罗得州海洋、特里顿、3号)
}
}
func main(){
uname:=os.Getenv(“GITHUB\u用户名”)
pass:=os.Getenv(“GITHUB\u密码”)
如果uname==“”{
envVarError(“GITHUB\u用户名”)
}
如果通过=“”{
envVarError(“GITHUB\u密码”)
}
validateArgs(os.Args)
所有者:=os.Args[1]
oldBranch:=os.Args[2]
newBranch:=os.Args[3]
repos:=strings.Split(os.Args[4],“,”)
tp:=github.BasicAuthTransport{用户名:uname,密码:pass}
客户端:=github.NewClient(tp.client())
对于u,回购:=范围回购{
opt:=&github.PullRequestListOptions{“打开”,“创建”,“描述”,github.ListOptions{Page:1}
pulls,u3;,err:=client.PullRequests.List(context.Background(),owner,repo,opt)
如果错误!=零{
fmt.Printf(“错误:%v\n”,错误)
返回
}
拉数:=len(拉数)
fmt.Println(“拉动次数=,拉动次数”)
对于i:=0;i
@RobinGreen同意。我已经重写了答案,只包含了更改拉取请求的基本分支所需的GitHub API部分。非常感谢您!在将所有回购协议从
master
转换为
main
时,我不得不迁移100个PRs,这大大缩短了我的迁移时间!
curl "https://api.github.com/repos/github/hubot/pulls/123" \
  -H 'Authorization: token TOKEN' \
  -d '{ "base": "master" }'
package main

import (
    "context"
    "fmt"
    "github.com/google/go-github/github"
    "os"
    "strings"
)

func envVarError(name string) {
    fmt.Errorf("No %v environment variable found", name)
    os.Exit(1)
}

func missingArg(arg string, index int) {
    fmt.Printf("Missing arg %v at position %d\n", arg, index)
    os.Exit(1)
}

func validateArgs(args []string) {
    if len(args) < 2 {
        missingArg("Github Account", 1)
    }
    if len(args) < 3 {
        missingArg("Old Branch", 2)
    }
    if len(args) < 4 {
        missingArg("New Branch", 3)
    }
    if len(args) < 5 {
        missingArg("Repos (e.g. oceans,triton,rhode", 3)
    }
}

func main() {
    uname := os.Getenv("GITHUB_USERNAME")
    pass := os.Getenv("GITHUB_PASSWORD")

    if uname == "" {
        envVarError("GITHUB_USERNAME")
    }
    if pass == "" {
        envVarError("GITHUB_PASSWORD")
    }

    validateArgs(os.Args)

    owner := os.Args[1]
    oldBranch := os.Args[2]
    newBranch := os.Args[3]
    repos := strings.Split(os.Args[4], ",")

    tp := github.BasicAuthTransport{Username: uname, Password: pass}

    client := github.NewClient(tp.Client())

    for _, repo := range repos {
        opt := &github.PullRequestListOptions{"open", "", oldBranch, "created", "desc", github.ListOptions{Page: 1}}
        pulls, _, err := client.PullRequests.List(context.Background(), owner, repo, opt)

        if err != nil {
            fmt.Printf("Error: %v\n", err)
            return
        }

        numberOfPulls := len(pulls)
        fmt.Println("number of pulls = ", numberOfPulls)
        for i := 0; i < numberOfPulls; i++ {
            pull := pulls[i]
            pullNumber := *pull.Number
            *pull.Base.Ref = newBranch
            fmt.Printf("Retargeting pull request %v the %v branch\n", pullNumber, *pull.Base.Ref)
            _, _, err := client.PullRequests.Edit(context.Background(), owner, repo, pullNumber, pull)
            if err != nil {
                fmt.Errorf("%d: PullRequests.Edit returned error: %v", i, err)
            } else {
                fmt.Printf("pull request %v retargeted\n", pullNumber)
            }

        }
    }
}