mkdir makes the directory and any parent directories for the directory of the name given
(ctx context.Context, rootNode *mega.Node, dir string)
| 379 | // mkdir makes the directory and any parent directories for the |
| 380 | // directory of the name given |
| 381 | func (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 |
| 425 | func (f *Fs) mkdirParent(ctx context.Context, remote string) (dirNode *mega.Node, leaf string, err error) { |
no test coverage detected