From 9555ffcfda3057628350603694a99b65df6b2a38 Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Thu, 10 Jul 2025 21:16:09 +0530 Subject: [PATCH 1/2] RTECO-235 - Refactoring code --- artifactory/services/props.go | 90 +++++++++++++---------------------- 1 file changed, 33 insertions(+), 57 deletions(-) diff --git a/artifactory/services/props.go b/artifactory/services/props.go index 204b72b0b..b9b71e0da 100644 --- a/artifactory/services/props.go +++ b/artifactory/services/props.go @@ -106,58 +106,49 @@ func (ps *PropsService) getEncodedParam(propsParams PropsParams, isDelete bool) return encodedParam, nil } -func (ps *PropsService) addOrDeletePropertiesForRepo(propsParams PropsParams, isDelete bool, encodedParam string) (int, error) { - var action func(string, string, string) (*http.Response, []byte, error) +func (ps *PropsService) actionTypeBasedOnIsDeleteFlag(isDelete bool, action *func(string, string, string) (*http.Response, []byte, error)) { if isDelete { - action = ps.sendDeleteRequest + *action = ps.sendDeleteRequest } else { - action = ps.sendPutRequest + *action = ps.sendPutRequest } - successCounters := make([]int, ps.GetThreads()) - producerConsumer := parallel.NewBounedRunner(ps.GetThreads(), false) - errorsQueue := clientutils.NewErrorsQueue(1) +} + +func (ps *PropsService) addOrDeletePropertiesForRepo(propsParams PropsParams, isDelete bool, encodedParam string) (int, error) { + // Determine which action to perform (PUT or DELETE). + var action func(string, string, string) (*http.Response, []byte, error) + ps.actionTypeBasedOnIsDeleteFlag(isDelete, &action) + reader := propsParams.GetReader() + defer reader.Reset() resultItem := new(utils.ResultItem) if reader.NextRecord(resultItem) == nil { repoName := resultItem.Repo - setPropsTask := func(threadId int) error { - var err error - logMsgPrefix := clientutils.GetLogMsgPrefix(threadId, ps.IsDryRun()) - - restAPI := path.Join("api", "storage", repoName) - setPropertiesURL, err := clientutils.BuildUrl(ps.GetArtifactoryDetails().GetUrl(), restAPI, make(map[string]string)) - if err != nil { - return err - } - // Because we do set/delete props on search results that took into account the - // recursive flag, we do not want the action itself to be recursive. - setPropertiesURL += "?properties=" + encodedParam + "&recursive=0" - resp, body, err := action(logMsgPrefix, repoName, setPropertiesURL) + logMsgPrefix := clientutils.GetLogMsgPrefix(0, ps.IsDryRun()) - if err != nil { - return err - } - if err = errorutils.CheckResponseStatusWithBody(resp, body, http.StatusNoContent); err != nil { - return err - } - successCounters[threadId]++ - return nil + restAPI := path.Join("api", "storage", repoName) + setPropertiesURL, err := clientutils.BuildUrl(ps.GetArtifactoryDetails().GetUrl(), restAPI, make(map[string]string)) + if err != nil { + return 0, err + } + setPropertiesURL += "?properties=" + encodedParam + "&recursive=0" + + resp, body, err := action(logMsgPrefix, repoName, setPropertiesURL) + if err != nil { + return 0, err + } + if err = errorutils.CheckResponseStatusWithBody(resp, body, http.StatusNoContent); err != nil { + return 0, err } - _, _ = producerConsumer.AddTaskWithError(setPropsTask, errorsQueue.AddError) + return 1, nil } - defer producerConsumer.Done() if err := reader.GetError(); err != nil { - errorsQueue.AddError(err) - } - reader.Reset() - producerConsumer.Run() - totalSuccess := 0 - for _, v := range successCounters { - totalSuccess += v + return 0, err } - return totalSuccess, errorsQueue.GetError() + + return 0, nil } func (ps *PropsService) performRequestForRepoOnly(propsParams PropsParams, isDelete bool) (int, error) { @@ -170,27 +161,12 @@ func (ps *PropsService) performRequestForRepoOnly(propsParams PropsParams, isDel } func (ps *PropsService) performRequest(propsParams PropsParams, isDelete bool) (int, error) { - var encodedParam string - if !isDelete { - props, err := utils.ParseProperties(propsParams.GetProps()) - if err != nil { - return 0, err - } - encodedParam = props.ToEncodedString(true) - } else { - propList := strings.Split(propsParams.GetProps(), ",") - for _, prop := range propList { - encodedParam += url.QueryEscape(prop) + "," - } - // Remove trailing comma - encodedParam = strings.TrimSuffix(encodedParam, ",") + encodedParam, err := ps.getEncodedParam(propsParams, isDelete) + if err != nil { + return 0, err } var action func(string, string, string) (*http.Response, []byte, error) - if isDelete { - action = ps.sendDeleteRequest - } else { - action = ps.sendPutRequest - } + ps.actionTypeBasedOnIsDeleteFlag(isDelete, &action) successCounters := make([]int, ps.GetThreads()) producerConsumer := parallel.NewBounedRunner(ps.GetThreads(), false) errorsQueue := clientutils.NewErrorsQueue(1) From 9e097abe6fcc145ed78925aaa73d04e18c169aab Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Tue, 15 Jul 2025 12:21:34 +0530 Subject: [PATCH 2/2] Updating naming suggestions --- artifactory/services/props.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/artifactory/services/props.go b/artifactory/services/props.go index b9b71e0da..082804933 100644 --- a/artifactory/services/props.go +++ b/artifactory/services/props.go @@ -126,8 +126,8 @@ func (ps *PropsService) addOrDeletePropertiesForRepo(propsParams PropsParams, is repoName := resultItem.Repo logMsgPrefix := clientutils.GetLogMsgPrefix(0, ps.IsDryRun()) - restAPI := path.Join("api", "storage", repoName) - setPropertiesURL, err := clientutils.BuildUrl(ps.GetArtifactoryDetails().GetUrl(), restAPI, make(map[string]string)) + storageAPI := path.Join("api", "storage", repoName) + setPropertiesURL, err := clientutils.BuildUrl(ps.GetArtifactoryDetails().GetUrl(), storageAPI, make(map[string]string)) if err != nil { return 0, err } @@ -178,8 +178,8 @@ func (ps *PropsService) performRequest(propsParams PropsParams, isDelete bool) ( var err error logMsgPrefix := clientutils.GetLogMsgPrefix(threadId, ps.IsDryRun()) - restAPI := path.Join("api", "storage", relativePath) - setPropertiesURL, err := clientutils.BuildUrl(ps.GetArtifactoryDetails().GetUrl(), restAPI, make(map[string]string)) + storageAPI := path.Join("api", "storage", relativePath) + setPropertiesURL, err := clientutils.BuildUrl(ps.GetArtifactoryDetails().GetUrl(), storageAPI, make(map[string]string)) if err != nil { return err }