mirror of
https://git.vectorsigma.ru/public/atlantis.git
synced 2026-07-29 22:37:59 +00:00
92 lines
2.1 KiB
Go
92 lines
2.1 KiB
Go
package common
|
|
|
|
import (
|
|
"os"
|
|
"os/exec"
|
|
"strings"
|
|
)
|
|
|
|
// Looks for any argument in commandArgs that has been overridden by an entry in extra args and replaces them
|
|
// any extraArgs that are not used as overrides are added yo the end of the final string slice
|
|
func DeDuplicateExtraArgs(commandArgs []string, extraArgs []string) []string {
|
|
// work if any of the core args have been overridden
|
|
finalArgs := []string{}
|
|
usedExtraArgs := []string{}
|
|
for _, arg := range commandArgs {
|
|
override := ""
|
|
prefix := arg
|
|
argSplit := strings.Split(arg, "=")
|
|
if len(argSplit) == 2 {
|
|
prefix = argSplit[0]
|
|
}
|
|
for _, extraArgOrig := range extraArgs {
|
|
extraArg := extraArgOrig
|
|
if strings.HasPrefix(extraArg, prefix) {
|
|
override = extraArgOrig
|
|
break
|
|
}
|
|
if strings.HasPrefix(extraArg, "--") {
|
|
extraArg = extraArgOrig[1:]
|
|
if strings.HasPrefix(extraArg, prefix) {
|
|
override = extraArgOrig
|
|
break
|
|
}
|
|
}
|
|
if strings.HasPrefix(prefix, "--") {
|
|
prefixWithoutDash := prefix[1:]
|
|
if strings.HasPrefix(extraArg, prefixWithoutDash) {
|
|
override = extraArgOrig
|
|
break
|
|
}
|
|
}
|
|
|
|
}
|
|
if override != "" {
|
|
finalArgs = append(finalArgs, override)
|
|
usedExtraArgs = append(usedExtraArgs, override)
|
|
} else {
|
|
finalArgs = append(finalArgs, arg)
|
|
}
|
|
}
|
|
// add any extra args that are not overrides
|
|
for _, extraArg := range extraArgs {
|
|
if !stringInSlice(usedExtraArgs, extraArg) {
|
|
finalArgs = append(finalArgs, extraArg)
|
|
}
|
|
}
|
|
return finalArgs
|
|
}
|
|
|
|
// returns true if a file at the passed path exists
|
|
func FileExists(path string) bool {
|
|
if _, err := os.Stat(path); err != nil {
|
|
if os.IsNotExist(err) {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
// returns true if the given file is tracked by git
|
|
func IsFileTracked(cloneDir string, filename string) (bool, error) {
|
|
cmd := exec.Command("git", "ls-files", filename)
|
|
cmd.Dir = cloneDir
|
|
|
|
output, err := cmd.CombinedOutput()
|
|
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
return len(output) > 0, nil
|
|
|
|
}
|
|
|
|
func stringInSlice(stringSlice []string, target string) bool {
|
|
for _, value := range stringSlice {
|
|
if value == target {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|