file.go 4.1 KB
Newer Older
aaronchen2k2k's avatar
aaronchen2k2k 已提交
1
package fileUtils
2 3

import (
4
	"fmt"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
5
	"github.com/easysoft/zentaoatf/res"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
6
	commonUtils "github.com/easysoft/zentaoatf/src/utils/common"
7 8
	constant "github.com/easysoft/zentaoatf/src/utils/const"
	"github.com/easysoft/zentaoatf/src/utils/vari"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
9
	"io"
10 11
	"io/ioutil"
	"os"
12
	"os/exec"
13
	"path"
14
	"path/filepath"
15 16
	"regexp"
	"strconv"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
17
	"strings"
18 19
)

aaronchen2k2k's avatar
aaronchen2k2k 已提交
20 21
func ReadFile(filePath string) string {
	buf := ReadFileBuf(filePath)
22
	str := string(buf)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
23
	str = commonUtils.RemoveBlankLine(str)
24
	return str
aaronchen2k2k's avatar
aaronchen2k2k 已提交
25 26 27
}

func ReadFileBuf(filePath string) []byte {
28 29
	buf, err := ioutil.ReadFile(filePath)
	if err != nil {
30
		return []byte(err.Error())
31 32 33 34 35 36
	}

	return buf
}

func WriteFile(filePath string, content string) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
37
	dir := filepath.Dir(filePath)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
38
	MkDirIfNeeded(dir)
39

40 41 42 43 44 45 46 47 48 49 50
	var d1 = []byte(content)
	err2 := ioutil.WriteFile(filePath, d1, 0666) //写入文件(字节数组)
	check(err2)
}

func check(e error) {
	if e != nil {
		panic(e)
	}
}

51
func FileExist(path string) bool {
52
	var exist = true
53
	if _, err := os.Stat(path); os.IsNotExist(err) {
54 55 56 57
		exist = false
	}
	return exist
}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
58

aaronchen2k2k's avatar
aaronchen2k2k 已提交
59
func MkDirIfNeeded(dir string) error {
60
	if !FileExist(dir) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
61 62
		err := os.MkdirAll(dir, os.ModePerm)
		return err
63
	}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
64 65

	return nil
66 67
}

68 69 70 71
func IsDir(f string) bool {
	fi, e := os.Stat(f)
	if e != nil {
		return false
aaronchen2k2k's avatar
aaronchen2k2k 已提交
72
	}
73
	return fi.IsDir()
aaronchen2k2k's avatar
aaronchen2k2k 已提交
74 75
}

76
func AbosutePath(pth string) string {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
77
	if !IsAbosutePath(pth) {
78
		pth, _ = filepath.Abs(pth)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
79 80
	}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
81
	pth = AddPathSepIfNeeded(pth)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
82

83
	return pth
aaronchen2k2k's avatar
aaronchen2k2k 已提交
84 85
}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
86 87 88 89 90
func IsAbosutePath(pth string) bool {
	return path.IsAbs(pth) ||
		strings.Index(pth, ":") == 1 // windows
}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
91
func AddPathSepIfNeeded(pth string) string {
92
	sepa := string(os.PathSeparator)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
93

aaronchen2k2k's avatar
aaronchen2k2k 已提交
94 95
	if strings.LastIndex(pth, sepa) < len(pth)-1 {
		pth += sepa
aaronchen2k2k's avatar
aaronchen2k2k 已提交
96
	}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
97
	return pth
aaronchen2k2k's avatar
aaronchen2k2k 已提交
98
}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
99

aaronchen2k2k's avatar
aaronchen2k2k 已提交
100
func GetFilesFromParams(arguments []string) []string {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
101 102
	ret := make([]string, 0)

aaronchen2k2k's avatar
aaronchen2k2k 已提交
103
	for _, arg := range arguments {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
104 105 106 107 108
		if strings.Index(arg, "-") != 0 {
			if arg == "." {
				arg = AbosutePath(".")
			} else if strings.Index(arg, "."+string(os.PathSeparator)) == 0 {
				arg = AbosutePath(".") + arg[2:]
aaronchen2k2k's avatar
aaronchen2k2k 已提交
109
			} else if !IsAbosutePath(arg) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
110 111 112 113
				arg = AbosutePath(".") + arg
			}

			ret = append(ret, arg)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
114 115
		} else {
			break
aaronchen2k2k's avatar
aaronchen2k2k 已提交
116 117 118
		}
	}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
