@@ -318,7 +318,7 @@ func (d *DryccCmd) volumesClientGetAll(client *drycc.Client, appID, volumeID, vo
318318 return nil
319319}
320320
321- func (d * DryccCmd ) volumesClientPostAll (client * drycc.Client , appID , volumeID , volumePath string , localPath string ) error {
321+ func (d * DryccCmd ) volumesClientPostAll (client * drycc.Client , appID , volumeID , volumePath , localPath string ) error {
322322 if file , err := os .Stat (localPath ); err != nil {
323323 return err
324324 } else if ! file .IsDir () {
@@ -374,7 +374,10 @@ func (d *DryccCmd) volumesClientCp(appID, src, dst string) error {
374374 if err != nil {
375375 return err
376376 }
377- return d .volumesClientGetAll (s .Client , appID , volumeID , volumePath , mergeDestDir (dst , src ))
377+ if dirs , _ , err := volumes .ListDir (s .Client , appID , volumeID , volumePath , 3000 ); err == nil && (len (dirs ) != 1 || dirs [0 ].Type != "file" ) {
378+ dst = mergeDestDir (dst , volumePath )
379+ }
380+ return d .volumesClientGetAll (s .Client , appID , volumeID , volumePath , dst )
378381 } else if strings .HasPrefix (dst , "vol://" ) {
379382 volumeID , volumePath , err := parseVol (dst )
380383 if err != nil {
@@ -387,7 +390,10 @@ func (d *DryccCmd) volumesClientCp(appID, src, dst string) error {
387390 } else if strings .Contains (fmt .Sprint (err ), "no such file or directory" ) {
388391 return err
389392 }
390- return d .volumesClientPostAll (s .Client , appID , volumeID , mergeDestDir (volumePath , src ), src )
393+ if file , err := os .Stat (src ); err == nil && file .IsDir () {
394+ volumePath = mergeDestDir (volumePath , src )
395+ }
396+ return d .volumesClientPostAll (s .Client , appID , volumeID , volumePath , src )
391397 }
392398 return nil
393399}
0 commit comments