|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- package cmdline
-
- /*
- import (
- "fmt"
- "os"
- "path/filepath"
- "strings"
- "time"
-
- "github.com/inhies/go-bytesize"
- "github.com/spf13/cobra"
- "gitlink.org.cn/cloudream/common/consts/errorcode"
- "gitlink.org.cn/cloudream/common/pkgs/mq"
- cdssdk "gitlink.org.cn/cloudream/storage2/client/types"
- )
-
- func init() {
- var stgID int64
- cmd := &cobra.Command{
- Use: "put [local] [remote]",
- Short: "Upload files to CDS",
- Args: func(cmd *cobra.Command, args []string) error {
- if err := cobra.ExactArgs(2)(cmd, args); err != nil {
- return err
- }
-
- remote := args[1]
- comps := strings.Split(strings.Trim(remote, cdssdk.ObjectPathSeparator), cdssdk.ObjectPathSeparator)
- if len(comps) != 2 {
- return fmt.Errorf("invalid remote path: %s, which must be in format of <bucket>/<package>", remote)
- }
-
- return nil
- },
- Run: func(cmd *cobra.Command, args []string) {
- cmdCtx := GetCmdCtx(cmd)
-
- local := args[0]
- remote := args[1]
- comps := strings.Split(strings.Trim(remote, cdssdk.ObjectPathSeparator), cdssdk.ObjectPathSeparator)
-
- startTime := time.Now()
-
- bkt, err := cmdCtx.Cmdline.Svc.BucketSvc().GetBucketByName(comps[0])
- if err != nil {
- fmt.Printf("getting bucket: %v\n", err)
- return
- }
-
- pkg, err := cmdCtx.Cmdline.Svc.PackageSvc().GetByFullName(comps[0], comps[1])
- if err != nil {
- if codeMsg, ok := err.(*mq.CodeMessageError); ok && codeMsg.Code == errorcode.DataNotFound {
- pkg2, err := cmdCtx.Cmdline.Svc.PackageSvc().Create(bkt.BucketID, comps[1])
- if err != nil {
- fmt.Printf("creating package: %v\n", err)
- return
- }
- pkg = &pkg2
-
- } else {
- fmt.Printf("getting package: %v\n", err)
- return
- }
- }
- var spaceAff cdssdk.UserSpaceID
- if stgID != 0 {
- spaceAff = cdssdk.UserSpaceID(stgID)
- }
-
- up, err := cmdCtx.Cmdline.Svc.Uploader.BeginUpdate(pkg.PackageID, spaceAff, nil, nil)
- if err != nil {
- fmt.Printf("begin updating package: %v\n", err)
- return
- }
- defer up.Abort()
-
- var fileCount int
- var totalSize int64
- err = filepath.WalkDir(local, func(fname string, fi os.DirEntry, err error) error {
- if err != nil {
- return nil
- }
-
- if fi.IsDir() {
- return nil
- }
-
- fileCount++
-
- info, err := fi.Info()
- if err != nil {
- return err
- }
- totalSize += info.Size()
-
- file, err := os.Open(fname)
- if err != nil {
- return err
- }
- defer file.Close()
-
- return up.Upload(fname, file)
- })
- if err != nil {
- fmt.Println(err.Error())
- return
- }
-
- _, err = up.Commit()
- if err != nil {
- fmt.Printf("committing package: %v\n", err)
- return
- }
-
- fmt.Printf("Put %v files (%v) to %s in %v.\n", fileCount, bytesize.ByteSize(totalSize), remote, time.Since(startTime))
- },
- }
- cmd.Flags().Int64VarP(&stgID, "storage", "s", 0, "storage affinity")
-
- RootCmd.AddCommand(cmd)
- }
- */
|