MCPcopy
hub / github.com/git-lfs/git-lfs / delayedSmudge

Function delayedSmudge

commands/command_smudge.go:32–84  ·  view source on GitHub ↗

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)

Source from the content-addressed store, hash-verified

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.
32func 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".

Callers 1

filterCommandFunction · 0.85

Calls 15

DecodeFromFunction · 0.92
SpoolFunction · 0.92
WrapFunction · 0.92
NewNotAPointerErrorFunction · 0.92
NewFunction · 0.92
LinkOrCopyFromReferenceFunction · 0.92
statusFromErrFunction · 0.85
WriteStatusMethod · 0.80
AllowsMethod · 0.80
SmudgeMethod · 0.80
EncodeMethod · 0.80
ErrorMethod · 0.65

Tested by

no test coverage detected