aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Muré <batolettre@gmail.com>2018-07-17 20:51:09 +0200
committerMichael Muré <batolettre@gmail.com>2018-07-17 20:51:09 +0200
commit43bf0063f2994463cdb98ec6420b786ca41dde28 (patch)
tree5a2c29ac37635d1cb6b020d7ce7f51849c42fc26
parent1332a6ec0a00b2475bc2b7b35b4c61425361d6b6 (diff)
downloadgit-bug-43bf0063f2994463cdb98ec6420b786ca41dde28.tar.gz
crude implementation of show
-rw-r--r--Readme.md3
-rw-r--r--bug/comment.go6
-rw-r--r--bug/snapshot.go3
-rw-r--r--commands/command.go1
-rw-r--r--commands/show.go74
5 files changed, 87 insertions, 0 deletions
diff --git a/Readme.md b/Readme.md
index bb997c18..e4f58caf 100644
--- a/Readme.md
+++ b/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
```
diff --git a/bug/comment.go b/bug/comment.go
index 09cd49bd..8ea4154f 100644
--- a/bug/comment.go
+++ b/bug/comment.go
@@ -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)
+}
diff --git a/bug/snapshot.go b/bug/snapshot.go
index 41d96aa2..9229e7a1 100644
--- a/bug/snapshot.go
+++ b/bug/snapshot.go
@@ -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)
}
diff --git a/commands/command.go b/commands/command.go
index 111f9603..30f86848 100644
--- a/commands/command.go
+++ b/commands/command.go
@@ -52,6 +52,7 @@ func init() {
"open": openCmd,
"pull": pullCmd,
"push": pushCmd,
+ "show": showCmd,
"webui": webUICmd,
}
}
diff --git a/commands/show.go b/commands/show.go
new file mode 100644
index 00000000..a8414384
--- /dev/null
+++ b/commands/show.go
@@ -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,
+}