diff options
| author | Ibrahim Serdar Acikgoz <serdaracikgoz86@gmail.com> | 2018-11-18 16:31:42 +0300 |
|---|---|---|
| committer | Ibrahim Serdar Acikgoz <serdaracikgoz86@gmail.com> | 2018-11-18 16:31:42 +0300 |
| commit | fc396fa87810a31c032f13431eb1725b551c637d (patch) | |
| tree | 4b2f2055d1578f54e7eb634f09ea2fe6a37f8b16 /main.go | |
| parent | initialized cli interface (diff) | |
| download | gitbatch-fc396fa87810a31c032f13431eb1725b551c637d.tar.gz | |
added user interface
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 193 |
1 files changed, 9 insertions, 184 deletions
@@ -1,66 +1,50 @@ package main import ( - "fmt" - "github.com/jroimartin/gocui" + "github.com/isacikgoz/gitbatch/pkg/app" + "github.com/isacikgoz/gitbatch/pkg/git" "gopkg.in/alecthomas/kingpin.v2" - "gopkg.in/src-d/go-git.v4" "io/ioutil" "log" "os" "strings" ) -type RepoEntity struct { - Name string - Repository git.Repository -} - var ( currentDir, err = os.Getwd() dir = kingpin.Flag("directory", "Directory to roam for git repositories.").Default(currentDir).Short('d').String() repoPattern = kingpin.Flag("pattern", "Pattern to filter repositories").Short('p').String() - repositories []RepoEntity - selectedRepoEntity RepoEntity + repositories []git.RepoEntity ) func main() { kingpin.Parse() repositories = FindRepos(*dir) - g, err := gocui.NewGui(gocui.OutputNormal) + app, err := app.Setup(repositories) if err != nil { log.Fatal(err) } - defer g.Close() - - g.SetManagerFunc(layout) - if err := keybindings(g); err != nil { - log.Fatal(err) - } - - if err := g.MainLoop(); err != nil && err != gocui.ErrQuit { - log.Fatal(err) - } + defer app.Close() } -func FindRepos(directory string) []RepoEntity { - var gitRepositories []RepoEntity +func FindRepos(directory string) []git.RepoEntity { + var gitRepositories []git.RepoEntity files, err := ioutil.ReadDir(directory) if err != nil { log.Fatal(err) } + filteredFiles := FilterRepos(files) for _, f := range filteredFiles { repo := directory + "/" + f.Name() - r, err := git.PlainOpen(repo) + entity, err := git.InitializeRepository(repo) if err != nil { continue } - entity := RepoEntity{f.Name(), *r} gitRepositories = append(gitRepositories, entity) } return gitRepositories @@ -78,163 +62,4 @@ func FilterRepos(files []os.FileInfo) []os.FileInfo { return filteredRepos } -func layout(g *gocui.Gui) error { - maxX, maxY := g.Size() - - if v, err := g.SetView("main", 0, 0, maxX-1, int(0.65*float32(maxY))-3); err != nil { - if err != gocui.ErrUnknownView { - return err - } - v.Title = " Matched Repositories " - v.Highlight = true - v.SelBgColor = gocui.ColorGreen - v.SelFgColor = gocui.ColorBlack - - for _, r := range repositories { - fmt.Fprintln(v, r.Name) - } - - if _, err = setCurrentViewOnTop(g, "main"); err != nil { - return err - } - } - - if v, err := g.SetView("detail", 0, int(0.65*float32(maxY))-2, maxX-1, maxY-2); err != nil { - if err != gocui.ErrUnknownView { - return err - } - v.Title = " Repository Detail " - v.Wrap = true - v.Autoscroll = true - } - - if v, err := g.SetView("keybindings", -1, maxY-2, maxX, maxY); err != nil { - if err != gocui.ErrUnknownView { - return err - } - v.BgColor = gocui.ColorBlue - v.FgColor = gocui.ColorYellow - v.Frame = false - fmt.Fprintln(v, "q: quit ↑ ↓: navigate space: select") - } - return nil -} - -func keybindings(g *gocui.Gui) error { - if err := g.SetKeybinding("", gocui.KeyCtrlC, gocui.ModNone, quit); err != nil { - return err - } - if err := g.SetKeybinding("", 'q', gocui.ModNone, quit); err != nil { - return err - } - if err := g.SetKeybinding("main", gocui.KeyArrowDown, gocui.ModNone, cursorDown); err != nil { - return err - } - if err := g.SetKeybinding("main", gocui.KeyArrowUp, gocui.ModNone, cursorUp); err != nil { - return err - } - if err := g.SetKeybinding("main", gocui.KeySpace, gocui.ModNone, markRepository); err != nil { - return err - } - return nil -} - -func cursorDown(g *gocui.Gui, v *gocui.View) error { - if v != nil { - cx, cy := v.Cursor() - if err := v.SetCursor(cx, cy+1); err != nil { - ox, oy := v.Origin() - if err := v.SetOrigin(ox, oy+1); err != nil { - return err - } - } - updateDetail(g, v) - } - return nil -} - -func cursorUp(g *gocui.Gui, v *gocui.View) error { - if v != nil { - ox, oy := v.Origin() - cx, cy := v.Cursor() - if err := v.SetCursor(cx, cy-1); err != nil && oy > 0 { - if err := v.SetOrigin(ox, oy-1); err != nil { - return err - } - } - updateDetail(g, v) - } - return nil -} - -func quit(g *gocui.Gui, v *gocui.View) error { - return gocui.ErrQuit -} - -func setCurrentViewOnTop(g *gocui.Gui, name string) (*gocui.View, error) { - if _, err := g.SetCurrentView(name); err != nil { - return nil, err - } - return g.SetViewOnTop(name) -} - -func getSelectedRepository(g *gocui.Gui, v *gocui.View) (RepoEntity, error) { - var l string - var err error - var r RepoEntity - - _, cy := v.Cursor() - if l, err = v.Line(cy); err != nil { - return r, err - } - - for _, sr := range repositories { - if l == sr.Name { - return sr, nil - } - } - return r, err -} -func updateDetail(g *gocui.Gui, v *gocui.View) error { - var err error - - _, cy := v.Cursor() - if _, err = v.Line(cy); err != nil { - return err - } - - out, err := g.View("detail") - if err != nil { - return err - } - - out.Clear() - - if repo, err := getSelectedRepository(g, v); err != nil { - return err - } else { - if list, err := repo.Repository.Remotes(); err != nil { - return err - } else { - for _, r := range list { - fmt.Fprintln(out, r) - } - } - } - return nil -} - -func markRepository(g *gocui.Gui, v *gocui.View) error { - var l string - var err error - - _, cy := v.Cursor() - if l, err = v.Line(cy); err != nil { - return err - } else { - l = l + " X" - } - - return nil -} |
