From f4f146cd8483995c46b327d1e5d861aecb16f491 Mon Sep 17 00:00:00 2001 From: Rakshit Yadav Date: Fri, 8 May 2026 17:03:32 +0530 Subject: [PATCH 1/5] fix: skip interactive prompt when registry update flags are provided Signed-off-by: Rakshit Yadav --- cmd/harbor/root/registry/update.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cmd/harbor/root/registry/update.go b/cmd/harbor/root/registry/update.go index ac755625c..8b96279d6 100644 --- a/cmd/harbor/root/registry/update.go +++ b/cmd/harbor/root/registry/update.go @@ -68,6 +68,9 @@ func UpdateRegistryCommand() *cobra.Command { } flags := cmd.Flags() + interactive := !(flags.Changed("name") || flags.Changed("type") || flags.Changed("description") || + flags.Changed("url") || flags.Changed("insecure") || flags.Changed("credential-access-key") || + flags.Changed("credential-access-secret") || flags.Changed("credential-type")) if flags.Changed("name") { updateView.Name = opts.Name } @@ -97,7 +100,9 @@ func UpdateRegistryCommand() *cobra.Command { updateView.Credential.Type = opts.Credential.Type } - update.UpdateRegistryView(updateView) + if interactive { + update.UpdateRegistryView(updateView) + } err = api.UpdateRegistry(updateView, registryId) if err != nil { return fmt.Errorf("failed to update registry: %v", err) From f9655e79eb77a7d60b1bb6207aaa33f325bd9cfe Mon Sep 17 00:00:00 2001 From: Rakshit Yadav Date: Fri, 8 May 2026 18:26:40 +0530 Subject: [PATCH 2/5] align registry update flag handling with existing command patterns Signed-off-by: Rakshit Yadav --- cmd/harbor/root/registry/update.go | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/cmd/harbor/root/registry/update.go b/cmd/harbor/root/registry/update.go index 8b96279d6..3c718aee1 100644 --- a/cmd/harbor/root/registry/update.go +++ b/cmd/harbor/root/registry/update.go @@ -68,9 +68,7 @@ func UpdateRegistryCommand() *cobra.Command { } flags := cmd.Flags() - interactive := !(flags.Changed("name") || flags.Changed("type") || flags.Changed("description") || - flags.Changed("url") || flags.Changed("insecure") || flags.Changed("credential-access-key") || - flags.Changed("credential-access-secret") || flags.Changed("credential-type")) + interactive := !hasUpdateFlags(cmd) if flags.Changed("name") { updateView.Name = opts.Name } @@ -123,3 +121,15 @@ func UpdateRegistryCommand() *cobra.Command { return cmd } + +func hasUpdateFlags(cmd *cobra.Command) bool { + flags := cmd.Flags() + return flags.Changed("name") || + flags.Changed("type") || + flags.Changed("description") || + flags.Changed("url") || + flags.Changed("insecure") || + flags.Changed("credential-access-key") || + flags.Changed("credential-access-secret") || + flags.Changed("credential-type") +} \ No newline at end of file From 71af71132e7504018b51fa9acf807bb803e9f77c Mon Sep 17 00:00:00 2001 From: Rakshit Yadav Date: Sat, 9 May 2026 12:11:14 +0530 Subject: [PATCH 3/5] using opts instead of flags Signed-off-by: Rakshit Yadav --- cmd/harbor/root/registry/update.go | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/cmd/harbor/root/registry/update.go b/cmd/harbor/root/registry/update.go index 3c718aee1..4c89075eb 100644 --- a/cmd/harbor/root/registry/update.go +++ b/cmd/harbor/root/registry/update.go @@ -68,7 +68,7 @@ func UpdateRegistryCommand() *cobra.Command { } flags := cmd.Flags() - interactive := !hasUpdateFlags(cmd) + interactive := !hasUpdateValues(opts) if flags.Changed("name") { updateView.Name = opts.Name } @@ -122,14 +122,13 @@ func UpdateRegistryCommand() *cobra.Command { return cmd } -func hasUpdateFlags(cmd *cobra.Command) bool { - flags := cmd.Flags() - return flags.Changed("name") || - flags.Changed("type") || - flags.Changed("description") || - flags.Changed("url") || - flags.Changed("insecure") || - flags.Changed("credential-access-key") || - flags.Changed("credential-access-secret") || - flags.Changed("credential-type") +func hasUpdateValues(opts *models.Registry) bool { + return opts.Name != "" || + opts.Type != "" || + opts.Description != "" || + opts.URL != "" || + opts.Insecure || + opts.Credential.AccessKey != "" || + opts.Credential.AccessSecret != "" || + opts.Credential.Type != "" } \ No newline at end of file From 10938e742f8c1ae5f716307da31401542f139669 Mon Sep 17 00:00:00 2001 From: Rakshit Yadav Date: Wed, 24 Jun 2026 23:56:13 +0530 Subject: [PATCH 4/5] adding id as compulsary while updating registry Signed-off-by: Rakshit Yadav --- cmd/harbor/root/registry/update.go | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/cmd/harbor/root/registry/update.go b/cmd/harbor/root/registry/update.go index 4c89075eb..f901b63d3 100644 --- a/cmd/harbor/root/registry/update.go +++ b/cmd/harbor/root/registry/update.go @@ -15,6 +15,7 @@ package registry import ( "fmt" + "strconv" "github.com/goharbor/go-client/pkg/sdk/v2.0/models" "github.com/goharbor/harbor-cli/pkg/api" @@ -37,10 +38,21 @@ func UpdateRegistryCommand() *cobra.Command { var err error var registryId int64 + interactive := !hasUpdateValues(opts) + + if !interactive && len(args) == 0 { + return fmt.Errorf("registry ID is mandatory for non-interactive updates") + } + if len(args) > 0 { - registryId, err = api.GetRegistryIdByName(args[0]) - if err != nil { - return fmt.Errorf("failed to get registry id: %v", err) + id, err := strconv.ParseInt(args[0], 10, 64) + if err == nil { + registryId = id + } else { + registryId, err = api.GetRegistryIdByName(args[0]) + if err != nil { + return fmt.Errorf("failed to get registry id: %v", err) + } } } else { registryId = prompt.GetRegistryNameFromUser() @@ -68,7 +80,6 @@ func UpdateRegistryCommand() *cobra.Command { } flags := cmd.Flags() - interactive := !hasUpdateValues(opts) if flags.Changed("name") { updateView.Name = opts.Name } From ae27682507f820ab0d99916cf196ff0b5eb86831 Mon Sep 17 00:00:00 2001 From: Rakshit Yadav Date: Thu, 25 Jun 2026 13:40:36 +0530 Subject: [PATCH 5/5] fix: align registry update with existing non-interactive update pattern Signed-off-by: Rakshit Yadav --- cmd/harbor/root/registry/update.go | 103 ++++++++++++++--------------- 1 file changed, 50 insertions(+), 53 deletions(-) diff --git a/cmd/harbor/root/registry/update.go b/cmd/harbor/root/registry/update.go index f901b63d3..3d5e3dd9c 100644 --- a/cmd/harbor/root/registry/update.go +++ b/cmd/harbor/root/registry/update.go @@ -15,7 +15,6 @@ package registry import ( "fmt" - "strconv" "github.com/goharbor/go-client/pkg/sdk/v2.0/models" "github.com/goharbor/harbor-cli/pkg/api" @@ -38,21 +37,10 @@ func UpdateRegistryCommand() *cobra.Command { var err error var registryId int64 - interactive := !hasUpdateValues(opts) - - if !interactive && len(args) == 0 { - return fmt.Errorf("registry ID is mandatory for non-interactive updates") - } - if len(args) > 0 { - id, err := strconv.ParseInt(args[0], 10, 64) - if err == nil { - registryId = id - } else { - registryId, err = api.GetRegistryIdByName(args[0]) - if err != nil { - return fmt.Errorf("failed to get registry id: %v", err) - } + registryId, err = api.GetRegistryIdByName(args[0]) + if err != nil { + return fmt.Errorf("failed to get registry id: %v", err) } } else { registryId = prompt.GetRegistryNameFromUser() @@ -79,37 +67,12 @@ func UpdateRegistryCommand() *cobra.Command { }, } - flags := cmd.Flags() - if flags.Changed("name") { - updateView.Name = opts.Name - } - if flags.Changed("type") { - updateView.Type = opts.Type - } - if flags.Changed("description") { - updateView.Description = opts.Description - } - if flags.Changed("url") { - formattedUrl := utils.FormatUrl(opts.URL) - if err := utils.ValidateURL(formattedUrl); err != nil { + if hasUpdateFlagChanges(cmd) { + err = applyUpdateFlags(cmd, updateView, opts) + if err != nil { return err } - updateView.URL = formattedUrl - } - if flags.Changed("insecure") { - updateView.Insecure = opts.Insecure - } - if flags.Changed("credential-access-key") { - updateView.Credential.AccessKey = opts.Credential.AccessKey - } - if flags.Changed("credential-access-secret") { - updateView.Credential.AccessSecret = opts.Credential.AccessSecret - } - if flags.Changed("credential-type") { - updateView.Credential.Type = opts.Credential.Type - } - - if interactive { + } else { update.UpdateRegistryView(updateView) } err = api.UpdateRegistry(updateView, registryId) @@ -133,13 +96,47 @@ func UpdateRegistryCommand() *cobra.Command { return cmd } -func hasUpdateValues(opts *models.Registry) bool { - return opts.Name != "" || - opts.Type != "" || - opts.Description != "" || - opts.URL != "" || - opts.Insecure || - opts.Credential.AccessKey != "" || - opts.Credential.AccessSecret != "" || - opts.Credential.Type != "" +func hasUpdateFlagChanges(cmd *cobra.Command) bool { + flags := cmd.Flags() + return flags.Changed("name") || + flags.Changed("type") || + flags.Changed("url") || + flags.Changed("description") || + flags.Changed("insecure") || + flags.Changed("credential-access-key") || + flags.Changed("credential-access-secret") || + flags.Changed("credential-type") +} + +func applyUpdateFlags(cmd *cobra.Command, updateView *models.Registry, opts *models.Registry) error { + flags := cmd.Flags() + if flags.Changed("name") { + updateView.Name = opts.Name + } + if flags.Changed("type") { + updateView.Type = opts.Type + } + if flags.Changed("description") { + updateView.Description = opts.Description + } + if flags.Changed("url") { + formattedUrl := utils.FormatUrl(opts.URL) + if err := utils.ValidateURL(formattedUrl); err != nil { + return err + } + updateView.URL = formattedUrl + } + if flags.Changed("insecure") { + updateView.Insecure = opts.Insecure + } + if flags.Changed("credential-access-key") { + updateView.Credential.AccessKey = opts.Credential.AccessKey + } + if flags.Changed("credential-access-secret") { + updateView.Credential.AccessSecret = opts.Credential.AccessSecret + } + if flags.Changed("credential-type") { + updateView.Credential.Type = opts.Credential.Type + } + return nil } \ No newline at end of file