Skip to content

Commit

Permalink
Merge pull request #5182 from ds-ms/RepoUpdateName
Browse files Browse the repository at this point in the history
feat(helm): adding --name to update single repo
  • Loading branch information
hickeyma committed Jun 7, 2019
2 parents e46dd13 + c49ba7d commit 5133af0
Show file tree
Hide file tree
Showing 3 changed files with 112 additions and 4 deletions.
30 changes: 28 additions & 2 deletions cmd/helm/repo_update.go
Expand Up @@ -36,15 +36,24 @@ Information is cached locally, where it is used by commands like 'helm search'.
'helm update' is the deprecated form of 'helm repo update'. It will be removed in
future releases.
You can specify the name of a repository you want to update.
$ helm repo update <repo_name>
To update all the repositories, use 'helm repo update'.
`

var errNoRepositories = errors.New("no repositories found. You must add one before updating")
var errNoRepositoriesMatchingRepoName = errors.New("no repositories found matching the provided name. Verify if the repo exists")

type repoUpdateCmd struct {
update func([]*repo.ChartRepository, io.Writer, helmpath.Home, bool) error
home helmpath.Home
out io.Writer
strict bool
name string
}

func newRepoUpdateCmd(out io.Writer) *cobra.Command {
Expand All @@ -53,12 +62,15 @@ func newRepoUpdateCmd(out io.Writer) *cobra.Command {
update: updateCharts,
}
cmd := &cobra.Command{
Use: "update",
Use: "update [REPO_NAME]",
Aliases: []string{"up"},
Short: "Update information of available charts locally from chart repositories",
Long: updateDesc,
RunE: func(cmd *cobra.Command, args []string) error {
u.home = settings.Home
if len(args) != 0 {
u.name = args[0]
}
return u.run()
},
}
Expand All @@ -84,8 +96,22 @@ func (u *repoUpdateCmd) run() error {
if err != nil {
return err
}
repos = append(repos, r)
if len(u.name) != 0 {
if cfg.Name == u.name {
repos = append(repos, r)
break
} else {
continue
}
} else {
repos = append(repos, r)
}
}

if len(repos) == 0 {
return errNoRepositoriesMatchingRepoName
}

return u.update(repos, u.out, u.home, u.strict)
}

Expand Down
75 changes: 75 additions & 0 deletions cmd/helm/repo_update_test.go
Expand Up @@ -132,3 +132,78 @@ func TestUpdateCmdStrictFlag(t *testing.T) {
t.Errorf("Expected 'Unable to get an update', got %q", got)
}
}

func TestUpdateCmdWithSingleRepoNameWhichDoesntExist(t *testing.T) {
thome, err := tempHelmHome(t)
if err != nil {
t.Fatal(err)
}

cleanup := resetEnv()
defer func() {
os.RemoveAll(thome.String())
cleanup()
}()

settings.Home = thome

out := bytes.NewBuffer(nil)
cmd := newRepoUpdateCmd(out)

if err = cmd.RunE(cmd, []string{"randomRepo"}); err == nil {
t.Fatal("expected error due to wrong repo name")
}

if got := fmt.Sprintf("%v", err); !strings.Contains(got, "no repositories found matching the provided name. Verify if the repo exists") {
t.Errorf("Expected 'no repositories found matching the provided name. Verify if the repo exists', got %q", got)
}
}

func TestUpdateRepo(t *testing.T) {
ts, thome, err := repotest.NewTempServer("testdata/testserver/*.*")
if err != nil {
t.Fatal(err)
}

hh := helmpath.Home(thome)
cleanup := resetEnv()
defer func() {
ts.Stop()
os.RemoveAll(thome.String())
cleanup()
}()
if err := ensureTestHome(hh, t); err != nil {
t.Fatal(err)
}

settings.Home = thome

if err := addRepository("repo1", ts.URL(), "", "", hh, "", "", "", true); err != nil {
t.Error(err)
}

if err := addRepository("repo2", ts.URL(), "", "", hh, "", "", "", true); err != nil {
t.Error(err)
}

out := bytes.NewBuffer(nil)
cmd := newRepoUpdateCmd(out)

if err = cmd.RunE(cmd, []string{"repo1"}); err != nil {
t.Fatal("expected to update repo1 correctly")
}

got := out.String()

if !strings.Contains(got, "Successfully got an update from the \"repo1\"") {
t.Errorf("Expected to successfully update \"repo1\" repository, got %q", got)
}

if strings.Contains(got, "Successfully got an update from the \"repo2\"") {
t.Errorf("Shouldn't have updated \"repo2\" repository, got %q", got)
}

if !strings.Contains(got, "Update Complete.") {
t.Error("Update was not successful")
}
}
11 changes: 9 additions & 2 deletions docs/helm/helm_repo_update.md
Expand Up @@ -11,9 +11,16 @@ Information is cached locally, where it is used by commands like 'helm search'.
'helm update' is the deprecated form of 'helm repo update'. It will be removed in
future releases.

You can specify the name of a repository you want to update.

$ helm repo update <repo_name>

To update all the repositories, use 'helm repo update'.



```
helm repo update [flags]
helm repo update [REPO_NAME] [flags]
```

### Options
Expand All @@ -39,4 +46,4 @@ helm repo update [flags]

* [helm repo](helm_repo.md) - Add, list, remove, update, and index chart repositories

###### Auto generated by spf13/cobra on 16-May-2019
###### Auto generated by spf13/cobra on 7-Jun-2019

0 comments on commit 5133af0

Please sign in to comment.