This commit is contained in:
Adam Majer 2024-08-13 09:28:04 +02:00
parent 8cdb196164
commit cc6304b96e
2 changed files with 110 additions and 64 deletions

View File

@ -9,6 +9,7 @@ import (
"path"
"slices"
"strings"
"time"
transport "github.com/go-openapi/runtime/client"
"src.opensuse.org/autogits/common"
@ -79,7 +80,7 @@ func main() {
os.Exit(2)
}
packages := strings.Split(strings.TrimSpace(string(packageList)), "\n")
fmt.Printf("%d packages: %s\n\n", len(packages), strings.Join(packages, ","))
fmt.Printf("%d packages: %s\n\n", len(packages), strings.Join(packages, " "))
r := transport.New("src.opensuse.org", apiclient.DefaultBasePath, [](string){"https"})
r.DefaultAuthentication = transport.BearerToken(common.GetGiteaToken())
@ -162,6 +163,8 @@ func main() {
fmt.Printf("Error returned by importer. Err: %v\n", err)
os.Exit(14)
}
reposOK := true
for i := range oldPackageRepos {
pkg := oldPackageRepos[i]
dir := path.Join("repos", pkg.Name)
@ -175,7 +178,7 @@ func main() {
}
}
if !slices.Contains(strings.Split(out, "\n"), "rpm") {
out := gitExec(dir, "remote", "add", "rpm", "https://src.opensuse.org/rpm/" + pkg.Name + ".git")
out := gitExec(dir, "remote", "add", "rpm", "https://src.opensuse.org/rpm/"+pkg.Name+".git")
if len(strings.TrimSpace(out)) > 1 {
fmt.Println(out)
}
@ -194,76 +197,119 @@ func main() {
out = gitExec(dir, "rev-list", "factory", "^rpm/factory")
added_rpm_revs := strings.Split(out, "\n")
if len(added_revs) == len(old_revs) && len(added_rpm_revs) == len(old_revs) {
fmt.Printf("Something is wrong with revl-ist for (len %d): %s\n", len(added_revs), pkg.Name)
fmt.Printf("Something is wrong with rev-ist for (len %d): %s\n", len(added_revs), pkg.Name)
reposOK = false
}
}
args := make([]string, 2, len(newPackages)+2)
args[0] = "-p"
args[1] = prj
args = append(args, newPackages...)
cmd = exec.Command("./git-importer", args...)
out, err = cmd.CombinedOutput()
fmt.Print(string(out))
if err != nil {
fmt.Printf("Error returned by importer. Err: %v\n", err)
os.Exit(15)
}
if !reposOK {
fmt.Printf("aborting import due to broken repos above...\n")
os.Exit(100)
}
for _, pkg := range oldPackageRepos {
// update package
fork, err := client.Repository.CreateFork(repository.NewCreateForkParams().
WithOwner("pool").
WithRepo(pkg.Name).
WithBody(&models.CreateForkOption{
Organization: org,
}), r.DefaultAuthentication)
if err != nil {
fmt.Printf("Error while trying to create fork from pool/%s. Err: %v\n", pkg.Name, err)
os.Exit(10)
}
// update package
/*
fork, err := client.Repository.CreateFork(repository.NewCreateForkParams().
WithOwner("pool").
WithRepo(pkg.Name).
WithBody(&models.CreateForkOption{
Organization: org,
}), r.DefaultAuthentication)
if err != nil {
fmt.Printf("Error while trying to create fork from pool/%s. Err: %v\n", pkg.Name, err)
os.Exit(10)
repo := fork.Payload
repoList, err := client.Repository.RepoListBranches(
repository.NewRepoListBranchesParams().WithOwner(org).WithRepo(pkg.Name),
r.DefaultAuthentication,
)
if err != nil {
fmt.Printf("Cannot get list of branches for forked repo: %s/%s\n", org, pkg.Name)
os.Exit(11)
}
priorityBranches := []string{
"devel",
"factory",
}
idx := len(priorityBranches)
for _, branch := range repoList.Payload {
i := slices.Index(priorityBranches, branch.Name)
if i > -1 && i < idx {
idx = i
}
}
repo := fork.Payload
repoList, err := client.Repository.RepoListBranches(
repository.NewRepoListBranchesParams().WithOwner(org).WithRepo(pkg.Name),
r.DefaultAuthentication,
)
if err != nil {
fmt.Printf("Cannot get list of branches for forked repo: %s/%s\n", org, pkg.Name)
os.Exit(11)
}
priorityBranches := []string{
"devel",
"factory",
}
idx := len(priorityBranches)
for _, branch := range repoList.Payload {
i := slices.Index(priorityBranches, branch.Name)
if i > -1 && i < idx {
idx = i
}
}
branchName := priorityBranches[idx]
dir := path.Join("repos", pkg.Name)
remotes := gitExec(dir, "remote", "show")
if !slices.Contains(strings.Split(remotes, "\n"), "devel") {
gitExec(dir, "remote", "add", "devel", repo.SSHURL)
}
gitExec(dir, "branch", "main", "-f", branchName)
time.Sleep(2 * time.Second)
gitExec(dir, "push", "devel", "main")
time.Sleep(2 * time.Second)
if idx < len(priorityBranches) {
_, err := client.Repository.RepoEdit(repository.NewRepoEditParams().WithOwner(repo.Owner.UserName).WithRepo(repo.Name).WithBody(&models.EditRepoOption{
DefaultBranch: priorityBranches[idx],
DefaultMergeStyle: "fast-forward-only",
}), r.DefaultAuthentication)
_, err = client.Repository.RepoEdit(repository.NewRepoEditParams().WithOwner(org).WithRepo(repo.Name).WithBody(&models.EditRepoOption{
DefaultBranch: "main",
DefaultMergeStyle: "fast-forward-only",
}), r.DefaultAuthentication)
if err != nil {
fmt.Printf("Failed to set default branch for package fork: %s/%s Err: %v", repo.Owner.UserName, repo.Name, err)
os.Exit(12)
}
}
*/
if err != nil {
fmt.Printf("Failed to set default branch for package fork: %s/%s Err: %v", repo.Owner.UserName, repo.Name, err)
os.Exit(12)
}
}
// create new repositories
for _, pkg := range newPackages {
fmt.Printf(" %s\n", pkg)
/*
_, err := client.Organization.CreateOrgRepo(
organization.NewCreateOrgRepoParams().
WithOrg(org).
WithBody(
&models.CreateRepoOption{
Name: &pkg,
AutoInit: false,
ObjectFormatName: "sha256",
}),
r.DefaultAuthentication)
ret, err := client.Organization.CreateOrgRepo(organization.NewCreateOrgRepoParams().WithOrg(org).WithBody(
&models.CreateRepoOption{
ObjectFormatName: "sha256",
AutoInit: false,
Name: &pkg,
DefaultBranch: "main",
}),
r.DefaultAuthentication,
)
if err != nil {
fmt.Printf("Cannot create %s/%s. Err: %v", org, pkg, err)
os.Exit(13)
}
*/
if err != nil {
fmt.Printf("Error creating new package repository: %s Err: %v", pkg, err)
os.Exit(13)
}
repo := ret.Payload
dir := path.Join("repos", pkg)
remotes := gitExec(dir, "remote", "show")
if !slices.Contains(strings.Split(remotes, "\n"), "devel") {
gitExec(dir, "remote", "add", "devel", repo.SSHURL)
}
gitExec(dir, "branch", "main", "-f", "factory")
time.Sleep(2 * time.Second)
gitExec(dir, "push", "devel", "main")
time.Sleep(2 * time.Second)
_, err = client.Repository.RepoEdit(repository.NewRepoEditParams().WithOwner(org).WithRepo(pkg).WithBody(&models.EditRepoOption{
DefaultBranch: "main",
DefaultMergeStyle: "fast-forward-only",
}), r.DefaultAuthentication)
if err != nil {
fmt.Printf("Failed to set default branch for package fork: %s/%s Err: %v", repo.Owner.UserName, repo.Name, err)
os.Exit(14)
}
}
}

View File

@ -134,7 +134,7 @@ func processPullRequest(h *common.RequestHandler) error {
req := h.Data.(*common.PullRequestAction)
switch req.Action {
case "opened":
case "opened", "reopened":
return processPullRequestOpened(h)
case "synchronized":
return processPullRequestSync(h)