From 6436abe9f119de4fac781574f42db03effbcff5c Mon Sep 17 00:00:00 2001 From: Oscar Reimer Date: Tue, 19 Dec 2023 15:12:58 +0100 Subject: [PATCH] Reduce code duplication --- internal/resolution/pm/composer/job.go | 116 +++++++++++-------------- 1 file changed, 49 insertions(+), 67 deletions(-) diff --git a/internal/resolution/pm/composer/job.go b/internal/resolution/pm/composer/job.go index 8f98128f..8710da99 100644 --- a/internal/resolution/pm/composer/job.go +++ b/internal/resolution/pm/composer/job.go @@ -81,9 +81,10 @@ func (j *Job) handleError(cmdErr job.IError) { for _, expression := range expressions { regex := regexp.MustCompile(expression) + matches := regex.FindAllStringSubmatch(cmdErr.Error(), -1) - if regex.MatchString(cmdErr.Error()) { - cmdErr = j.addDocumentation(expression, regex, cmdErr) + if len(matches) > 0 { + cmdErr = j.addDocumentation(expression, regex, matches, cmdErr) j.Errors().Critical(cmdErr) return @@ -93,89 +94,74 @@ func (j *Job) handleError(cmdErr job.IError) { j.Errors().Critical(cmdErr) } -func (j *Job) addDocumentation(expr string, regex *regexp.Regexp, cmdErr job.IError) job.IError { +func (j *Job) addDocumentation(expr string, regex *regexp.Regexp, matches [][]string, cmdErr job.IError) job.IError { + documentation := cmdErr.Documentation() + switch expr { case composerMissingExtension: - cmdErr = j.addComposerMissingRequirementsErrorDocumentation(regex, cmdErr) + documentation = j.addComposerMissingRequirementsErrorDocumentation(cmdErr) case invalidRequirement: - cmdErr = j.addInvalidRequirementErrorDocumentation(regex, cmdErr) + documentation = j.addInvalidRequirementErrorDocumentation(matches) case noNetworkRegex: - cmdErr = j.addNetworkUnreachableErrorDocumentation(cmdErr) + documentation = j.addNetworkUnreachableErrorDocumentation() case invalidVersionErrRegex: - cmdErr = j.addInvalidVersionErrorDocumentation(regex, cmdErr) + documentation = j.addInvalidVersionErrorDocumentation(matches) case dependenciesResolveErrRegex: - cmdErr = j.addDependenciesResolveErrorDocumentation(regex, cmdErr) + documentation = j.addDependenciesResolveErrorDocumentation(matches) } + cmdErr.SetDocumentation(documentation) + return cmdErr } -func (j *Job) addComposerMissingRequirementsErrorDocumentation(regex *regexp.Regexp, cmdErr job.IError) job.IError { - cmdErr.SetDocumentation( - strings.Join( - []string{ - "Failed to build Composer dependency tree.", - "Your runtime environment is missing one or more Composer requirements.", - "Check error message below for more details:\n\n", - cmdErr.Error(), - }, " "), - ) - - return cmdErr +func (j *Job) addComposerMissingRequirementsErrorDocumentation(cmdErr job.IError) string { + return strings.Join( + []string{ + "Failed to build Composer dependency tree.", + "Your runtime environment is missing one or more Composer requirements.", + "Check error message below for more details:\n\n", + cmdErr.Error(), + }, " ") } -func (j *Job) addInvalidRequirementErrorDocumentation(regex *regexp.Regexp, cmdErr job.IError) job.IError { - matches := regex.FindAllStringSubmatch(cmdErr.Error(), 1) +func (j *Job) addInvalidRequirementErrorDocumentation(matches [][]string) string { message := "" if len(matches) > 0 && len(matches[0]) > 1 { message = matches[0][1] } - cmdErr.SetDocumentation( - strings.Join( - []string{ - "Couldn't resolve dependency", - message, - ", please make sure it is spelt correctly:\n", - }, " "), - ) - - return cmdErr + return strings.Join( + []string{ + "Couldn't resolve dependency", + message, + ", please make sure it is spelt correctly:\n", + }, " ") } -func (j *Job) addNetworkUnreachableErrorDocumentation(cmdErr job.IError) job.IError { - cmdErr.SetDocumentation( - strings.Join( - []string{ - "We weren't able to retrieve one or more dependencies.", - "Please check your Internet connection and try again.", - }, " "), - ) - - return cmdErr +func (j *Job) addNetworkUnreachableErrorDocumentation() string { + return strings.Join( + []string{ + "We weren't able to retrieve one or more dependencies.", + "Please check your Internet connection and try again.", + }, " ") } -func (j *Job) addInvalidVersionErrorDocumentation(regex *regexp.Regexp, cmdErr job.IError) job.IError { - matches := regex.FindAllStringSubmatch(cmdErr.Error(), 1) +func (j *Job) addInvalidVersionErrorDocumentation(matches [][]string) string { message := "" if len(matches) > 0 && len(matches[0]) > 1 { message = matches[0][1] } - cmdErr.SetDocumentation( - strings.Join( - []string{ - "Couldn't resolve version", - message, - ", please make sure it exists:\n", - }, " "), - ) - - return cmdErr + return strings.Join( + []string{ + "Couldn't resolve version", + message, + ", please make sure it exists:\n", + }, " ") } -func (j *Job) addDependenciesResolveErrorDocumentation(regex *regexp.Regexp, cmdErr job.IError) job.IError { - matches := regex.FindAllStringSubmatch(cmdErr.Error(), 1) +func (j *Job) addDependenciesResolveErrorDocumentation(matches [][]string) string { message := "An error occurred during dependencies resolve " if len(matches) > 0 && len(matches[0]) > 1 { message += strings.Join( @@ -186,15 +172,11 @@ func (j *Job) addDependenciesResolveErrorDocumentation(regex *regexp.Regexp, cmd }, "") } - cmdErr.SetDocumentation( - strings.Join( - []string{ - message, - "\n\n", - util.InstallPrivateDependencyMessage, - "\n\n", - }, ""), - ) - - return cmdErr + return strings.Join( + []string{ + message, + "\n\n", + util.InstallPrivateDependencyMessage, + "\n\n", + }, "") }