launchpad.net/~rogpeppe/juju-core/500-errgo-fix@v0.0.0-20140213181702-000000002356/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  	"launchpad.net/gnuflag"
    10  
    11  	"launchpad.net/juju-core/charm"
    12  	"launchpad.net/juju-core/cmd"
    13  	"launchpad.net/juju-core/store"
    14  )
    15  
    16  type DeleteCharmCommand struct {
    17  	ConfigCommand
    18  	Url string
    19  }
    20  
    21  func (c *DeleteCharmCommand) Info() *cmd.Info {
    22  	return &cmd.Info{
    23  		Name:    "delete-charm",
    24  		Purpose: "delete a published charm from the charm store",
    25  	}
    26  }
    27  
    28  func (c *DeleteCharmCommand) SetFlags(f *gnuflag.FlagSet) {
    29  	c.ConfigCommand.SetFlags(f)
    30  	f.StringVar(&c.Url, "url", "", "charm URL")
    31  }
    32  
    33  func (c *DeleteCharmCommand) Init(args []string) error {
    34  	// Check flags
    35  	err := c.ConfigCommand.Init(args)
    36  	if err != nil {
    37  		return err
    38  	}
    39  	if c.Url == "" {
    40  		return fmt.Errorf("--url is required")
    41  	}
    42  	return nil
    43  }
    44  
    45  func (c *DeleteCharmCommand) Run(ctx *cmd.Context) error {
    46  	// Read config
    47  	err := c.ConfigCommand.ReadConfig(ctx)
    48  	if err != nil {
    49  		return err
    50  	}
    51  
    52  	// Parse the charm URL
    53  	charmUrl, err := charm.ParseURL(c.Url)
    54  	if err != nil {
    55  		return err
    56  	}
    57  
    58  	// Open the charm store storage
    59  	s, err := store.Open(c.Config.MongoURL)
    60  	if err != nil {
    61  		return err
    62  	}
    63  	defer s.Close()
    64  
    65  	// Delete the charm by URL
    66  	_, err = s.DeleteCharm(charmUrl)
    67  	if err != nil {
    68  		return err
    69  	}
    70  	fmt.Fprintln(ctx.Stdout, "Charm", charmUrl, "deleted.")
    71  	return nil
    72  }
    73  
    74  func (c *DeleteCharmCommand) AllowInterspersedFlags() bool {
    75  	return true
    76  }