...

Source file src/github.com/codeskyblue/go-sh/test.go

Documentation: github.com/codeskyblue/go-sh

     1  package sh
     2  
     3  import (
     4  	"os"
     5  	"path/filepath"
     6  )
     7  
     8  func filetest(name string, modemask os.FileMode) (match bool, err error) {
     9  	fi, err := os.Stat(name)
    10  	if err != nil {
    11  		return
    12  	}
    13  	match = (fi.Mode() & modemask) == modemask
    14  	return
    15  }
    16  
    17  func (s *Session) Getwd() string {
    18  	dir := string(s.dir)
    19  	if dir == "" {
    20  		dir, _ = os.Getwd()
    21  	}
    22  	return dir
    23  }
    24  
    25  func (s *Session) abspath(name string) string {
    26  	if filepath.IsAbs(name) {
    27  		return name
    28  	}
    29  	return filepath.Join(s.Getwd(), name)
    30  }
    31  
    32  func init() {
    33  	//log.SetFlags(log.Lshortfile | log.LstdFlags)
    34  }
    35  
    36  // expression can be dir, file, link
    37  func (s *Session) Test(expression string, argument string) bool {
    38  	var err error
    39  	var fi os.FileInfo
    40  	fi, err = os.Lstat(s.abspath(argument))
    41  	switch expression {
    42  	case "d", "dir":
    43  		return err == nil && fi.IsDir()
    44  	case "f", "file":
    45  		return err == nil && fi.Mode().IsRegular()
    46  	case "x", "executable":
    47  		/*
    48  			fmt.Println(expression, argument)
    49  			if err == nil {
    50  				fmt.Println(fi.Mode())
    51  			}
    52  		*/
    53  		return err == nil && fi.Mode()&os.FileMode(0100) != 0
    54  	case "L", "link":
    55  		return err == nil && fi.Mode()&os.ModeSymlink != 0
    56  	}
    57  	return false
    58  }
    59  
    60  // expression can be d,dir, f,file, link
    61  func Test(exp string, arg string) bool {
    62  	s := NewSession()
    63  	return s.Test(exp, arg)
    64  }
    65  

View as plain text