github.com/hwaf/hwaf@v0.0.0-20140814122253-5465f73b20f1/utils.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  	"os"
     7  	"path/filepath"
     8  	//"strconv"
     9  )
    10  
    11  func path_exists(name string) bool {
    12  	_, err := os.Stat(name)
    13  	if err == nil {
    14  		return true
    15  	}
    16  	if os.IsNotExist(err) {
    17  		return false
    18  	}
    19  	return false
    20  }
    21  
    22  func handle_err(err error) {
    23  	if err != nil {
    24  		g_ctx.Errorf("%v\n", err.Error())
    25  		//panic(err.Error())
    26  
    27  		if g_ctx != nil {
    28  			g_ctx.Exit(1)
    29  		}
    30  		os.Exit(1)
    31  	}
    32  }
    33  
    34  func is_git_repo(dirname string) bool {
    35  	return path_exists(filepath.Join(dirname, ".git"))
    36  }
    37  
    38  func copytree(dstdir, srcdir string) error {
    39  	var err error
    40  
    41  	if !path_exists(dstdir) {
    42  		err = os.MkdirAll(dstdir, 0755)
    43  		if err != nil {
    44  			return err
    45  		}
    46  	}
    47  
    48  	err = filepath.Walk(srcdir, func(path string, info os.FileInfo, err error) error {
    49  		rel := ""
    50  		rel, err = filepath.Rel(srcdir, path)
    51  		out := filepath.Join(dstdir, rel)
    52  		fmode := info.Mode()
    53  		if fmode.IsDir() {
    54  			err = os.MkdirAll(out, fmode.Perm())
    55  			if err != nil {
    56  				return err
    57  			}
    58  		} else if fmode.IsRegular() {
    59  			dst, err := os.OpenFile(out, os.O_CREATE|os.O_RDWR, fmode.Perm())
    60  			if err != nil {
    61  				return err
    62  			}
    63  			defer func() { err = dst.Close() }()
    64  			src, err := os.Open(path)
    65  			if err != nil {
    66  				return err
    67  			}
    68  			_, err = io.Copy(dst, src)
    69  			if err != nil {
    70  				return err
    71  			}
    72  		} else if (fmode & os.ModeSymlink) != 0 {
    73  			rlink, err := os.Readlink(path)
    74  			if err != nil {
    75  				return err
    76  			}
    77  			err = os.Symlink(rlink, out)
    78  			if err != nil {
    79  				return err
    80  			}
    81  		} else {
    82  			return fmt.Errorf("unhandled mode (%v) for path [%s]", fmode, path)
    83  		}
    84  		return nil
    85  	})
    86  	return err
    87  }
    88  
    89  // EOF