cmd/config_path.go (40 lines of code) (raw):
package cmd
import (
"context"
"fmt"
"github.com/Azure/grept/pkg"
"github.com/google/uuid"
"github.com/hashicorp/go-getter/v2"
"github.com/spf13/afero"
"os"
"path/filepath"
)
func getConfigFolder(path string, ctx context.Context) (configPath string, onDefer func(), err error) {
exists, err := isReadableLocalPath(path)
if exists && err == nil {
return path, nil, nil
}
absPath, err := filepath.Abs(path)
if err == nil {
exists, err = isReadableLocalPath(absPath)
if exists && err == nil {
return path, nil, nil
}
}
tmp := filepath.Join(os.TempDir(), uuid.NewString())
cleaner := func() {
_ = os.RemoveAll(tmp)
}
result, err := getter.Get(ctx, tmp, path)
if err != nil {
return "", cleaner, err
}
if result == nil {
return "", cleaner, fmt.Errorf("cannot get config path")
}
return result.Dst, cleaner, nil
}
func isReadableLocalPath(path string) (bool, error) {
fs := pkg.FsFactory()
return afero.Exists(fs, path)
}