delayedSmudge performs a 'delayed' smudge, adding the LFS pointer to the `*tq.TransferQueue` "q" if the file is not present locally, passes the given filepathfilter, and is not skipped. If the pointer is malformed, or already exists, it streams the contents to be written into the working copy to "to
(gf *lfs.GitFilter, s *git.FilterProcessScanner, to io.Writer, from io.Reader, q *tq.TransferQueue, filename string, skip bool, filter *filepathfilter.Filter)
| 30 | // delayedSmudge returns the number of bytes written, whether the checkout was |
| 31 | // delayed, the *lfs.Pointer that was smudged, and an error, if one occurred. |
| 32 | func delayedSmudge(gf *lfs.GitFilter, s *git.FilterProcessScanner, to io.Writer, from io.Reader, q *tq.TransferQueue, filename string, skip bool, filter *filepathfilter.Filter) (int64, bool, *lfs.Pointer, error) { |
| 33 | ptr, pbuf, perr := lfs.DecodeFrom(from) |
| 34 | if perr != nil { |
| 35 | // Write 'statusFromErr(nil)', even though 'perr != nil', since |
| 36 | // we are about to write non-delayed smudged contents to "to". |
| 37 | if err := s.WriteStatus(statusFromErr(nil)); err != nil { |
| 38 | return 0, false, nil, err |
| 39 | } |
| 40 | |
| 41 | n, err := tools.Spool(to, pbuf, cfg.TempDir()) |
| 42 | if err != nil { |
| 43 | return n, false, nil, errors.Wrap(err, perr.Error()) |
| 44 | } |
| 45 | |
| 46 | if n != 0 { |
| 47 | return 0, false, nil, errors.NewNotAPointerError(errors.New( |
| 48 | tr.Tr.Get("Unable to parse pointer at: %q", filename), |
| 49 | )) |
| 50 | } |
| 51 | return 0, false, nil, nil |
| 52 | } |
| 53 | |
| 54 | lfs.LinkOrCopyFromReference(cfg, ptr.Oid, ptr.Size) |
| 55 | |
| 56 | path, err := cfg.Filesystem().ObjectPath(ptr.Oid) |
| 57 | if err != nil { |
| 58 | return 0, false, nil, err |
| 59 | } |
| 60 | |
| 61 | if !skip && filter.Allows(filename) { |
| 62 | if _, statErr := os.Stat(path); statErr != nil && ptr.Size != 0 { |
| 63 | q.Add(filename, path, ptr.Oid, ptr.Size, false, nil) |
| 64 | return 0, true, ptr, nil |
| 65 | } |
| 66 | |
| 67 | // Write 'statusFromErr(nil)', since the object is already |
| 68 | // present in the local cache, we will write the object's |
| 69 | // contents without delaying. |
| 70 | if err := s.WriteStatus(statusFromErr(nil)); err != nil { |
| 71 | return 0, false, nil, err |
| 72 | } |
| 73 | |
| 74 | n, err := gf.Smudge(to, ptr, filename, false, nil, nil) |
| 75 | return n, false, ptr, err |
| 76 | } |
| 77 | |
| 78 | if err := s.WriteStatus(statusFromErr(nil)); err != nil { |
| 79 | return 0, false, nil, err |
| 80 | } |
| 81 | |
| 82 | n, err := ptr.Encode(to) |
| 83 | return int64(n), false, ptr, err |
| 84 | } |
| 85 | |
| 86 | // smudge smudges the given `*lfs.Pointer`, "ptr", and writes its objects |
| 87 | // contents to the `io.Writer`, "to". |
no test coverage detected