MCPcopy
hub / github.com/nektos/act / actionCacheCopyFileOrDir

Function actionCacheCopyFileOrDir

pkg/runner/action_cache.go:175–228  ·  view source on GitHub ↗
(ctx context.Context, cleanIncludePrefix string, t *object.Tree, tw *tar.Writer, origin string, f *object.File)

Source from the content-addressed store, hash-verified

173}
174
175func actionCacheCopyFileOrDir(ctx context.Context, cleanIncludePrefix string, t *object.Tree, tw *tar.Writer, origin string, f *object.File) error {
176 if err := ctx.Err(); err != nil {
177 return err
178 }
179 name := origin
180 if strings.HasPrefix(name, cleanIncludePrefix+"/") {
181 name = name[len(cleanIncludePrefix)+1:]
182 } else if cleanIncludePrefix != "." && name != cleanIncludePrefix {
183 return nil
184 }
185 fmode, err := f.Mode.ToOSFileMode()
186 if err != nil {
187 return err
188 }
189 if fmode&fs.ModeSymlink == fs.ModeSymlink {
190 content, err := f.Contents()
191 if err != nil {
192 return err
193 }
194
195 destPath := path.Join(path.Dir(f.Name), content)
196
197 subtree, err := t.Tree(destPath)
198 if err == nil {
199 return subtree.Files().ForEach(func(ft *object.File) error {
200 return actionCacheCopyFileOrDir(ctx, cleanIncludePrefix, t, tw, origin+strings.TrimPrefix(ft.Name, f.Name), f)
201 })
202 }
203
204 f, err := t.File(destPath)
205 if err != nil {
206 return fmt.Errorf("%s (%s): %w", destPath, origin, err)
207 }
208 return actionCacheCopyFileOrDir(ctx, cleanIncludePrefix, t, tw, origin, f)
209 }
210 header, err := tar.FileInfoHeader(&GitFileInfo{
211 name: name,
212 mode: fmode,
213 size: f.Size,
214 }, "")
215 if err != nil {
216 return err
217 }
218 err = tw.WriteHeader(header)
219 if err != nil {
220 return err
221 }
222 reader, err := f.Reader()
223 if err != nil {
224 return err
225 }
226 _, err = io.Copy(tw, reader)
227 return err
228}

Callers 1

GetTarArchiveMethod · 0.85

Calls 1

CopyMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…