diff --git a/cmd/saastool/task_make.go b/cmd/saastool/task_make.go index d483350..87487f5 100644 --- a/cmd/saastool/task_make.go +++ b/cmd/saastool/task_make.go @@ -81,7 +81,7 @@ func RunTaskMake(args ...string) error { return nil } - makeTaskParams := makeTaskParams{ + makeTaskParams := &makeTaskParams{ sourcePath: *sourcePath, hashFile: *hashFile, task: &saasapi.Task{ @@ -91,10 +91,10 @@ func RunTaskMake(args ...string) error { DataspaceId: *ds, }, } - return doMakeHash(makeTaskParams) + return doMakeHash(makeTaskParams, true) } -func doMakeHash(makeTaskParams makeTaskParams) error { +func doMakeHash(makeTaskParams *makeTaskParams, firstLevel bool) error { fsInfo, err := os.Stat(makeTaskParams.sourcePath) if err != nil { return err @@ -102,29 +102,36 @@ func doMakeHash(makeTaskParams makeTaskParams) error { if !fsInfo.IsDir() { // 如果是文件,直接计算 - return doTaskMake(makeTaskParams) - } - - // 读取目录下信息 - dirEntry, err := os.ReadDir(makeTaskParams.sourcePath) - if err != nil { - return err - } - - // 遍历目录 - for _, dir := range dirEntry { - newParam := makeTaskParams - newParam.sourcePath = path.Join(makeTaskParams.sourcePath, dir.Name()) - - if err = doMakeHash(newParam); err != nil { + err = doTaskMake(makeTaskParams) + if err != nil { return err } + } else { + // 读取目录下信息 + dirEntry, err := os.ReadDir(makeTaskParams.sourcePath) + if err != nil { + return err + } + + // 遍历目录 + for _, dir := range dirEntry { + oldSourcePath := makeTaskParams.sourcePath + makeTaskParams.sourcePath = path.Join(makeTaskParams.sourcePath, dir.Name()) + + if err = doMakeHash(makeTaskParams, false); err != nil { + return err + } + makeTaskParams.sourcePath = oldSourcePath + } } - return saveTaskFile(makeTaskParams) + if firstLevel { + return saveTaskFile(makeTaskParams) + } + return nil } -func doTaskMake(makeTaskParams makeTaskParams) error { +func doTaskMake(makeTaskParams *makeTaskParams) error { sourceFile, err := os.Open(makeTaskParams.sourcePath) if err != nil { return err @@ -227,7 +234,7 @@ func hashWorker(tasks <-chan *hashTask, results chan<- *hashTask) { } } -func saveTaskFile(makeTaskParams makeTaskParams) error { +func saveTaskFile(makeTaskParams *makeTaskParams) error { taskFile, err := os.Create(makeTaskParams.hashFile) if err != nil { return err