符号链接支持,可以通过mklink(Windows)或者ln -s (Linux)将其他路径下的文件夹链接到根目录下而无需将文件复制到根目录下.针对删除场景特殊处理,删除整个符号链接目录不会删除链接目录内文件,仅删除链接,在符号链接目录操作同普通目录
This commit is contained in:
@ -412,23 +412,35 @@ func (this *MatterDao) SizeByPuuidAndUserUuid(matterUuid string, userUuid string
|
||||
}
|
||||
|
||||
//delete a file from db and disk.
|
||||
func (this *MatterDao) Delete(matter *Matter) {
|
||||
func (this *MatterDao) Delete(matter *Matter, symbolLinkDir bool, symbolLevel int) {
|
||||
|
||||
// recursive if dir
|
||||
if matter.Dir {
|
||||
stat, _ := os.Lstat(matter.AbsolutePath())
|
||||
if stat.Mode()&os.ModeSymlink > 0 {
|
||||
symbolLinkDir = true
|
||||
}
|
||||
if symbolLinkDir {
|
||||
symbolLevel++
|
||||
}
|
||||
matters := this.FindByPuuidAndUserUuid(matter.Uuid, matter.UserUuid, nil)
|
||||
|
||||
for _, f := range matters {
|
||||
this.Delete(f)
|
||||
this.Delete(f, symbolLinkDir, symbolLevel)
|
||||
}
|
||||
|
||||
//delete from db.
|
||||
db := core.CONTEXT.GetDB().Delete(&matter)
|
||||
this.PanicError(db.Error)
|
||||
|
||||
//delete dir from disk.
|
||||
util.DeleteEmptyDir(matter.AbsolutePath())
|
||||
|
||||
if symbolLinkDir {
|
||||
if symbolLevel == 0 {
|
||||
os.Remove(matter.AbsolutePath())
|
||||
}
|
||||
} else {
|
||||
//delete dir from disk.
|
||||
util.DeleteEmptyDir(matter.AbsolutePath())
|
||||
}
|
||||
} else {
|
||||
|
||||
//delete from db.
|
||||
@ -442,11 +454,12 @@ func (this *MatterDao) Delete(matter *Matter) {
|
||||
this.bridgeDao.DeleteByMatterUuid(matter.Uuid)
|
||||
|
||||
//delete from disk.
|
||||
err := os.Remove(matter.AbsolutePath())
|
||||
if err != nil {
|
||||
this.logger.Error("occur error when deleting file. %v", err)
|
||||
if !symbolLinkDir {
|
||||
err := os.Remove(matter.AbsolutePath())
|
||||
if err != nil {
|
||||
this.logger.Error("occur error when deleting file. %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -250,7 +250,7 @@ func (this *MatterService) Delete(request *http.Request, matter *Matter, user *U
|
||||
panic(result.BadRequest("matter cannot be nil"))
|
||||
}
|
||||
|
||||
this.matterDao.Delete(matter)
|
||||
this.matterDao.Delete(matter, false, -1)
|
||||
|
||||
//re compute the size of Route.
|
||||
this.ComputeRouteSize(matter.Puuid, user)
|
||||
@ -987,7 +987,7 @@ func (this *MatterService) mirror(request *http.Request, srcPath string, destDir
|
||||
|
||||
this.logger.Info("mirror srcPath = %s destPath = %s", srcPath, destDirMatter.Path)
|
||||
|
||||
if fileStat.IsDir() {
|
||||
if fileStat.IsDir() || (fileStat.Mode()&os.ModeSymlink > 0) {
|
||||
|
||||
//判断当前文件夹下,文件是否已经存在了。
|
||||
srcDirMatter := this.matterDao.FindByUserUuidAndPuuidAndDirAndName(user.Uuid, destDirMatter.Uuid, TRUE, fileStat.Name())
|
||||
@ -1231,7 +1231,7 @@ func (this *MatterService) ScanPhysics(request *http.Request, user *User) {
|
||||
}
|
||||
|
||||
func (this *MatterService) scanPhysicsFolder(request *http.Request, dirInfo os.FileInfo, dirMatter *Matter, user *User) {
|
||||
if !dirInfo.IsDir() {
|
||||
if !dirInfo.IsDir() && !(dirInfo.Mode()&os.ModeSymlink > 0) {
|
||||
return
|
||||
}
|
||||
|
||||
@ -1277,7 +1277,7 @@ func (this *MatterService) scanPhysicsFolder(request *http.Request, dirInfo os.F
|
||||
|
||||
} else {
|
||||
|
||||
if fileInfo.IsDir() {
|
||||
if fileInfo.IsDir() || (fileInfo.Mode()&os.ModeSymlink > 0) {
|
||||
|
||||
//create folder.
|
||||
matter = this.createDirectory(request, dirMatter, name, user)
|
||||
|
Reference in New Issue
Block a user