package pkg import ( "fmt" "strconv" "strings" "github.com/spf13/cobra" cliapi "gitlink.org.cn/cloudream/jcs-pub/client/sdk/api/v1" jcstypes "gitlink.org.cn/cloudream/jcs-pub/common/types" "gitlink.org.cn/cloudream/jcs-pub/jcsctl/cmd" ) func init() { var opt pinOpt cd := cobra.Command{ Use: "pin /", Args: cobra.ExactArgs(1), RunE: func(c *cobra.Command, args []string) error { ctx := cmd.GetCmdCtx(c) return pin(c, ctx, opt, args, true) }, } cd.Flags().BoolVar(&opt.UseID, "id", false, "treat first argument as package ID") PackageCmd.AddCommand(&cd) var unpinOpt pinOpt cd = cobra.Command{ Use: "unpin /", Args: cobra.ExactArgs(1), RunE: func(c *cobra.Command, args []string) error { ctx := cmd.GetCmdCtx(c) return pin(c, ctx, unpinOpt, args, false) }, } cd.Flags().BoolVar(&unpinOpt.UseID, "id", false, "treat first argument as package ID") PackageCmd.AddCommand(&cd) } type pinOpt struct { UseID bool } func pin(c *cobra.Command, ctx *cmd.CommandContext, opt pinOpt, args []string, pin bool) error { var pkgID jcstypes.PackageID if opt.UseID { id, err := strconv.ParseInt(args[0], 10, 64) if err != nil { return fmt.Errorf("invalid package ID: %v", args[0]) } pkgID = jcstypes.PackageID(id) } else { comps := strings.Split(args[0], "/") if len(comps) != 2 { return fmt.Errorf("invalid package name: %v", args[0]) } getPkg, err := ctx.Client.Package().GetByFullName(cliapi.PackageGetByFullName{ BucketName: comps[0], PackageName: comps[1], }) if err != nil { return fmt.Errorf("get package by name %v: %v", args[0], err) } pkgID = getPkg.Package.PackageID } if _, err := ctx.Client.Package().Pin(cliapi.PackagePin{ PackageID: pkgID, Pin: false, }); err != nil { return fmt.Errorf("unpin package %v: %v", pkgID, err) } return nil }