From 389002f19509a380bbc97ebd01e39395689b6c79 Mon Sep 17 00:00:00 2001 From: Radtoo <56451+Radtoo@users.noreply.github.com> Date: Sat, 8 Jan 2022 16:40:39 +0100 Subject: [PATCH] Using positional arguments rather than option flag to enable better shell usage --- weed/command/fix.go | 84 ++++++++++++++++++++++----------------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/weed/command/fix.go b/weed/command/fix.go index bff9416a0..d19496a79 100644 --- a/weed/command/fix.go +++ b/weed/command/fix.go @@ -22,14 +22,13 @@ func init() { } var cmdFix = &Command{ - UsageLine: "fix -path=/tmp [-volumeId=234] [-collection=bigData]", - Short: "run weed tool fix to recreate index file(s) if corrupted", - Long: `Fix runs the SeaweedFS fix command on dat files to re-create the index .idx file. + UsageLine: "fix [-volumeId=234] [-collection=bigData] /tmp", + Short: "run weed tool fix on files or whole folders to recreate index file(s) if corrupted", + Long: `Fix runs the SeaweedFS fix command on dat files or whole folders to re-create the index .idx file. `, } var ( - fixVolumePath = cmdFix.Flag.String("path", ".", "path to an individual .dat file or a folder of dat files") fixVolumeCollection = cmdFix.Flag.String("collection", "", "an optional volume collection name, if specified only it will be processed") fixVolumeId = cmdFix.Flag.Int64("volumeId", 0, "an optional volume id, if not 0 (default) only it will be processed") ) @@ -61,51 +60,52 @@ func (scanner *VolumeFileScanner4Fix) VisitNeedle(n *needle.Needle, offset int64 } func runFix(cmd *Command, args []string) bool { - basePath, f := path.Split(util.ResolvePath(*fixVolumePath)) + for _, arg := range args { + basePath, f := path.Split(util.ResolvePath(arg)) - files := []fs.DirEntry{} - if f == "" { - fileInfo, err := os.ReadDir(basePath + f) - if err != nil { - fmt.Println(err) - return false + files := []fs.DirEntry{} + if f == "" { + fileInfo, err := os.ReadDir(basePath) + if err != nil { + fmt.Println(err) + return false + } + files = fileInfo + } else { + fileInfo, err := os.Stat(basePath + f) + if err != nil { + fmt.Println(err) + return false + } + files = []fs.DirEntry{fs.FileInfoToDirEntry(fileInfo)} } - files = fileInfo - } else { - fileInfo, err := os.Stat(basePath + f) - if err != nil { - fmt.Println(err) - return false - } - files = []fs.DirEntry{fs.FileInfoToDirEntry(fileInfo)} - } - for _, file := range files { - if !strings.HasSuffix(file.Name(), ".dat") { - continue - } - if *fixVolumeCollection != "" { - if !strings.HasPrefix(file.Name(), *fixVolumeCollection+"_") { + for _, file := range files { + if !strings.HasSuffix(file.Name(), ".dat") { continue } + if *fixVolumeCollection != "" { + if !strings.HasPrefix(file.Name(), *fixVolumeCollection+"_") { + continue + } + } + baseFileName := file.Name()[:len(file.Name())-4] + collection, volumeIdStr := "", baseFileName + if sepIndex := strings.LastIndex(baseFileName, "_"); sepIndex > 0 { + collection = baseFileName[:sepIndex] + volumeIdStr = baseFileName[sepIndex+1:] + } + volumeId, parseErr := strconv.ParseInt(volumeIdStr, 10, 64) + if parseErr != nil { + fmt.Printf("Failed to parse volume id from %s: %v\n", baseFileName, parseErr) + return false + } + if *fixVolumeId != 0 && *fixVolumeId != volumeId { + continue + } + doFixOneVolume(basePath, baseFileName, collection, volumeId) } - baseFileName := file.Name()[:len(file.Name())-4] - collection, volumeIdStr := "", baseFileName - if sepIndex := strings.LastIndex(baseFileName, "_"); sepIndex > 0 { - collection = baseFileName[:sepIndex] - volumeIdStr = baseFileName[sepIndex+1:] - } - volumeId, parseErr := strconv.ParseInt(volumeIdStr, 10, 64) - if parseErr != nil { - fmt.Printf("Failed to parse volume id from %s: %v\n", baseFileName, parseErr) - return false - } - if *fixVolumeId != 0 && *fixVolumeId != volumeId { - continue - } - doFixOneVolume(basePath, baseFileName, collection, volumeId) } - return true }