gt/internal/dirs/dirs.go

75 lines
1.4 KiB
Go
Raw Permalink Normal View History

2024-08-06 02:09:00 -04:00
// Package dirs provides functions to sanitize directory and file names.
package dirs
import (
"os"
"path/filepath"
"strings"
)
2024-08-06 02:09:00 -04:00
const (
sep = string(os.PathSeparator)
space = " "
spacep = "%20"
newline = "\n"
newlinep = "%0A"
)
var (
2024-07-31 03:13:48 -04:00
home = os.Getenv("HOME")
pwd, _ = os.Getwd()
)
2024-08-06 12:31:45 -04:00
// UnExpand returns dir after unexpanding some directory shortcuts
//
// $HOME -> ~
2024-07-27 19:30:28 -04:00
//
// $PWD -> .
2024-07-27 19:30:28 -04:00
//
// workdir -> /
func UnExpand(dir, workdir string) (outdir string) {
if dir != "" {
outdir = cleanDir(dir, pwd)
}
2024-06-19 19:35:40 -04:00
if workdir != "" {
workdir = cleanDir(workdir, pwd)
outdir = strings.Replace(outdir, workdir, "", 1)
} else if home != pwd && pwd != "" {
2024-06-20 01:21:35 -04:00
outdir = strings.Replace(outdir, pwd, ".", 1)
2024-06-19 19:35:40 -04:00
}
outdir = strings.Replace(outdir, home, "~", 1)
2024-08-06 02:09:00 -04:00
outdir = PercentDecode(outdir)
if outdir == "" {
outdir = "/"
}
return
}
2024-08-06 02:09:00 -04:00
func PercentDecode(input string) (output string) {
output = strings.ReplaceAll(input, spacep, space)
output = strings.ReplaceAll(output, newlinep, newline)
return
}
func PercentEncode(input string) (output string) {
output = strings.ReplaceAll(input, space, spacep)
output = strings.ReplaceAll(output, newline, newlinep)
return
2024-07-28 21:07:07 -04:00
}
2024-08-06 12:31:45 -04:00
func cleanDir(dir, pwd string) string {
if strings.HasPrefix(dir, ".") {
2024-08-06 12:31:45 -04:00
return filepath.Clean(dir)
} else if !strings.HasPrefix(dir, sep) {
2024-08-06 12:31:45 -04:00
return filepath.Join(pwd, dir)
}
2024-08-06 12:31:45 -04:00
return dir
}