Skip to content
This repository was archived by the owner on Aug 3, 2022. It is now read-only.

Commit 865d788

Browse files
authored
feat: prepend homedir
1 parent 1faa1f8 commit 865d788

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

utils/files/cp.go

+38
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,44 @@ func ExpandHomeFolder(path string) (string, error) {
6767
return buffer.String(), nil
6868
}
6969

70+
// PrependHomeFolder ...
71+
func PrependHomeFolder(path string) (string, error) {
72+
if strings.HasPrefix(path, string(os.PathSeparator)) {
73+
return path, nil
74+
}
75+
76+
var buffer bytes.Buffer
77+
usr, err := user.Current()
78+
if err != nil {
79+
return "", err
80+
}
81+
82+
_, err = buffer.WriteString(filepath.Join(usr.HomeDir, filepath.Clean(path)))
83+
if err != nil {
84+
return "", err
85+
}
86+
87+
return buffer.String(), nil
88+
}
89+
90+
// Transformer ...
91+
type Transformer func(path string) (string, error)
92+
93+
// PathTransform ...
94+
func PathTransform(path string, funcs ...Transformer) (string, error) {
95+
p := path
96+
97+
var err error
98+
for _, fn := range funcs {
99+
p, err = fn(path)
100+
if err != nil {
101+
return "", err
102+
}
103+
}
104+
105+
return p, nil
106+
}
107+
70108
func copy(src, dst string) (int64, error) {
71109
sfi, err := os.Stat(src)
72110
if err != nil {

utils/files/cp_test.go

+27
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"io/ioutil"
55
"os"
66
"os/user"
7+
"path/filepath"
78
"strings"
89
"testing"
910

@@ -99,3 +100,29 @@ func TestCopyFileMkdir(t *testing.T) {
99100

100101
assert.Equal(t, "Hello World", string(b))
101102
}
103+
104+
func TestPrependHomeFolder(t *testing.T) {
105+
sr, err := user.Current()
106+
assert.NoError(t, err)
107+
108+
var tests = []struct {
109+
desc string
110+
path string
111+
expected string
112+
expectedErr error
113+
}{
114+
{
115+
path: "csync/.nanorc",
116+
expected: filepath.Join(sr.HomeDir, "csync/.nanorc"),
117+
expectedErr: nil,
118+
},
119+
}
120+
121+
for _, tc := range tests {
122+
t.Run(tc.desc, func(t *testing.T) {
123+
p, err := files.PrependHomeFolder(tc.path)
124+
assert.NoError(t, err)
125+
assert.Equal(t, tc.expected, p)
126+
})
127+
}
128+
}

0 commit comments

Comments
 (0)