Change summary
  cache/repo_cache_bug.go | 18 +++++++++++++++++
commands/rm.go          | 45 +++++++++++++++++++++++++++++++++++++++++++
commands/root.go        |  1 
3 files changed, 64 insertions(+)
  Detailed changes
  
  
    
    @@ -359,3 +359,21 @@ func (c *RepoCache) NewBugRaw(author *IdentityCache, unixTime int64, title strin
 
 	return cached, op, nil
 }
+
+// RemoveBug removes a bug from the cache and repo
+func (c *RepoCache) RemoveBug(prefix string) error {
+	b, err := c.ResolveBugPrefix(prefix)
+	if err != nil {
+		return err
+	}
+
+	err = bug.RemoveLocalBug(c.repo, b.Id())
+	if err != nil {
+		return err
+	}
+
+	delete(c.bugs, b.Id())
+	delete(c.bugExcerpts, b.Id())
+
+	return c.writeBugCache()
+}
  
  
  
    
    @@ -0,0 +1,45 @@
+package commands
+
+import (
+	"fmt"
+
+	"github.com/spf13/cobra"
+)
+
+type rmOptions struct {
+}
+
+func newRmCommand() *cobra.Command {
+	env := newEnv()
+	options := rmOptions{}
+
+	cmd := &cobra.Command{
+		Use:      "rm <id>",
+		Short:    "Remove an existing bug.",
+		PreRunE:  loadBackendEnsureUser(env),
+		PostRunE: closeBackend(env),
+		RunE: func(cmd *cobra.Command, args []string) error {
+			return runRm(env, options, args)
+		},
+	}
+
+	flags := cmd.Flags()
+	flags.SortFlags = false
+
+	return cmd
+}
+
+func runRm(env *Env, opts rmOptions, args []string) error {
+	if len(args) == 0 {
+		return fmt.Errorf("you must provide a bug id prefix to remove")
+	}
+
+	err := env.backend.RemoveBug(args[0])
+	if err != nil {
+		return err
+	}
+
+	env.out.Printf("bug %s removed\n", args[0])
+
+	return nil
+}
  
  
  
    
    @@ -71,6 +71,7 @@ _git_bug() {
 	cmd.AddCommand(newLsLabelCommand())
 	cmd.AddCommand(newPullCommand())
 	cmd.AddCommand(newPushCommand())
+	cmd.AddCommand(newRmCommand())
 	cmd.AddCommand(newSelectCommand())
 	cmd.AddCommand(newShowCommand())
 	cmd.AddCommand(newStatusCommand())