Diff
1diff --git a/git/git.go b/git/git.go
2index 68783e4b29d46b8fc359e4222fa5d371efd866ba..87a9658ef1e2816928674ef2737e6e5983366793 100644
3--- a/git/git.go
4+++ b/git/git.go
5@@ -1,6 +1,7 @@
6 package git
7
8 import (
9+ "errors"
10 "log"
11 "os"
12 "sort"
13@@ -11,6 +12,8 @@ import (
14 "github.com/go-git/go-git/v5/plumbing/object"
15 )
16
17+var ErrMissingRepo = errors.New("missing repo")
18+
19 type Repo struct {
20 Name string
21 Repository *git.Repository
22@@ -58,6 +61,17 @@ func (rs *RepoSource) AllRepos() []*Repo {
23 return rs.repos
24 }
25
26+func (rs *RepoSource) GetRepo(name string) (*Repo, error) {
27+ rs.mtx.Lock()
28+ defer rs.mtx.Unlock()
29+ for _, r := range rs.repos {
30+ if r.Name == name {
31+ return r, nil
32+ }
33+ }
34+ return nil, ErrMissingRepo
35+}
36+
37 func (rs *RepoSource) GetCommits(limit int) []RepoCommit {
38 rs.mtx.Lock()
39 defer rs.mtx.Unlock()
40diff --git a/tui/bubble.go b/tui/bubble.go
41index 42fdef6b01732ffa202c81d70101a78b7d179b3a..d16ca4bc0411eb73d18bfd73c9c4c93b5bdf8086 100644
42--- a/tui/bubble.go
43+++ b/tui/bubble.go
44@@ -83,12 +83,7 @@ func (b *Bubble) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
45 b.width = msg.Width
46 b.height = msg.Height
47 case selection.SelectedMsg:
48- rmd := b.repos[msg.Index].Readme
49- b.readmeViewport.Viewport.GotoTop()
50- b.readmeViewport.Viewport.Height = b.height - verticalPadding - viewportHeightConstant
51- b.readmeViewport.Viewport.Width = boxLeftWidth - 2
52- b.readmeViewport.Viewport.SetContent(rmd)
53- b.boxes[1] = b.readmeViewport
54+ cmds = append(cmds, b.getRepoCmd(b.repos[msg.Index].Name))
55 }
56 if b.state == loadedState {
57 ab, cmd := b.boxes[b.activeBox].Update(msg)
58diff --git a/tui/commands.go b/tui/commands.go
59index c7c62427a1376db76470d5717989f7b3bb3d4859..d1749ae0e9d103ca481a8f58e036212492abb642 100644
60--- a/tui/commands.go
61+++ b/tui/commands.go
62@@ -21,6 +21,22 @@ func (b *Bubble) windowChangesCmd() tea.Msg {
63 return windowMsg{}
64 }
65
66+func (b *Bubble) getRepoCmd(name string) tea.Cmd {
67+ return func() tea.Msg {
68+ r, err := b.repoSource.GetRepo(name)
69+ if err != nil {
70+ return errMsg{err}
71+ }
72+ b.readmeViewport.Viewport.GotoTop()
73+ b.readmeViewport.Viewport.Height = b.height - verticalPadding - viewportHeightConstant
74+ b.readmeViewport.Viewport.Width = boxLeftWidth - 2
75+ b.readmeViewport.Viewport.SetContent(r.Readme)
76+ b.boxes[1] = b.readmeViewport
77+ b.activeBox = 1
78+ return nil
79+ }
80+}
81+
82 func (b *Bubble) loadGitCmd() tea.Msg {
83 b.repos = b.repoSource.AllRepos()
84 rs := make([]string, 0)