71 lines
1.5 KiB
Go
71 lines
1.5 KiB
Go
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)
|
|
}
|