mirror of
https://github.com/akyaiy/GoSally-mvp.git
synced 2026-01-03 20:12:25 +00:00
- Change package name general_server to gateway - Changing the structure of directories and packages - Adding vendor to the project
123 lines
2.2 KiB
Go
123 lines
2.2 KiB
Go
package utils
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"reflect"
|
|
"strings"
|
|
)
|
|
|
|
func SetEviron(eviron []string, envs ...string) []string {
|
|
envMap := make(map[string]string)
|
|
for _, e := range eviron {
|
|
parts := strings.SplitN(e, "=", 2)
|
|
if len(parts) == 2 {
|
|
envMap[parts[0]] = parts[1]
|
|
}
|
|
}
|
|
for _, e := range envs {
|
|
parts := strings.SplitN(e, "=", 2)
|
|
if len(parts) == 2 {
|
|
envMap[parts[0]] = parts[1]
|
|
}
|
|
}
|
|
newEviron := make([]string, 0, len(envMap))
|
|
for k, v := range envMap {
|
|
newEviron = append(newEviron, fmt.Sprintf("%s=%s", k, v))
|
|
}
|
|
|
|
return newEviron
|
|
}
|
|
func CleanTempRuntimes(pattern string) error {
|
|
matches, err := filepath.Glob(pattern)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, path := range matches {
|
|
info, err := os.Stat(path)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
if info.IsDir() {
|
|
os.RemoveAll(path)
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func ExistsMatchingDirs(pattern, exclude string) (bool, error) {
|
|
matches, err := filepath.Glob(pattern)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
|
|
for _, path := range matches {
|
|
if filepath.Clean(path) == filepath.Clean(exclude) {
|
|
continue
|
|
}
|
|
info, err := os.Stat(path)
|
|
if err == nil && info.IsDir() {
|
|
return true, nil
|
|
}
|
|
}
|
|
return false, nil
|
|
}
|
|
|
|
func IndexPaths(runDir string) (map[string]string, error) {
|
|
indexed := make(map[string]string)
|
|
|
|
err := filepath.Walk(runDir, func(path string, info os.FileInfo, err error) error {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if info.IsDir() {
|
|
return nil
|
|
}
|
|
|
|
relPath, err := filepath.Rel(runDir, path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
indexed[relPath] = path
|
|
return nil
|
|
})
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return indexed, nil
|
|
}
|
|
|
|
func IsFullyInitialized(i any) bool {
|
|
v := reflect.ValueOf(i).Elem()
|
|
|
|
for i := 0; i < v.NumField(); i++ {
|
|
field := v.Field(i)
|
|
|
|
switch field.Kind() {
|
|
case reflect.Ptr, reflect.Slice, reflect.Map, reflect.Chan, reflect.Func:
|
|
if field.IsNil() {
|
|
return false
|
|
}
|
|
case reflect.String:
|
|
if field.String() == "" {
|
|
return false
|
|
}
|
|
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
|
if field.Int() == 0 {
|
|
return false
|
|
}
|
|
case reflect.Bool:
|
|
if !field.Bool() {
|
|
return false
|
|
}
|
|
}
|
|
}
|
|
return true
|
|
}
|