A tool to migrate GitHub Repositories to Gitea including all issues
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
gitea-github-migrator/web/migration/repos.go

62 lines
1.7 KiB

package migration
import (
bgctx "context"
"regexp"
"strings"
"git.jonasfranz.software/JonasFranzDEV/gitea-github-migrator/migrations"
"git.jonasfranz.software/JonasFranzDEV/gitea-github-migrator/web/context"
"github.com/google/go-github/github"
)
const repoRegex = "^[A-Za-z0-9-.]+/[A-Za-z0-9-.]+$"
// ListRepos shows all available repos of the signed in user
func ListRepos(ctx *context.Context) {
repos, _, err := ctx.Client.Repositories.List(bgctx.Background(), ctx.User.Username, &github.RepositoryListOptions{
ListOptions: github.ListOptions{
PerPage: 100,
},
})
if err != nil {
ctx.Handle(500, "list repositories", err)
return
}
ctx.Data["Repos"] = repos
ctx.HTML(200, "repos")
}
// ListReposPost handles the form submission of ListRepos
func ListReposPost(ctx *context.Context) {
if err := ctx.Req.ParseForm(); err != nil {
ctx.Handle(500, "parse form", err)
return
}
// TODO implement migration options
job := migrations.NewJob(&migrations.Options{
Labels: true,
Comments: true,
Issues: true,
Milestones: true,
PullRequests: true,
Strategy: migrations.Classic,
NewOwnerID: int(ctx.GiteaUser.ID), // TODO implement user/org selection
}, ctx.GiteaClient, ctx.Client)
for repo, val := range ctx.Req.Form {
activated := strings.Join(val, "")
if activated != "on" {
continue
}
// Validate repo format (reponame/owner)
if matched, err := regexp.MatchString(repoRegex, repo); err != nil || !matched {
continue
}
job.Repositories = append(job.Repositories, repo)
}
go job.StartMigration()
ctx.SetCurrentJob(job)
ctx.Data["StatusReport"] = job.StatusReport()
ctx.HTML(200, "migration")
}