feat(helm): `--update` flag for `helm repo add`

When using `--update` new repositories will be added in the same way as
without  `--update` but if the repository has already been registered
then the endpoint will be updated.

Closes #1141
reviewable/pr1142/r2
Nic Roland 9 years ago
parent c7182a5a35
commit e702c589d6

@ -31,7 +31,7 @@ import (
) )
func init() { func init() {
repoCmd.AddCommand(repoAddCmd) repoCmd.AddCommand(repoAddCmd())
repoCmd.AddCommand(repoListCmd) repoCmd.AddCommand(repoListCmd)
repoCmd.AddCommand(repoRemoveCmd) repoCmd.AddCommand(repoRemoveCmd)
repoCmd.AddCommand(repoIndexCmd) repoCmd.AddCommand(repoIndexCmd)
@ -43,10 +43,42 @@ var repoCmd = &cobra.Command{
Short: "add, list, or remove chart repositories", Short: "add, list, or remove chart repositories",
} }
var repoAddCmd = &cobra.Command{ type addCmd struct {
update bool
}
func repoAddCmd() *cobra.Command {
add := &addCmd{}
cmd := &cobra.Command{
Use: "add [flags] [NAME] [URL]", Use: "add [flags] [NAME] [URL]",
Short: "add a chart repository", Short: "add a chart repository",
RunE: runRepoAdd, RunE: func(cmd *cobra.Command, args []string) error {
if err := checkArgsLength(2, len(args), "name for the chart repository", "the url of the chart repository"); err != nil {
return err
}
name, url := args[0], args[1]
var err error
if add.update {
err = updateRepository(name, url)
} else {
err = addRepository(name, url)
}
if err != nil {
return err
}
if add.update {
fmt.Println(name + " has been updated")
} else {
fmt.Println(name + " has been added to your repositories")
}
return nil
},
}
f := cmd.Flags()
f.BoolVarP(&add.update, "update", "u", false, "update old url if it exists")
return cmd
} }
var repoListCmd = &cobra.Command{ var repoListCmd = &cobra.Command{
@ -68,20 +100,6 @@ var repoIndexCmd = &cobra.Command{
RunE: runRepoIndex, RunE: runRepoIndex,
} }
func runRepoAdd(cmd *cobra.Command, args []string) error {
if err := checkArgsLength(2, len(args), "name for the chart repository", "the url of the chart repository"); err != nil {
return err
}
name, url := args[0], args[1]
if err := addRepository(name, url); err != nil {
return err
}
fmt.Println(name + " has been added to your repositories")
return nil
}
func runRepoList(cmd *cobra.Command, args []string) error { func runRepoList(cmd *cobra.Command, args []string) error {
f, err := repo.LoadRepositoriesFile(repositoriesFile()) f, err := repo.LoadRepositoriesFile(repositoriesFile())
if err != nil { if err != nil {
@ -141,6 +159,14 @@ func addRepository(name, url string) error {
return insertRepoLine(name, url) return insertRepoLine(name, url)
} }
func updateRepository(name, url string) error {
if err := repo.DownloadIndexFile(name, url, cacheIndexFile(name)); err != nil {
return errors.New("Looks like " + url + " is not a valid chart repository or cannot be reached: " + err.Error())
}
return updateRepoLine(name, url)
}
func removeRepoLine(name string) error { func removeRepoLine(name string) error {
r, err := repo.LoadRepositoriesFile(repositoriesFile()) r, err := repo.LoadRepositoriesFile(repositoriesFile())
if err != nil { if err != nil {
@ -197,3 +223,19 @@ func insertRepoLine(name, url string) error {
b, _ := yaml.Marshal(&f.Repositories) b, _ := yaml.Marshal(&f.Repositories)
return ioutil.WriteFile(repositoriesFile(), b, 0666) return ioutil.WriteFile(repositoriesFile(), b, 0666)
} }
func updateRepoLine(name, url string) error {
f, err := repo.LoadRepositoriesFile(repositoriesFile())
if err != nil {
return err
}
if f.Repositories == nil {
f.Repositories = make(map[string]string)
}
f.Repositories[name] = url
b, _ := yaml.Marshal(&f.Repositories)
return ioutil.WriteFile(repositoriesFile(), b, 0666)
}

@ -65,6 +65,10 @@ func TestRepoAdd(t *testing.T) {
t.Errorf("Duplicate repository name was added") t.Errorf("Duplicate repository name was added")
} }
if err := updateRepository(testName, testURL); err == nil {
t.Errorf("Repository was not updated: %s", err)
}
} }
func TestRepoRemove(t *testing.T) { func TestRepoRemove(t *testing.T) {

Loading…
Cancel
Save