OSDN Git Service

versoin1.1.9 (#594)
[bytom/vapor.git] / vendor / github.com / tendermint / tmlibs / common / os.go
1 package common
2
3 import (
4         "fmt"
5         "io/ioutil"
6         "os"
7         "os/signal"
8         "syscall"
9 )
10
11 // TrapSignal catches the SIGTERM and executes cb function. After that it exits
12 // with code 1.
13 func TrapSignal(cb func()) {
14         c := make(chan os.Signal, 1)
15         signal.Notify(c, os.Interrupt, syscall.SIGTERM)
16         go func() {
17                 for sig := range c {
18                         fmt.Printf("captured %v, exiting...\n", sig)
19                         if cb != nil {
20                                 cb()
21                         }
22                         os.Exit(1)
23                 }
24         }()
25         select {}
26 }
27
28 func Exit(s string) {
29         fmt.Printf(s + "\n")
30         os.Exit(1)
31 }
32
33 func EnsureDir(dir string, mode os.FileMode) error {
34         if _, err := os.Stat(dir); os.IsNotExist(err) {
35                 err := os.MkdirAll(dir, mode)
36                 if err != nil {
37                         return fmt.Errorf("Could not create directory %v. %v", dir, err)
38                 }
39         }
40         return nil
41 }
42
43 func FileExists(filePath string) bool {
44         _, err := os.Stat(filePath)
45         return !os.IsNotExist(err)
46 }
47
48 func WriteFile(filePath string, contents []byte, mode os.FileMode) error {
49         return ioutil.WriteFile(filePath, contents, mode)
50 }
51
52 func MustWriteFile(filePath string, contents []byte, mode os.FileMode) {
53         err := WriteFile(filePath, contents, mode)
54         if err != nil {
55                 Exit(Fmt("MustWriteFile failed: %v", err))
56         }
57 }