github.com/rogpeppe/juju@v0.0.0-20140613142852-6337964b789e/cmd/charm-admin/deletecharm.go (about)

     1  // Copyright 2012, 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package main
     5  
     6  import (
     7  	"fmt"
     8  
     9  	"github.com/juju/charm"
    10  	"github.com/juju/charmstore"
    11  	"github.com/juju/cmd"
    12  	"launchpad.net/gnuflag"
    13  )
    14  
    15  type DeleteCharmCommand struct {
    16  	ConfigCommand
    17  	Url string
    18  }
    19  
    20  func (c *DeleteCharmCommand) Info() *cmd.Info {
    21  	return &cmd.Info{
    22  		Name:    "delete-charm",
    23  		Purpose: "delete a published charm from the charm store",
    24  	}
    25  }
    26  
    27  func (c *DeleteCharmCommand) SetFlags(f *gnuflag.FlagSet) {
    28  	c.ConfigCommand.SetFlags(f)
    29  	f.StringVar(&c.Url, "url", "", "charm URL")
    30  }
    31  
    32  func (c *DeleteCharmCommand) Init(args []string) error {
    33  	// Check flags
    34  	err := c.ConfigCommand.Init(args)
    35  	if err != nil {
    36  		return err
    37  	}
    38  	if c.Url == "" {
    39  		return fmt.Errorf("--url is required")
    40  	}
    41  	return nil
    42  }
    43  
    44  func (c *DeleteCharmCommand) Run(ctx *cmd.Context) error {
    45  	// Read config
    46  	err := c.ConfigCommand.ReadConfig(ctx)
    47  	if err != nil {
    48  		return err
    49  	}
    50  
    51  	// Parse the charm URL
    52  	charmUrl, err := charm.ParseURL(c.Url)
    53  	if err != nil {
    54  		return err
    55  	}
    56  
    57  	// Open the charm store storage
    58  	s, err := charmstore.Open(c.Config.MongoURL)
    59  	if err != nil {
    60  		return err
    61  	}
    62  	defer s.Close()
    63  
    64  	// Delete the charm by URL
    65  	_, err = s.DeleteCharm(charmUrl)
    66  	if err != nil {
    67  		return err
    68  	}
    69  	fmt.Fprintln(ctx.Stdout, "Charm", charmUrl, "deleted.")
    70  	return nil
    71  }
    72  
    73  func (c *DeleteCharmCommand) AllowInterspersedFlags() bool {
    74  	return true
    75  }