reworked project structure

This commit is contained in:
Paul 2019-07-07 12:47:28 +02:00
parent 2d2ba028db
commit 6af4866f2d
2 changed files with 105 additions and 115 deletions

View File

@ -14,12 +14,19 @@ import (
)
// GetConfig fetch configuration
func GetConfig(configfile string, config *Config, globalconfig *GlobalConfig, githubconfig *GitHubConfig, gogsconfig *GogsConfig) {
func GetConfig(config *Config) {
var configfile string
var globalconfig GlobalConfig
var githubconfig GitHubConfig
var gogsconfig GogsConfig
flag.Usage = Usage
flag.StringVar(&configfile, "configfile", "github-to-gogs.ini", "config file to use with github-to-gogs section")
flag.Parse()
cfg, err := ini.Load(configfile)
HandleError(err)
HandleFatalError(err)
globalsection := cfg.Section("global")
githubsection := cfg.Section("github")
@ -48,96 +55,22 @@ func GetConfig(configfile string, config *Config, globalconfig *GlobalConfig, gi
gogsconfig.Mirror, err = gogssection.Key("mirror").Bool()
HandleError(err)
*config = Config{globalconfig: *globalconfig,
githubconfig: *githubconfig,
gogsconfig: *gogsconfig}
*config = Config{globalconfig: globalconfig,
githubconfig: githubconfig,
gogsconfig: gogsconfig}
}
// CheckGogsIsExistingRepo ...
func CheckGogsIsExistingRepo(repo GitHubRepo) bool {
var isExists bool
client = &http.Client{}
resp = &http.Response{}
gogsrepourl := fmt.Sprintf(gogsconfig.RepoURLTmpl, gogsconfig.DestUsername, repo.Name)
req, err := http.NewRequest("GET", gogsrepourl, nil)
req.Header.Set("Authorization", gogsconfig.AuthToken)
req.Header.Set("User-Agent", globalconfig.UserAgent)
resp, err = client.Do(req)
HandleError(err)
if resp.StatusCode == 200 {
isExists = true
} else {
isExists = false
}
return isExists
}
// GetGogsUserUID ...
func GetGogsUserUID(config *Config) {
var gogsorg GogsOrg
client = &http.Client{}
resp = &http.Response{}
gogsrepourl := fmt.Sprintf(config.gogsconfig.OrgsURLTmpl, config.gogsconfig.DestUsername)
req, err := http.NewRequest("GET", gogsrepourl, nil)
req.Header.Set("Authorization", config.gogsconfig.AuthToken)
req.Header.Set("User-Agent", config.globalconfig.UserAgent)
resp, err = client.Do(req)
HandleError(err)
err = json.Unmarshal(*GetResponseBody(resp), &gogsorg)
HandleError(err)
gogsconfig.UID = gogsorg.ID
}
// MigrateReposToGogs ...
func MigrateReposToGogs(repolist []GitHubRepo) {
fmt.Println("Migrate repos to Gogs...")
client = &http.Client{}
resp = &http.Response{}
for _, elem := range repolist {
if !CheckGogsIsExistingRepo(elem) {
jsondata := fmt.Sprintf(`{"uid" : %d, "repo_name" : "%s" , "mirror" : %v, "clone_addr" : "%s"}`, gogsconfig.UID, elem.Name, true, elem.CloneURL)
fmt.Println(fmt.Sprintf("OK : Send migrating instruction for %s to gogs webservice", elem.Name))
req, err := http.NewRequest("POST", gogsconfig.MigrateURL, bytes.NewBufferString(jsondata))
HandleError(err)
req.Header.Add("Content-Type", gogsconfig.ContentType)
req.Header.Set("User-Agent", globalconfig.UserAgent)
req.Header.Set("Authorization", gogsconfig.AuthToken)
client.Timeout = globalconfig.RequestTimeout
resp, err = client.Do(req)
HandleError(err)
} else {
fmt.Println(fmt.Sprintf("KO : Not migrating, %s exists ", elem.Name))
}
}
}
// GetReposFromGitHub ...
func GetReposFromGitHub() []GitHubRepo {
// GetReposFromGitHub get starred repositories from github
func GetReposFromGitHub(config *Config) []GitHubRepo {
var repolist []GitHubRepo
var repo []GitHubRepo
for num := 1; num <= githubconfig.MaxPagesNumber; num++ {
url := fmt.Sprintf(githubconfig.StarsPages, githubconfig.AuthUsername, num)
InvokeGitHub(url)
for num := 1; num <= config.githubconfig.MaxPagesNumber; num++ {
url := fmt.Sprintf(config.githubconfig.StarsPages, config.githubconfig.AuthUsername, num)
err = json.Unmarshal(*GetResponseBody(resp), &repo)
resp := InvokeGitHub(config, url)
err := json.Unmarshal(*GetResponseBody(resp), &repo)
HandleError(err)
for _, elem := range repo {
@ -149,28 +82,101 @@ func GetReposFromGitHub() []GitHubRepo {
}
// InvokeGitHub ...
func InvokeGitHub(url string) {
client = &http.Client{}
resp = &http.Response{}
func InvokeGitHub(config *Config, url string) *http.Response {
req, err := http.NewRequest("GET", url, nil)
HandleError(err)
req.Header.Add("Content-Type", githubconfig.ContentType)
req.Header.Set("User-Agent", globalconfig.UserAgent)
req.SetBasicAuth(githubconfig.AuthUsername, githubconfig.AuthPassword)
req.Header.Add("Content-Type", config.githubconfig.ContentType)
req.Header.Set("User-Agent", config.globalconfig.UserAgent)
req.SetBasicAuth(config.githubconfig.AuthUsername, config.githubconfig.AuthPassword)
resp, err = client.Do(req)
client := &http.Client{}
resp, err := client.Do(req)
HandleError(err)
return resp
}
// GetResponseBody ...
// GetResponseBody converts http responses bodies as bytes slice
func GetResponseBody(resp *http.Response) *[]byte {
bodyBytes, err := ioutil.ReadAll(resp.Body)
HandleError(err)
return &bodyBytes
}
// CheckGogsExistingRepo checks if there's an existing repository in gogs
func CheckGogsExistingRepo(config *Config, repo GitHubRepo) bool {
var isExists bool
gogsrepourl := fmt.Sprintf(config.gogsconfig.RepoURLTmpl, config.gogsconfig.DestUsername, repo.Name)
req, err := http.NewRequest("GET", gogsrepourl, nil)
req.Header.Set("Authorization", config.gogsconfig.AuthToken)
req.Header.Set("User-Agent", config.globalconfig.UserAgent)
client := &http.Client{}
resp, err := client.Do(req)
HandleError(err)
if resp.StatusCode == 200 {
isExists = true
} else {
isExists = false
}
return isExists
}
// GetGogsUserUID get the logued user identifier
func GetGogsUserUID(config *Config) {
var gogsorg GogsOrg
gogsrepourl := fmt.Sprintf(config.gogsconfig.OrgsURLTmpl, config.gogsconfig.DestUsername)
req, err := http.NewRequest("GET", gogsrepourl, nil)
req.Header.Set("Authorization", config.gogsconfig.AuthToken)
req.Header.Set("User-Agent", config.globalconfig.UserAgent)
client := &http.Client{}
resp, err := client.Do(req)
HandleError(err)
err = json.Unmarshal(*GetResponseBody(resp), &gogsorg)
HandleError(err)
config.gogsconfig.UID = gogsorg.ID
}
// MigrateReposToGogs migrates input repositories to gogs
func MigrateReposToGogs(config *Config, repolist []GitHubRepo) {
fmt.Println("Migrate repos to Gogs...")
client := &http.Client{}
for _, elem := range repolist {
if !CheckGogsExistingRepo(config, elem) {
jsondata := fmt.Sprintf(`{"uid" : %d, "repo_name" : "%s" , "mirror" : %v, "clone_addr" : "%s"}`, config.gogsconfig.UID, elem.Name, true, elem.CloneURL)
fmt.Println(fmt.Sprintf("Migrating repo %s to gogs rest api", elem.Name))
req, err := http.NewRequest("POST", config.gogsconfig.MigrateURL, bytes.NewBufferString(jsondata))
HandleError(err)
req.Header.Add("Content-Type", config.gogsconfig.ContentType)
req.Header.Set("User-Agent", config.globalconfig.UserAgent)
req.Header.Set("Authorization", config.gogsconfig.AuthToken)
client.Timeout = config.globalconfig.RequestTimeout
resp, err := client.Do(req)
HandleError(err)
fmt.Println(resp.StatusCode)
} else {
fmt.Println(fmt.Sprintf("Not migrating, %s exists in gogs", elem.Name))
}
}
}
// HandleError handles errors to return err
func HandleError(err error) error {
if err != nil {

View File

@ -1,25 +1,9 @@
package main
import (
"flag"
"net/http"
)
var config Config
var globalconfig GlobalConfig
var githubconfig GitHubConfig
var gogsconfig GogsConfig
var err error
var client *http.Client
var resp *http.Response
var configpath string
func main() {
flag.StringVar(&configpath, "configfile", "github_to_gogs.ini", "config file to use with github_to_gogs section")
flag.Parse()
GetConfig(configpath, &config, &globalconfig, &githubconfig, &gogsconfig)
var config Config
GetConfig(&config)
GetGogsUserUID(&config)
repolist := GetReposFromGitHub()
MigrateReposToGogs(repolist)
repolist := GetReposFromGitHub(&config)
MigrateReposToGogs(&config, repolist)
}