mirror of
https://github.com/openziti/zrok.git
synced 2025-06-25 20:22:45 +02:00
for when the drive source is a file instead of a directory (#438)
This commit is contained in:
parent
cbb69373f4
commit
103b60c2c2
@ -27,9 +27,18 @@ func NewFilesystemTarget(cfg *FilesystemTargetConfig) *FilesystemTarget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (t *FilesystemTarget) Inventory() ([]*Object, error) {
|
func (t *FilesystemTarget) Inventory() ([]*Object, error) {
|
||||||
if _, err := os.Stat(t.cfg.Root); os.IsNotExist(err) {
|
fi, err := os.Stat(t.cfg.Root)
|
||||||
|
if os.IsNotExist(err) {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if !fi.IsDir() {
|
||||||
|
return []*Object{{Path: t.cfg.Root, Size: fi.Size(), Modified: fi.ModTime()}}, nil
|
||||||
|
}
|
||||||
|
|
||||||
t.tree = nil
|
t.tree = nil
|
||||||
if err := fs.WalkDir(t.root, ".", t.recurse); err != nil {
|
if err := fs.WalkDir(t.root, ".", t.recurse); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -37,6 +46,10 @@ func (t *FilesystemTarget) Inventory() ([]*Object, error) {
|
|||||||
return t.tree, nil
|
return t.tree, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *FilesystemTarget) IsDir() bool {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
func (t *FilesystemTarget) recurse(path string, d fs.DirEntry, err error) error {
|
func (t *FilesystemTarget) recurse(path string, d fs.DirEntry, err error) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -15,6 +15,7 @@ type Object struct {
|
|||||||
|
|
||||||
type Target interface {
|
type Target interface {
|
||||||
Inventory() ([]*Object, error)
|
Inventory() ([]*Object, error)
|
||||||
|
IsDir() bool
|
||||||
ReadStream(path string) (io.ReadCloser, error)
|
ReadStream(path string) (io.ReadCloser, error)
|
||||||
WriteStream(path string, stream io.Reader, mode os.FileMode) error
|
WriteStream(path string, stream io.Reader, mode os.FileMode) error
|
||||||
SetModificationTime(path string, mtime time.Time) error
|
SetModificationTime(path string, mtime time.Time) error
|
||||||
|
@ -33,18 +33,18 @@ func Synchronize(src, dst Target) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, target := range copyList {
|
for _, copyPath := range copyList {
|
||||||
ss, err := src.ReadStream(target.Path)
|
ss, err := src.ReadStream(copyPath.Path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := dst.WriteStream(target.Path, ss, os.ModePerm); err != nil {
|
if err := dst.WriteStream(copyPath.Path, ss, os.ModePerm); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := dst.SetModificationTime(target.Path, target.Modified); err != nil {
|
if err := dst.SetModificationTime(copyPath.Path, copyPath.Modified); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
logrus.Infof("=> %v", target.Path)
|
logrus.Infof("=> %v", copyPath.Path)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -20,7 +20,9 @@ type WebDAVTargetConfig struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type WebDAVTarget struct {
|
type WebDAVTarget struct {
|
||||||
c *webdavClient.Client
|
cfg *WebDAVTargetConfig
|
||||||
|
c *webdavClient.Client
|
||||||
|
isDir bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewWebDAVTarget(cfg *WebDAVTargetConfig) (*WebDAVTarget, error) {
|
func NewWebDAVTarget(cfg *WebDAVTargetConfig) (*WebDAVTarget, error) {
|
||||||
@ -31,10 +33,21 @@ func NewWebDAVTarget(cfg *WebDAVTargetConfig) (*WebDAVTarget, error) {
|
|||||||
if err := c.Connect(); err != nil {
|
if err := c.Connect(); err != nil {
|
||||||
return nil, errors.Wrap(err, "error connecting to webdav target")
|
return nil, errors.Wrap(err, "error connecting to webdav target")
|
||||||
}
|
}
|
||||||
return &WebDAVTarget{c: c}, nil
|
return &WebDAVTarget{cfg: cfg, c: c}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *WebDAVTarget) Inventory() ([]*Object, error) {
|
func (t *WebDAVTarget) Inventory() ([]*Object, error) {
|
||||||
|
fi, err := t.c.Stat("")
|
||||||
|
if !fi.IsDir() {
|
||||||
|
t.isDir = false
|
||||||
|
return []*Object{{
|
||||||
|
Path: fi.Name(),
|
||||||
|
Size: fi.Size(),
|
||||||
|
Modified: fi.ModTime(),
|
||||||
|
}}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
t.isDir = true
|
||||||
tree, err := t.recurse("", nil)
|
tree, err := t.recurse("", nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -42,6 +55,10 @@ func (t *WebDAVTarget) Inventory() ([]*Object, error) {
|
|||||||
return tree, nil
|
return tree, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *WebDAVTarget) IsDir() bool {
|
||||||
|
return t.isDir
|
||||||
|
}
|
||||||
|
|
||||||
func (t *WebDAVTarget) recurse(path string, tree []*Object) ([]*Object, error) {
|
func (t *WebDAVTarget) recurse(path string, tree []*Object) ([]*Object, error) {
|
||||||
files, err := t.c.ReadDir(path)
|
files, err := t.c.ReadDir(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -69,7 +86,10 @@ func (t *WebDAVTarget) recurse(path string, tree []*Object) ([]*Object, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (t *WebDAVTarget) ReadStream(path string) (io.ReadCloser, error) {
|
func (t *WebDAVTarget) ReadStream(path string) (io.ReadCloser, error) {
|
||||||
return t.c.ReadStream(path)
|
if t.isDir {
|
||||||
|
return t.c.ReadStream(path)
|
||||||
|
}
|
||||||
|
return t.c.ReadStream("")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *WebDAVTarget) WriteStream(path string, stream io.Reader, mode os.FileMode) error {
|
func (t *WebDAVTarget) WriteStream(path string, stream io.Reader, mode os.FileMode) error {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user