// UploadCharmMultiSeries uploads a charm with revision using the given charm store client, // and returns the resulting charm URL and charm. This API caters for new multi-series charms // which do not specify a series in the URL. func UploadCharmMultiSeries(c *gc.C, client *csclient.Client, url, name string) (*charm.URL, charm.Charm) { id := charm.MustParseURL(url) if id.User == "" { // We still need a user even if we are uploading a promulgated charm. id.User = "******" } ch := Repo.CharmArchive(c.MkDir(), name) // Upload the charm. curl, err := client.UploadCharm(id, ch) c.Assert(err, jc.ErrorIsNil) // Allow read permissions to everyone. err = client.Put("/"+curl.Path()+"/meta/perm/read", []string{params.Everyone}) c.Assert(err, jc.ErrorIsNil) // Return the charm and its URL. return curl, ch }
// UploadBundle uploads a bundle using the given charm store client, and // returns the resulting bundle URL and bundle. func UploadBundle(c *gc.C, client *csclient.Client, url, name string) (*charm.URL, charm.Bundle) { id := charm.MustParseURL(url) promulgatedRevision := -1 if id.User == "" { // We still need a user even if we are uploading a promulgated bundle. id.User = "******" promulgatedRevision = id.Revision } b := Repo.BundleArchive(c.MkDir(), name) // Upload the bundle. err := client.UploadBundleWithRevision(id, b, promulgatedRevision) c.Assert(err, jc.ErrorIsNil) // Allow read permissions to everyone. err = client.Put("/"+id.Path()+"/meta/perm/read", []string{params.Everyone}) c.Assert(err, jc.ErrorIsNil) // Return the bundle and its URL. return id, b }