完成一个简易的全局skill、command管理器
This commit is contained in:
70
manager/cmd/skillmgr/sync.go
Normal file
70
manager/cmd/skillmgr/sync.go
Normal file
@@ -0,0 +1,70 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
|
||||
"skillmgr/internal/config"
|
||||
"skillmgr/internal/repo"
|
||||
)
|
||||
|
||||
var syncCmd = &cobra.Command{
|
||||
Use: "sync [name]",
|
||||
Short: "同步源仓库",
|
||||
Long: `从远程拉取最新代码,更新本地缓存。
|
||||
|
||||
示例:
|
||||
skillmgr sync # 同步所有仓库
|
||||
skillmgr sync my-skills # 同步指定仓库`,
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
cfg, err := config.LoadRepositoryConfig()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if len(cfg.Repositories) == 0 {
|
||||
fmt.Println("无已配置的源仓库")
|
||||
return nil
|
||||
}
|
||||
|
||||
// 如果指定了仓库名称,只同步该仓库
|
||||
if len(args) > 0 {
|
||||
name := args[0]
|
||||
for _, r := range cfg.Repositories {
|
||||
if r.Name == name {
|
||||
fmt.Printf("正在同步 %s...\n", r.Name)
|
||||
if _, err := repo.CloneOrPull(r.URL, r.Branch); err != nil {
|
||||
fmt.Printf(" ✗ 同步失败: %v\n", err)
|
||||
return err
|
||||
}
|
||||
fmt.Printf(" ✓ 同步成功\n")
|
||||
return nil
|
||||
}
|
||||
}
|
||||
return fmt.Errorf("仓库 '%s' 不存在", name)
|
||||
}
|
||||
|
||||
// 同步所有仓库
|
||||
var hasError bool
|
||||
for _, r := range cfg.Repositories {
|
||||
fmt.Printf("正在同步 %s...\n", r.Name)
|
||||
if _, err := repo.CloneOrPull(r.URL, r.Branch); err != nil {
|
||||
fmt.Printf(" ✗ 同步失败: %v\n", err)
|
||||
hasError = true
|
||||
continue
|
||||
}
|
||||
fmt.Printf(" ✓ 同步成功\n")
|
||||
}
|
||||
|
||||
if hasError {
|
||||
fmt.Println("\n部分仓库同步失败")
|
||||
}
|
||||
|
||||
return nil
|
||||
},
|
||||
}
|
||||
|
||||
func init() {
|
||||
rootCmd.AddCommand(syncCmd)
|
||||
}
|
||||
Reference in New Issue
Block a user