修复推送远端时会在本地创建文件夹的问题

This commit is contained in:
余 欣怀 2024-10-09 17:05:26 +08:00
parent 528cbaa735
commit bee321c4e8
2 changed files with 18 additions and 4 deletions

1
.gitignore vendored
View File

@ -7,3 +7,4 @@
*.iml
out
gen
*_test.go

View File

@ -21,17 +21,17 @@ type Rsync struct {
type RsyncOptions struct {
// Verbose increase verbosity
Verbose bool
// Quet suppress non-error messages
// Quiet suppress non-error messages
Quiet bool
// Checksum skip based on checksum, not mod-time & size
Checksum bool
// Archve is archive mode; equals -rlptgoD (no -H,-A,-X)
// Archive is archive mode; equals -rlptgoD (no -H,-A,-X)
Archive bool
// Recurse into directories
Recursive bool
// Relative option to use relative path names
Relative bool
// NoImliedDirs don't send implied dirs with --relative
// NoImpliedDirs don't send implied dirs with --relative
NoImpliedDirs bool
// Update skip files that are newer on the receiver
Update bool
@ -196,7 +196,8 @@ func (r Rsync) StderrPipe() (io.ReadCloser, error) {
// Run start rsync task
func (r Rsync) Run() error {
if !isExist(r.Destination) {
// 目标地址为 远程地址 则不进行文件夹创建
if !isRsyncPath(r.Destination) && !isExist(r.Destination) {
if err := createDir(r.Destination); err != nil {
return err
}
@ -552,3 +553,15 @@ func isExist(p string) bool {
stat, err := os.Stat(p)
return os.IsExist(err) && stat.IsDir()
}
// isRsyncPath 判断一个给定的字符串或路径是否格式是否符合rsync协议的要求
func isRsyncPath(path string) bool {
if strings.HasPrefix(path, "rsync://") {
return true
}
parts := strings.SplitN(path, ":", 2)
if len(parts) == 2 && strings.Contains(parts[0], "@") {
return true
}
return false
}