-
Notifications
You must be signed in to change notification settings - Fork 0
/
copy.go
62 lines (58 loc) · 1.47 KB
/
copy.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package backup
import (
"errors"
"io/fs"
"os"
"path/filepath"
homedir "github.com/mitchellh/go-homedir"
cp "github.com/otiai10/copy"
"github.com/pspiagicw/goreland"
)
func performCopy(src string, dest string, ignore []string) {
err := cp.Copy(src, dest, cp.Options{
Skip: generateSkipFunc(ignore),
})
if err != nil {
goreland.LogError("Error copying %s: %v", src, err)
}
}
func generateSkipFunc(ignore []string) func(srcinfo fs.FileInfo, src string, dest string) (bool, error) {
return func(srcinfo fs.FileInfo, src string, dest string) (bool, error) {
if srcinfo.IsDir() && filepath.Base(src) == ".git" {
return true, nil
}
for _, pattern := range ignore {
match, err := filepath.Match(pattern, src)
if err != nil {
return false, err
}
if match {
return true, nil
}
}
return false, nil
}
}
func SkipFunc(srcinfo fs.FileInfo, src string, dest string) (bool, error) {
if srcinfo.IsDir() && filepath.Base(src) == ".git" {
return true, nil
}
return false, nil
}
func expandHome(filepath string) string {
path, err := homedir.Expand(filepath)
if err != nil {
goreland.LogFatal("Unable to expand home variable: %v", err)
}
return path
}
func createIfNotExist(folder string) {
if _, err := os.Stat(folder); errors.Is(err, fs.ErrNotExist) {
err := os.MkdirAll(folder, 0755)
if err != nil {
goreland.LogFatal("Error creating directory: %s", folder)
}
} else if err != nil {
goreland.LogFatal("Error stating file: %s", err)
}
}