119
	return ret
aaronchen2k2k's avatar
aaronchen2k2k 已提交
120
}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
121 122 123 124 125 126 127 128 129 130 131 132 133 134

func ReadResData(path string) string {
	isRelease := commonUtils.IsRelease()

	var jsonStr string
	if isRelease {
		data, _ := res.Asset(path)
		jsonStr = string(data)
	} else {
		jsonStr = ReadFile(path)
	}

	return jsonStr
}
135

136
func GetZTFDir() string { // where ztf command in
137
	var dir string
138
	arg1 := strings.ToLower(os.Args[0])
139

aaronchen2k2k's avatar
aaronchen2k2k 已提交
140
	name := filepath.Base(arg1)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
141
	if strings.Index(name, "ztf") == 0 && strings.Index(arg1, "go-build") < 0 {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
142
		p, _ := exec.LookPath(os.Args[0])
aaronchen2k2k's avatar
aaronchen2k2k 已提交
143 144 145
		if strings.Index(p, string(os.PathSeparator)) > -1 {
			dir = p[:strings.LastIndex(p, string(os.PathSeparator))]
		}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
146 147
	} else { // debug
		dir, _ = os.Getwd()
148 149
	}

150
	dir, _ = filepath.Abs(dir)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
151
	dir = AddPathSepIfNeeded(dir)
152

aaronchen2k2k's avatar
aaronchen2k2k 已提交
153
	//fmt.Printf("Debug: Launch %s in %s \n", arg1, dir)
154
	return dir
155
}
156 157

func GetLogDir() string {
158
	path := vari.ZTFDir + constant.LogDir
159 160 161 162 163

	dir, _ := ioutil.ReadDir(path)

	regx := `^\d\d\d$`

164
	numb := 0
165 166 167 168 169 170 171 172 173
	for _, fi := range dir {
		if fi.IsDir() {
			name := fi.Name()
			pass, _ := regexp.MatchString(regx, name)

			if pass { // 999
				name = strings.TrimLeft(name, "0")
				nm, _ := strconv.Atoi(name)

174
				if nm >= numb {
175 176 177 178 179 180
					numb = nm
				}
			}
		}
	}

181
	if numb >= 9 {
182 183
		numb = 0

aaronchen2k2k's avatar
aaronchen2k2k 已提交
184 185 186 187 188 189 190 191 192 193
		tempDir := path[:len(path)-1] + "-bak" + string(os.PathSeparator) + path[len(path):]
		childDir := path + "bak" + string(os.PathSeparator) + path[len(path):]

		os.RemoveAll(childDir)
		os.Rename(path, tempDir)

		MkDirIfNeeded(path)

		err := os.Rename(tempDir, childDir)
		_ = err
194 195 196 197
	}

	ret := getLogNumb(numb + 1)

aaronchen2k2k's avatar
aaronchen2k2k 已提交
198
	return AddPathSepIfNeeded(path + ret)
199 200 201 202 203
}

func getLogNumb(numb int) string {
	return fmt.Sprintf("%03s", strconv.Itoa(numb))
}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228

func CopyFile(src, dst string) (int64, error) {
	sourceFileStat, err := os.Stat(src)
	if err != nil {
		return 0, err
	}

	if !sourceFileStat.Mode().IsRegular() {
		return 0, fmt.Errorf("%s is not a regular file", src)
	}

	source, err := os.Open(src)
	if err != nil {
		return 0, err
	}
	defer source.Close()

	destination, err := os.Create(dst)
	if err != nil {
		return 0, err
	}
	defer destination.Close()
	nBytes, err := io.Copy(destination, source)
	return nBytes, err
}