diff options
author | Michael Muré <batolettre@gmail.com> | 2018-08-09 15:28:32 +0200 |
---|---|---|
committer | Michael Muré <batolettre@gmail.com> | 2018-08-09 15:28:32 +0200 |
commit | a0d509bcddf5ae0115c8679bbd81425696552b86 (patch) | |
tree | 1b48db8cf0cf897a4ae32e361d7c46704026c93a | |
parent | 34eea1f43c0c7f386b375441d8c3a15d9d3b7c99 (diff) | |
download | git-bug-a0d509bcddf5ae0115c8679bbd81425696552b86.tar.gz |
termui: display status and label changes in show bug
-rw-r--r-- | bug/status.go | 11 | ||||
-rw-r--r-- | termui/show_bug.go | 68 |
2 files changed, 79 insertions, 0 deletions
diff --git a/bug/status.go b/bug/status.go index b1b066ff..0eee6cf1 100644 --- a/bug/status.go +++ b/bug/status.go @@ -18,3 +18,14 @@ func (s Status) String() string { return "unknown status" } } + +func (s Status) Action() string { + switch s { + case OpenStatus: + return "opened" + case ClosedStatus: + return "closed" + default: + return "unknown status" + } +} diff --git a/termui/show_bug.go b/termui/show_bug.go index d6644b1d..4f5373d6 100644 --- a/termui/show_bug.go +++ b/termui/show_bug.go @@ -1,7 +1,9 @@ package termui import ( + "bytes" "fmt" + "strings" "github.com/MichaelMure/git-bug/bug/operations" "github.com/MichaelMure/git-bug/cache" @@ -230,6 +232,72 @@ func (sb *showBug) renderMain(g *gocui.Gui, mainView *gocui.View) error { } fmt.Fprint(v, content) y0 += lines + 2 + + case operations.SetStatusOperation: + setStatus := op.(operations.SetStatusOperation) + + content := fmt.Sprintf("%s %s the bug on %s", + util.Magenta(setStatus.Author.Name), + util.Bold(setStatus.Status.Action()), + setStatus.Time().Format(timeLayout), + ) + content, lines := util.TextWrap(content, maxX) + + v, err := sb.createOpView(g, viewName, x0, y0, maxX+1, lines, true) + if err != nil { + return err + } + fmt.Fprint(v, content) + y0 += lines + 2 + + case operations.LabelChangeOperation: + labelChange := op.(operations.LabelChangeOperation) + + var added []string + for _, label := range labelChange.Added { + added = append(added, util.Bold("\""+label+"\"")) + } + + var removed []string + for _, label := range labelChange.Removed { + removed = append(removed, util.Bold("\""+label+"\"")) + } + + var action bytes.Buffer + + if len(added) > 0 { + action.WriteString("added ") + action.WriteString(strings.Join(added, " ")) + + if len(removed) > 0 { + action.WriteString(" and ") + } + } + + if len(removed) > 0 { + action.WriteString("removed ") + action.WriteString(strings.Join(removed, " ")) + } + + if len(added)+len(removed) > 1 { + action.WriteString(" labels") + } else { + action.WriteString(" label") + } + + content := fmt.Sprintf("%s %s on %s", + util.Magenta(labelChange.Author.Name), + action.String(), + labelChange.Time().Format(timeLayout), + ) + content, lines := util.TextWrap(content, maxX) + + v, err := sb.createOpView(g, viewName, x0, y0, maxX+1, lines, true) + if err != nil { + return err + } + fmt.Fprint(v, content) + y0 += lines + 2 } } |