(ctx context.Context, obj model.Obj)
| 555 | } |
| 556 | |
| 557 | func (d *Github) Remove(ctx context.Context, obj model.Obj) error { |
| 558 | if !d.isOnBranch { |
| 559 | return errors.New("cannot write to non-branch reference") |
| 560 | } |
| 561 | d.commitMutex.Lock() |
| 562 | defer d.commitMutex.Unlock() |
| 563 | parentDir := stdpath.Dir(obj.GetPath()) |
| 564 | tree, treeSha, err := d.getTreeDirectly(parentDir) |
| 565 | if err != nil { |
| 566 | return err |
| 567 | } |
| 568 | var del *TreeObjReq = nil |
| 569 | for _, t := range tree.Trees { |
| 570 | if t.Path == obj.GetName() { |
| 571 | if t.Type == "commit" { |
| 572 | return errors.New("cannot remove a submodule") |
| 573 | } |
| 574 | del = &t.TreeObjReq |
| 575 | del.Sha = nil |
| 576 | break |
| 577 | } |
| 578 | } |
| 579 | if del == nil { |
| 580 | return errs.ObjectNotFound |
| 581 | } |
| 582 | newTree := make([]interface{}, 0, 2) |
| 583 | newTree = append(newTree, *del) |
| 584 | if len(tree.Trees) == 1 { // completely emptying the repository will get a 404 |
| 585 | newTree = append(newTree, map[string]string{ |
| 586 | "path": ".gitkeep", |
| 587 | "mode": "100644", |
| 588 | "type": "blob", |
| 589 | "content": "", |
| 590 | }) |
| 591 | } |
| 592 | newSha, err := d.newTree(treeSha, newTree) |
| 593 | if err != nil { |
| 594 | return err |
| 595 | } |
| 596 | rootSha, err := d.renewParentTrees(parentDir, treeSha, newSha, "/") |
| 597 | if err != nil { |
| 598 | return err |
| 599 | } |
| 600 | commitMessage, err := getMessage(d.deleteMsgTmpl, &MessageTemplateVars{ |
| 601 | UserName: getUsername(ctx), |
| 602 | ObjName: obj.GetName(), |
| 603 | ObjPath: obj.GetPath(), |
| 604 | ParentName: stdpath.Base(parentDir), |
| 605 | ParentPath: parentDir, |
| 606 | }, "remove") |
| 607 | if err != nil { |
| 608 | return err |
| 609 | } |
| 610 | return d.commit(commitMessage, rootSha) |
| 611 | } |
| 612 | |
| 613 | func (d *Github) Put(ctx context.Context, dstDir model.Obj, stream model.FileStreamer, up driver.UpdateProgress) error { |
| 614 | if !d.isOnBranch { |
nothing calls this directly
no test coverage detected