Merge pull request #489 from michelleN/valid-repo

feat(repo): validate repo url
pull/559/head
Michelle Noorali 10 years ago
commit abd1a5c1bf

@ -43,6 +43,14 @@ const repoDesc = `Helm repositories store Helm charts.
For more details, use 'helm repo CMD -h'.
`
const addRepoDesc = `The add repository command is used to add a name a repository url to your
chart repository list. The repository url must begin with a valid protocoal. At the moment,
we only support google cloud storage for chart repositories.
A valid command might look like:
$ helm repo add charts gs://kubernetes-charts
`
func repoCommands() cli.Command {
return cli.Command{
Name: "repository",
@ -51,10 +59,11 @@ func repoCommands() cli.Command {
Description: repoDesc,
Subcommands: []cli.Command{
{
Name: "add",
Usage: "Add a chart repository to the remote manager.",
ArgsUsage: "[NAME] [REPOSITORY_URL]",
Action: func(c *cli.Context) { run(c, addRepo) },
Name: "add",
Usage: "Add a chart repository to the remote manager.",
Description: addRepoDesc,
ArgsUsage: "[NAME] [REPOSITORY_URL]",
Action: func(c *cli.Context) { run(c, addRepo) },
},
{
Name: "list",
@ -66,7 +75,7 @@ func repoCommands() cli.Command {
Name: "remove",
Aliases: []string{"rm"},
Usage: "Remove a chart repository from the remote manager.",
ArgsUsage: "REPOSITORY_URL",
ArgsUsage: "REPOSITORY_NAME",
Action: func(c *cli.Context) { run(c, removeRepo) },
},
},

@ -17,6 +17,7 @@ limitations under the License.
package repo
import (
"errors"
"fmt"
"strings"
"sync"
@ -62,6 +63,11 @@ func (rs *inmemRepoService) CreateRepo(repository IRepo) error {
URL := repository.GetURL()
name := repository.GetName()
valid := GCSRepoURLMatcher.MatchString(URL)
if !valid {
return errors.New(URL + " is an invalid Repo URL")
}
for u, r := range rs.repositories {
if u == URL {
return fmt.Errorf("Repository with URL %s already exists", URL)

@ -85,6 +85,19 @@ func TestCreateRepoWithDuplicateURL(t *testing.T) {
}
}
func TestCreateRepoWithInvalidURL(t *testing.T) {
rs := NewInmemRepoService()
invalidURL := "fake://sfds"
r, err := newRepo(invalidURL, "", TestName, GCSRepoFormat, GCSRepoType)
if err != nil {
t.Fatalf("cannot create test repo: %v", err)
}
if err = rs.CreateRepo(r); err == nil {
t.Fatalf("created repo with invalid URL: %s", invalidURL)
}
}
func TestGetRepoWithInvalidURL(t *testing.T) {
invalidURL := "https://not.a.valid/url"
rs := NewInmemRepoService()
@ -96,7 +109,7 @@ func TestGetRepoWithInvalidURL(t *testing.T) {
func TestGetRepoURLByName(t *testing.T) {
rs := NewInmemRepoService()
testURL := "gcs://helm-test-charts"
testURL := "gs://helm-test-charts"
r, err := newRepo(testURL, "", TestName, GCSRepoFormat, GCSRepoType)
err = rs.CreateRepo(r)
if err != nil {

Loading…
Cancel
Save