(ctx context.Context, dstDir model.Obj, stream model.FileStreamer, up driver.UpdateProgress)
| 611 | } |
| 612 | |
| 613 | func (d *Github) Put(ctx context.Context, dstDir model.Obj, stream model.FileStreamer, up driver.UpdateProgress) error { |
| 614 | if !d.isOnBranch { |
| 615 | return errors.New("cannot write to non-branch reference") |
| 616 | } |
| 617 | blob, err := d.putBlob(ctx, stream, up) |
| 618 | if err != nil { |
| 619 | return err |
| 620 | } |
| 621 | d.commitMutex.Lock() |
| 622 | defer d.commitMutex.Unlock() |
| 623 | parent, err := d.get(dstDir.GetPath()) |
| 624 | if err != nil { |
| 625 | return err |
| 626 | } |
| 627 | if parent.Entries == nil { |
| 628 | return errs.NotFolder |
| 629 | } |
| 630 | newTree := make([]interface{}, 0, 2) |
| 631 | newTree = append(newTree, TreeObjReq{ |
| 632 | Path: stream.GetName(), |
| 633 | Mode: "100644", |
| 634 | Type: "blob", |
| 635 | Sha: blob, |
| 636 | }) |
| 637 | if len(parent.Entries) == 1 && parent.Entries[0].Name == ".gitkeep" { |
| 638 | newTree = append(newTree, TreeObjReq{ |
| 639 | Path: ".gitkeep", |
| 640 | Mode: "100644", |
| 641 | Type: "blob", |
| 642 | Sha: nil, |
| 643 | }) |
| 644 | } |
| 645 | newSha, err := d.newTree(parent.Sha, newTree) |
| 646 | if err != nil { |
| 647 | return err |
| 648 | } |
| 649 | rootSha, err := d.renewParentTrees(dstDir.GetPath(), parent.Sha, newSha, "/") |
| 650 | if err != nil { |
| 651 | return err |
| 652 | } |
| 653 | |
| 654 | commitMessage, err := getMessage(d.putMsgTmpl, &MessageTemplateVars{ |
| 655 | UserName: getUsername(ctx), |
| 656 | ObjName: stream.GetName(), |
| 657 | ObjPath: stdpath.Join(dstDir.GetPath(), stream.GetName()), |
| 658 | ParentName: dstDir.GetName(), |
| 659 | ParentPath: dstDir.GetPath(), |
| 660 | }, "upload") |
| 661 | if err != nil { |
| 662 | return err |
| 663 | } |
| 664 | return d.commit(commitMessage, rootSha) |
| 665 | } |
| 666 | |
| 667 | var _ driver.Driver = (*Github)(nil) |
| 668 |
nothing calls this directly
no test coverage detected