你使用的Go版本是什么(go version
)?
$ go version
go version go1.15 linux/amd64
这个问题在最新版本的发布中是否重现?
是的
你正在使用什么操作系统和处理器架构(go env
)?
go env
输出
$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/kyle/.cache/go-build"
GOENV="/home/kyle/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/home/kyle/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/kyle/"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build009155035=/tmp/go-build -gno-record-gcc-switches"
你做了什么?
运行了一个简单的 Package 器,围绕x/net/webdav。将Windows迷你重定向器指向它,然后尝试克隆golang/net: git clone https://github.com/golang/net.git
你期望看到什么?
git clone成功。
你看到了什么?
Z:\>git clone https://github.com/golang/net.git
Cloning into 'net'...
//files.kyle-shares.agilicus.cloud@SSL/DavWWWRoot/agent/net/.git: Input/output error
深入研究后,很明显这个问题是由于Windows试图设置属性目录,如./.git
。我在proppatch处理程序中添加了一些日志记录,并发现它执行了这些操作:
2021/01/26 12:16:21 Patching /net {urn:schemas-microsoft-com: Win32CreationTime}
2021/01/26 12:16:21 Patching /net {urn:schemas-microsoft-com: Win32LastAccessTime}
2021/01/26 12:16:21 Patching /net {urn:schemas-microsoft-com: Win32LastModifiedTime}
2021/01/26 12:16:21 Patching /net {urn:schemas-microsoft-com: Win32FileAttributes}
2021/01/26 12:16:21 Fail on patch: open /home/kyle/shared/net: is a directory
4条答案
按热度按时间ie3xauqp1#
我能够在测试中解决这个问题,首先检查文件是否为目录,然后对每个补丁返回禁止。这似乎至少让它继续前进了。我们可能需要考虑一种更抽象的处理方式,但我现在会提交一个补丁,因为我们需要修复这个用例。
wz1wpwve2#
https://golang.org/cl/286992提到了这个问题:
webdav: return forbidden on failed proppatch
a14dhokn3#
最近出现了一个问题 - 请查看 https://forum.rclone.org/t/writeable-readonly-directories/21919/
当您尝试以读/写模式打开目录时,Rclone已经返回了 EPERM(错误权限)。Windows似乎将其视为正常,因为它没有报告错误。然而,它在日志中留下了一个讨厌的错误。
您的补丁看起来也能解决我们的问题。
您是否尝试过将您的WebDAV实现与Windows资源管理器一起使用?
wkyowqbh4#
@ncw 很棒,我很高兴听到它能解决你的问题!
我测试了使用Linux的davfs2和Windows资源管理器(通过Map网络驱动器)。问题只出现在使用Windows资源管理器时。在我的应用补丁到位后,这个问题完全消失了。