1
0
Files
Skill/manager/cmd/skillmgr/clean.go

81 lines
1.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package main
import (
"fmt"
"os"
"github.com/spf13/cobra"
"skillmgr/internal/config"
"skillmgr/internal/types"
)
var cleanCmd = &cobra.Command{
Use: "clean",
Short: "清理孤立的安装记录",
Long: `检查并清理不存在的安装记录。
当文件被手动删除但安装记录仍存在时,使用此命令清理。
示例:
# 检查孤立记录(不删除)
skillmgr clean --dry-run
# 清理孤立记录
skillmgr clean`,
RunE: func(cmd *cobra.Command, args []string) error {
dryRun, _ := cmd.Flags().GetBool("dry-run")
cfg, err := config.LoadInstallConfig()
if err != nil {
return err
}
if len(cfg.Installations) == 0 {
fmt.Println("无安装记录")
return nil
}
var orphans []types.InstallRecord
var valid []types.InstallRecord
for _, r := range cfg.Installations {
if _, err := os.Stat(r.InstallPath); os.IsNotExist(err) {
orphans = append(orphans, r)
} else {
valid = append(valid, r)
}
}
if len(orphans) == 0 {
fmt.Println("无孤立记录")
return nil
}
fmt.Printf("发现 %d 个孤立记录:\n", len(orphans))
for _, r := range orphans {
fmt.Printf(" [%s] %s (%s, %s)\n", r.Type, r.Name, r.Platform, r.Scope)
fmt.Printf(" 路径: %s\n", r.InstallPath)
}
if dryRun {
fmt.Println("\n使用 --dry-run未执行清理")
return nil
}
cfg.Installations = valid
if err := config.SaveInstallConfig(cfg); err != nil {
return fmt.Errorf("保存配置失败: %w", err)
}
fmt.Printf("\n已清理 %d 个孤立记录\n", len(orphans))
return nil
},
}
func init() {
cleanCmd.Flags().Bool("dry-run", false, "仅检查,不执行清理")
rootCmd.AddCommand(cleanCmd)
}