MCPcopy
hub / github.com/AlistGo/alist / Rename

Method Rename

drivers/github/driver.go:471–522  ·  view source on GitHub ↗
(ctx context.Context, srcObj model.Obj, newName string)

Source from the content-addressed store, hash-verified

469}
470
471func (d *Github) Rename(ctx context.Context, srcObj model.Obj, newName string) error {
472 if !d.isOnBranch {
473 return errors.New("cannot write to non-branch reference")
474 }
475 d.commitMutex.Lock()
476 defer d.commitMutex.Unlock()
477 parentDir := stdpath.Dir(srcObj.GetPath())
478 tree, _, err := d.getTreeDirectly(parentDir)
479 if err != nil {
480 return err
481 }
482 newTree := make([]interface{}, 2)
483 operated := false
484 for _, t := range tree.Trees {
485 if t.Path == srcObj.GetName() {
486 if t.Type == "commit" {
487 return errors.New("cannot rename a submodule")
488 }
489 delCopy := t.TreeObjReq
490 delCopy.Sha = nil
491 newTree[0] = delCopy
492 t.Path = newName
493 newTree[1] = t.TreeObjReq
494 operated = true
495 break
496 }
497 }
498 if !operated {
499 return errs.ObjectNotFound
500 }
501 newSha, err := d.newTree(tree.Sha, newTree)
502 if err != nil {
503 return err
504 }
505 rootSha, err := d.renewParentTrees(parentDir, tree.Sha, newSha, "/")
506 if err != nil {
507 return err
508 }
509 message, err := getMessage(d.renameMsgTmpl, &MessageTemplateVars{
510 UserName: getUsername(ctx),
511 ObjName: srcObj.GetName(),
512 ObjPath: srcObj.GetPath(),
513 ParentName: stdpath.Base(parentDir),
514 ParentPath: parentDir,
515 TargetName: newName,
516 TargetPath: stdpath.Join(parentDir, newName),
517 }, "rename")
518 if err != nil {
519 return err
520 }
521 return d.commit(message, rootSha)
522}
523
524func (d *Github) Copy(ctx context.Context, srcObj, dstDir model.Obj) error {
525 if !d.isOnBranch {

Callers

nothing calls this directly

Calls 9

getTreeDirectlyMethod · 0.95
newTreeMethod · 0.95
renewParentTreesMethod · 0.95
commitMethod · 0.95
getMessageFunction · 0.85
getUsernameFunction · 0.85
UnlockMethod · 0.65
GetPathMethod · 0.65
GetNameMethod · 0.65

Tested by

no test coverage detected