Skip to content

Commit 775b717

Browse files
committed
update.
1 parent 6840d8c commit 775b717

File tree

3 files changed

+36
-19
lines changed

3 files changed

+36
-19
lines changed

go.mod

+2
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,6 @@ require (
3838
github.com/willscott/go-nfs-client v0.0.0-20240104095149-b44639837b00 // indirect
3939
)
4040

41+
// replace github.com/blacknon/go-nfs-sshlib v0.0.3 => ../go-nfs-sshlib
42+
4143
go 1.22.4

nfs_forward.go

+19
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
package sshlib
66

77
import (
8+
"fmt"
89
"net"
10+
"strings"
911

1012
nfs "github.com/blacknon/go-nfs-sshlib"
1113
nfshelper "github.com/blacknon/go-nfs-sshlib/helpers"
@@ -26,6 +28,14 @@ func (c *Connect) NFSForward(address, port, basepoint string) (err error) {
2628
return
2729
}
2830

31+
// create abs path
32+
homepoint, err := client.RealPath(".")
33+
if err != nil {
34+
return
35+
}
36+
basepoint = getRemoteAbsPath(homepoint, basepoint)
37+
fmt.Println(basepoint)
38+
2939
sftpfsPlusChange := NewChangeSFTPFS(client, basepoint)
3040

3141
handler := nfshelper.NewNullAuthHandler(sftpfsPlusChange)
@@ -58,3 +68,12 @@ func (c *Connect) NFSReverseForward(address, port, sharepoint string) (err error
5868

5969
return
6070
}
71+
72+
func getRemoteAbsPath(wdpath, path string) (result string) {
73+
result = strings.Replace(path, "~", wdpath, 1)
74+
if !strings.HasPrefix(result, "/") {
75+
result = wdpath + "/" + result
76+
}
77+
78+
return result
79+
}

nfs_sftpfs.go

+15-19
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
package sshlib
66

77
import (
8+
"fmt"
89
"os"
910
"path/filepath"
1011
"strconv"
@@ -47,30 +48,25 @@ type SFTPFS struct {
4748

4849
// Create
4950
func (fs *SFTPFS) Create(filename string) (billy.File, error) {
50-
_, err := fs.Stat(filename)
51-
if err == nil {
52-
return nil, os.ErrExist
53-
}
54-
55-
dir := filepath.Dir(filename)
56-
err = fs.MkdirAll(dir, os.ModeDir)
57-
if err != nil {
58-
return nil, err
59-
}
60-
61-
f, err := fs.Client.Create(filename)
62-
if err != nil {
63-
return nil, err
64-
}
65-
return &sftpFile{File: f}, nil
51+
return fs.OpenFile(filename, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
6652
}
6753

6854
// OpenFile
6955
func (fs *SFTPFS) OpenFile(filename string, flag int, perm os.FileMode) (billy.File, error) {
70-
// TODO: create dirをする
71-
// https://github.com/src-d/go-billy/blob/master/osfs/os.go#L31-L54
56+
return fs.openFile(filename, flag, perm, fs.createDir)
57+
}
58+
59+
func (fs *SFTPFS) openFile(fn string, flag int, perm os.FileMode, createDir func(string) error) (billy.File, error) {
60+
if flag&os.O_CREATE != 0 {
61+
if createDir == nil {
62+
return nil, fmt.Errorf("createDir func cannot be nil if file needs to be opened in create mode")
63+
}
64+
if err := createDir(fn); err != nil {
65+
return nil, err
66+
}
67+
}
7268

73-
f, err := fs.Client.OpenFile(filename, flag)
69+
f, err := fs.Client.OpenFile(fn, flag)
7470
if err != nil {
7571
return nil, err
7672
}

0 commit comments

Comments
 (0)