diff --git a/.gitignore b/.gitignore index 5dacf122147b9afd66b06f306a63e92ee2493199..69f94e2ea024bd03ea3e28f3cdd1ce1a75326e42 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ /pjls -/config.json +/config.conf diff --git a/cmd/pjls/pjls.go b/cmd/pjls/pjls.go index f594c53f8e6cda3191ad4c53eac02d24cbc80b6d..ff7c5865ce167ee9605f84b7efbde9f8b85baf3a 100644 --- a/cmd/pjls/pjls.go +++ b/cmd/pjls/pjls.go @@ -2,6 +2,8 @@ package main import ( "fmt" + "os" + "github.com/spf13/viper" gl "github.com/xanzy/go-gitlab" ) @@ -11,20 +13,70 @@ type Config struct { baseurl string } -func main() { - var c Config - - viper.SetConfigName("config") - viper.AddConfigPath(".") - viper.SetConfigType("json") - err := viper.ReadInConfig() - c.token = viper.Get("token") - c.baseurl = viper.Get("baseurl") +func ReadConfig(conf string) *Config { + f, err := os.Open(conf) + if err != nil { + panic(fmt.Errorf("failed to parse config file %s", err)) + } + defer f.Close() + viper.SetConfigType("hcl") + err = viper.ReadConfig(f) + c := &Config{ + token: viper.GetString("token"), + baseurl: viper.GetString("baseurl"), + } if err != nil { panic(fmt.Errorf("Fatal error config file: %s \n", err)) } + + return c +} + +func newProjectList(client *gl.Client) func() (*gl.Project, error) { + i := 0 + opt := &gl.ListProjectsOptions{ + ListOptions: gl.ListOptions{ + Page: 1, + PerPage: 20, + }, + Archived: nil, + OrderBy: nil, + Sort: nil, + Search: nil, + Simple: nil, + Visibility: nil, + } + projects, resp, err := client.Projects.ListProjects(opt) + + return func() (*gl.Project, error) { + if projects != nil && i >= len(projects) { + if resp.NextPage == 0 { + return nil, nil + } + opt.ListOptions.Page++ + i = 0 + projects, resp, err = client.Projects.ListProjects(opt) + } + if err == nil { + i++ + return projects[i-1], nil + } else { + return nil, err + } + } +} + +func main() { + c := ReadConfig("config.conf") + client := gl.NewClient(nil, c.token) client.SetBaseURL(c.baseurl) - fmt.Println("vim-go") + + i := 0 + gen := newProjectList(client) + for p, _ := gen(); p != nil; p, _ = gen() { + fmt.Printf("% 3d: %s / %s\n", i, p.Path, p.Name) + i++ + } }