(ctx context.Context, srcObj model.Obj, newName string)
| 469 | } |
| 470 | |
| 471 | func (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 | |
| 524 | func (d *Github) Copy(ctx context.Context, srcObj, dstDir model.Obj) error { |
| 525 | if !d.isOnBranch { |
nothing calls this directly
no test coverage detected