Files
kustomize/cmd/gorepomod/internal/utils/utils.go
Kurnianto Trilaksono ab519fdc13 Feature/dependency pinning and update automation (#5451)
* * handle local flag
* add managerfactory handling for local flag
* add shortName handling for local flag
* add dot git file handling for local flag
* add tests

* fix normal listing

* add ParseGitRepository function, add viper, add testing for utils

* add latest tag logic, add auto pinning and auto fetching

* makke gorepomod list works with --local

* make pinning works with local flag, enable auto update on fork and non-fork repo

* fix: refactor to pass linter

* refactor code and fix comments

* edit README

* refactor code to pass linting

* refactor code

* refactor code and enable patch branch label

* ru add license

* fbackward compatibility for unpin
2024-01-16 22:34:56 +01:00

85 lines
1.9 KiB
Go

// Copyright 2022 The Kubernetes Authors.
// SPDX-License-Identifier: Apache-2.0
package utils
import (
"fmt"
"log"
"os"
"regexp"
"strings"
)
func DirExists(name string) bool {
info, err := os.Stat(name)
if os.IsNotExist(err) {
return false
}
return info.IsDir()
}
func SliceToSet(slice []string) map[string]bool {
result := make(map[string]bool)
for _, x := range slice {
if _, ok := result[x]; ok {
log.Fatalf("programmer error - repeated value: %s", x)
} else {
result[x] = true
}
}
return result
}
func ExtractModule(m string) string {
k := strings.Index(m, " => ")
if k < 0 {
return m
}
return m[:k]
}
func SliceContains(slice []string, target string) bool {
for _, x := range slice {
if x == target {
return true
}
}
return false
}
// Receive git remote url as input and produce string containing git repository name
// e.g. kustomize, myrepo/kustomize
func ParseGitRepositoryPath(urlString string) string {
var d []string = getURLStringArray(urlString)
protocol := d[0]
var repoPath string
// TODO(antoooks): Confirm if we should handle other formats not commonly supported by Github
switch protocol {
// ssh protocol, e.g. git@github.com:path/repo.git
case "git":
repoPath = strings.Join(d[2:len(d)-1], "/") + "/" + d[3][:len(d[3])-4]
// https protocol, e.g. https://github.com/path/repo.git
case "https":
repoPath = strings.Join(d[2:], "/")
repoPath = repoPath[:len(repoPath)-4]
// unsupported format
default:
_ = fmt.Errorf("protocol format is not supported: %s", protocol)
return ""
}
return d[1] + "/" + repoPath
}
// Extract array of string from urlString
func getURLStringArray(urlString string) []string {
// Supported git regex based on URI allowed regex as defined under RFC3986
const rfc3986 = `[A-Za-z0-9][A-Za-z0-9+.-]*`
re := regexp.MustCompile(rfc3986)
var u []string = re.FindAllString(urlString, -1)
return u
}