(f *object.File)
| 627 | } |
| 628 | |
| 629 | func (w *Worktree) checkoutFile(f *object.File) (err error) { |
| 630 | mode, err := f.Mode.ToOSFileMode() |
| 631 | if err != nil { |
| 632 | return |
| 633 | } |
| 634 | |
| 635 | if mode&os.ModeSymlink != 0 { |
| 636 | return w.checkoutFileSymlink(f) |
| 637 | } |
| 638 | |
| 639 | from, err := f.Reader() |
| 640 | if err != nil { |
| 641 | return |
| 642 | } |
| 643 | |
| 644 | defer ioutil.CheckClose(from, &err) |
| 645 | |
| 646 | to, err := w.Filesystem.OpenFile(f.Name, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, mode.Perm()) |
| 647 | if err != nil { |
| 648 | return |
| 649 | } |
| 650 | |
| 651 | defer ioutil.CheckClose(to, &err) |
| 652 | buf := sync.GetByteSlice() |
| 653 | _, err = io.CopyBuffer(to, from, *buf) |
| 654 | sync.PutByteSlice(buf) |
| 655 | return |
| 656 | } |
| 657 | |
| 658 | func (w *Worktree) checkoutFileSymlink(f *object.File) (err error) { |
| 659 | // .gitmodules symlink rejection (and its NTFS / HFS variants) is |
no test coverage detected