Readme.md 🔗
@@ -73,6 +73,9 @@ git bug pull [<remote>]
# Push bugs update to a git remote
git bug push [<remote>]
+# Display the details of a bug
+git bug show <id>
+
# Launch the web UI
git bug webui
```
Michael Muré created
Readme.md | 3 +
bug/comment.go | 6 +++
bug/snapshot.go | 3 +
commands/command.go | 1
commands/show.go | 74 +++++++++++++++++++++++++++++++++++++++++++++++
5 files changed, 87 insertions(+)
@@ -73,6 +73,9 @@ git bug pull [<remote>]
# Push bugs update to a git remote
git bug push [<remote>]
+# Display the details of a bug
+git bug show <id>
+
# Launch the web UI
git bug webui
```
@@ -1,5 +1,7 @@
package bug
+import "time"
+
type Comment struct {
Author Person
Message string
@@ -8,3 +10,7 @@ type Comment struct {
// Should be used only for human display, never for ordering as we can't rely on it in a distributed system.
Time int64
}
+
+func (c Comment) FormatTime() string {
+ return time.Unix(c.Time, 0).Format(time.RFC822)
+}
@@ -33,6 +33,9 @@ func (snap Snapshot) Summary() string {
}
func (snap Snapshot) LastEdit() time.Time {
+ if len(snap.Comments) == 0 {
+ return time.Unix(0, 0)
+ }
lastEditTimestamp := snap.Comments[len(snap.Comments)-1].Time
return time.Unix(lastEditTimestamp, 0)
}
@@ -52,6 +52,7 @@ func init() {
"open": openCmd,
"pull": pullCmd,
"push": pushCmd,
+ "show": showCmd,
"webui": webUICmd,
}
}
@@ -0,0 +1,74 @@
+package commands
+
+import (
+ "errors"
+ "fmt"
+ "github.com/MichaelMure/git-bug/bug"
+ "github.com/MichaelMure/git-bug/repository"
+ "github.com/MichaelMure/git-bug/util"
+ "strings"
+)
+
+var line = strings.Repeat("-", 50)
+
+func runShowBug(repo repository.Repo, args []string) error {
+ if len(args) > 1 {
+ return errors.New("Only showing one bug at a time is supported")
+ }
+
+ if len(args) == 0 {
+ return errors.New("You must provide a bug id")
+ }
+
+ prefix := args[0]
+
+ b, err := bug.FindBug(repo, prefix)
+ if err != nil {
+ return err
+ }
+
+ snapshot := b.Compile()
+
+ if len(snapshot.Comments) == 0 {
+ return errors.New("Invalid bug: no comment")
+ }
+
+ firstComment := snapshot.Comments[0]
+
+ // Header
+ fmt.Printf("[%s] %s %s\n\n",
+ util.Yellow(snapshot.Status),
+ util.Cyan(snapshot.HumanId()),
+ snapshot.Title,
+ )
+
+ fmt.Printf("%s opened this issue %s\n\n",
+ util.Magenta(firstComment.Author.Name),
+ firstComment.FormatTime(),
+ )
+
+ // Comments
+ indent := " "
+
+ for i, comment := range snapshot.Comments {
+ fmt.Printf("%s#%d %s <%s>\n\n",
+ indent,
+ i,
+ comment.Author.Name,
+ comment.Author.Email,
+ )
+
+ fmt.Printf("%s%s\n\n\n",
+ indent,
+ comment.Message,
+ )
+ }
+
+ return nil
+}
+
+var showCmd = &Command{
+ Description: "Display the details of a bug",
+ Usage: "<id>",
+ RunMethod: runShowBug,
+}