MCPcopy Create free account
hub / github.com/coder/coder / CreateTarFromFiles

Function CreateTarFromFiles

scaletest/loadtestutil/files.go:10–50  ·  view source on GitHub ↗
(files map[string][]byte)

Source from the content-addressed store, hash-verified

8)
9
10func CreateTarFromFiles(files map[string][]byte) ([]byte, error) {
11 buf := new(bytes.Buffer)
12 writer := tar.NewWriter(buf)
13 dirs := []string{}
14 for name, content := range files {
15 // We need to add directories before any files that use them. But, we only need to do this
16 // once.
17 dir := filepath.Dir(name)
18 if dir != "." && !slices.Contains(dirs, dir) {
19 dirs = append(dirs, dir)
20 err := writer.WriteHeader(&tar.Header{
21 Name: dir,
22 Mode: 0o755,
23 Typeflag: tar.TypeDir,
24 })
25 if err != nil {
26 return nil, err
27 }
28 }
29
30 err := writer.WriteHeader(&tar.Header{
31 Name: name,
32 Size: int64(len(content)),
33 Mode: 0o644,
34 })
35 if err != nil {
36 return nil, err
37 }
38
39 _, err = writer.Write(content)
40 if err != nil {
41 return nil, err
42 }
43 }
44 // `writer.Close()` function flushes the writer buffer, and adds extra padding to create a legal tarball.
45 err := writer.Close()
46 if err != nil {
47 return nil, err
48 }
49 return buf.Bytes(), nil
50}

Callers 2

TemplateTarDataFunction · 0.92
TemplateTarDataFunction · 0.92

Calls 5

WriteMethod · 0.65
CloseMethod · 0.65
ContainsMethod · 0.45
WriteHeaderMethod · 0.45
BytesMethod · 0.45

Tested by

no test coverage detected