54 lines
909 B
Go
54 lines
909 B
Go
package mapper
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path"
|
|
"strings"
|
|
)
|
|
|
|
func absolutePath(p string) (string, error) {
|
|
finalPath := p
|
|
if strings.Contains(finalPath, "~") {
|
|
h, err := os.UserHomeDir()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
finalPath = strings.Replace(p, "~", h, 1)
|
|
}
|
|
|
|
splitted := strings.Split(finalPath, "/")
|
|
finalPath = ""
|
|
for _, s := range splitted {
|
|
pathPart := s
|
|
if strings.Contains(s, "$") {
|
|
env := os.Getenv(s)
|
|
if env == "" {
|
|
return "", ErrInvalidEnv
|
|
}
|
|
pathPart = env
|
|
}
|
|
|
|
finalPath += fmt.Sprintf("/%s", pathPart)
|
|
}
|
|
|
|
return path.Clean(finalPath), nil
|
|
}
|
|
|
|
func getPaths(p string, l string) (string, string, error) {
|
|
paths := strings.Split(p, ":")
|
|
|
|
src, err := absolutePath(strings.Replace(paths[0], "$LOCATION", l, 1))
|
|
if err != nil {
|
|
return "", "", err
|
|
}
|
|
|
|
dst, err := absolutePath(paths[1])
|
|
if err != nil {
|
|
return "", "", err
|
|
}
|
|
|
|
return src, dst, nil
|
|
}
|