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

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 *.iml
out out
gen gen
*_test.go

View File

@ -21,17 +21,17 @@ type Rsync struct {
type RsyncOptions struct { type RsyncOptions struct {
// Verbose increase verbosity // Verbose increase verbosity
Verbose bool Verbose bool
// Quet suppress non-error messages // Quiet suppress non-error messages
Quiet bool Quiet bool
// Checksum skip based on checksum, not mod-time & size // Checksum skip based on checksum, not mod-time & size
Checksum bool Checksum bool
// Archve is archive mode; equals -rlptgoD (no -H,-A,-X) // Archive is archive mode; equals -rlptgoD (no -H,-A,-X)
Archive bool Archive bool
// Recurse into directories // Recurse into directories
Recursive bool Recursive bool
// Relative option to use relative path names // Relative option to use relative path names
Relative bool Relative bool
// NoImliedDirs don't send implied dirs with --relative // NoImpliedDirs don't send implied dirs with --relative
NoImpliedDirs bool NoImpliedDirs bool
// Update skip files that are newer on the receiver // Update skip files that are newer on the receiver
Update bool Update bool
@ -196,7 +196,8 @@ func (r Rsync) StderrPipe() (io.ReadCloser, error) {
// Run start rsync task // Run start rsync task
func (r Rsync) Run() error { func (r Rsync) Run() error {
if !isExist(r.Destination) { // 目标地址为 远程地址 则不进行文件夹创建
if !isRsyncPath(r.Destination) && !isExist(r.Destination) {
if err := createDir(r.Destination); err != nil { if err := createDir(r.Destination); err != nil {
return err return err
} }
@ -552,3 +553,15 @@ func isExist(p string) bool {
stat, err := os.Stat(p) stat, err := os.Stat(p)
return os.IsExist(err) && stat.IsDir() 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
}