mirror of
https://github.com/dokku/dokku.git
synced 2025-12-16 03:57:43 +01:00
65 lines
1.2 KiB
Go
65 lines
1.2 KiB
Go
package sh
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
func filetest(name string, modemask os.FileMode) (match bool, err error) {
|
|
fi, err := os.Stat(name)
|
|
if err != nil {
|
|
return
|
|
}
|
|
match = (fi.Mode() & modemask) == modemask
|
|
return
|
|
}
|
|
|
|
func (s *Session) pwd() string {
|
|
dir := string(s.dir)
|
|
if dir == "" {
|
|
dir, _ = os.Getwd()
|
|
}
|
|
return dir
|
|
}
|
|
|
|
func (s *Session) abspath(name string) string {
|
|
if filepath.IsAbs(name) {
|
|
return name
|
|
}
|
|
return filepath.Join(s.pwd(), name)
|
|
}
|
|
|
|
func init() {
|
|
//log.SetFlags(log.Lshortfile | log.LstdFlags)
|
|
}
|
|
|
|
// expression can be dir, file, link
|
|
func (s *Session) Test(expression string, argument string) bool {
|
|
var err error
|
|
var fi os.FileInfo
|
|
fi, err = os.Lstat(s.abspath(argument))
|
|
switch expression {
|
|
case "d", "dir":
|
|
return err == nil && fi.IsDir()
|
|
case "f", "file":
|
|
return err == nil && fi.Mode().IsRegular()
|
|
case "x", "executable":
|
|
/*
|
|
fmt.Println(expression, argument)
|
|
if err == nil {
|
|
fmt.Println(fi.Mode())
|
|
}
|
|
*/
|
|
return err == nil && fi.Mode()&os.FileMode(0100) != 0
|
|
case "L", "link":
|
|
return err == nil && fi.Mode()&os.ModeSymlink != 0
|
|
}
|
|
return false
|
|
}
|
|
|
|
// expression can be d,dir, f,file, link
|
|
func Test(exp string, arg string) bool {
|
|
s := NewSession()
|
|
return s.Test(exp, arg)
|
|
}
|