github.com/Yunsang-Jeong/terraforge@v0.0.0-20231003081416-fe4fad2c57e3/internal/utils/utils.go (about)

     1  package utils
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"os"
     7  	"path/filepath"
     8  )
     9  
    10  const MAX_DIR_DEPTH = 100
    11  
    12  func GetSomethingInParents(base string, something string) (string, error) {
    13  	relPath, err := GetSomethingPathInParents(".", something, true)
    14  	if err != nil {
    15  		return "", err
    16  	}
    17  
    18  	data, err := LoadFileAsString(relPath)
    19  	if err != nil {
    20  		return "", err
    21  	}
    22  
    23  	return data, nil
    24  }
    25  
    26  func GetSomethingPathInParents(base string, something string, returnRelPath bool) (string, error) {
    27  	baseAbsPath, err := filepath.Abs(base)
    28  	if err != nil {
    29  		return "", err
    30  	}
    31  
    32  	current := baseAbsPath
    33  	for i := 0; i < MAX_DIR_DEPTH; i++ {
    34  		if FileExists(filepath.Join(current, something)) {
    35  			if returnRelPath {
    36  				rel, err := filepath.Rel(baseAbsPath, current)
    37  				if err != nil {
    38  					return "", err
    39  				}
    40  
    41  				return filepath.Join(rel, something), nil
    42  			}
    43  
    44  			return filepath.Join(current, something), nil
    45  		}
    46  
    47  		if current == "/" {
    48  			return "", errors.New("reached the root directory")
    49  		}
    50  
    51  		current = filepath.Dir(current)
    52  	}
    53  
    54  	return "", errors.New("reached the depth-limit")
    55  }
    56  
    57  func LoadFileAsString(path string) (string, error) {
    58  	fmt.Println(path)
    59  	if !IsFile(path) {
    60  		return "", errors.New("this is not file")
    61  	}
    62  
    63  	contents, err := os.ReadFile(path)
    64  	if err != nil {
    65  		return "", err
    66  	}
    67  
    68  	return string(contents), nil
    69  }
    70  
    71  func FileExists(path string) bool {
    72  	_, err := os.Stat(path)
    73  	return err == nil
    74  }
    75  
    76  func FileNotExists(path string) bool {
    77  	_, err := os.Stat(path)
    78  	return os.IsNotExist(err)
    79  }
    80  
    81  func IsFile(path string) bool {
    82  	fileInfo, err := os.Stat(path)
    83  	return err == nil && !fileInfo.IsDir()
    84  }