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