MCPcopy
hub / github.com/rclone/rclone / mkdir

Method mkdir

backend/mega/mega.go:381–422  ·  view source on GitHub ↗

mkdir makes the directory and any parent directories for the directory of the name given

(ctx context.Context, rootNode *mega.Node, dir string)

Source from the content-addressed store, hash-verified

379// mkdir makes the directory and any parent directories for the
380// directory of the name given
381func (f *Fs) mkdir(ctx context.Context, rootNode *mega.Node, dir string) (node *mega.Node, err error) {
382 f.mkdirMu.Lock()
383 defer f.mkdirMu.Unlock()
384
385 parts := f.splitNodePath(dir)
386 if parts == nil {
387 return rootNode, nil
388 }
389 var i int
390 // look up until we find a directory which exists
391 for i = 0; i <= len(parts); i++ {
392 var nodes []*mega.Node
393 nodes, err = f.srv.FS.PathLookup(rootNode, parts[:len(parts)-i])
394 if err == nil {
395 if len(nodes) == 0 {
396 node = rootNode
397 } else {
398 node = nodes[len(nodes)-1]
399 }
400 break
401 }
402 if err != mega.ENOENT {
403 return nil, fmt.Errorf("mkdir lookup failed: %w", err)
404 }
405 }
406 if err != nil {
407 return nil, fmt.Errorf("internal error: mkdir called with nonexistent root node: %w", err)
408 }
409 // i is number of directories to create (may be 0)
410 // node is directory to create them from
411 for _, name := range parts[len(parts)-i:] {
412 // create directory called name in node
413 err = f.pacer.Call(func() (bool, error) {
414 node, err = f.srv.CreateDir(name, node)
415 return shouldRetry(ctx, err)
416 })
417 if err != nil {
418 return nil, fmt.Errorf("mkdir create node failed: %w", err)
419 }
420 }
421 return node, nil
422}
423
424// mkdirParent creates the parent directory of remote
425func (f *Fs) mkdirParent(ctx context.Context, remote string) (dirNode *mega.Node, leaf string, err error) {

Callers 4

mkdirParentMethod · 0.95
findRootMethod · 0.95
MkdirMethod · 0.95
moveMethod · 0.45

Calls 7

splitNodePathMethod · 0.95
shouldRetryFunction · 0.70
LockMethod · 0.65
UnlockMethod · 0.65
CreateDirMethod · 0.65
ErrorfMethod · 0.45
CallMethod · 0.45

Tested by

no test coverage detected