MCPcopy Index your code
hub / github.com/coder/coder / extractTar

Function extractTar

cli/clitest/clitest.go:134–168  ·  view source on GitHub ↗
(t *testing.T, data []byte, directory string)

Source from the content-addressed store, hash-verified

132}
133
134func extractTar(t *testing.T, data []byte, directory string) {
135 reader := tar.NewReader(bytes.NewBuffer(data))
136 for {
137 header, err := reader.Next()
138 if errors.Is(err, io.EOF) {
139 break
140 }
141 require.NoError(t, err)
142 if header.Name == "." || strings.Contains(header.Name, "..") {
143 continue
144 }
145 // #nosec
146 path := filepath.Join(directory, header.Name)
147 mode := header.FileInfo().Mode()
148 if mode == 0 {
149 mode = 0o600
150 }
151 switch header.Typeflag {
152 case tar.TypeDir:
153 err = os.MkdirAll(path, mode)
154 require.NoError(t, err)
155 case tar.TypeReg:
156 file, err := os.OpenFile(path, os.O_CREATE|os.O_RDWR, mode)
157 require.NoError(t, err)
158 // Max file size of 10MB.
159 _, err = io.CopyN(file, reader, (1<<20)*10)
160 if errors.Is(err, io.EOF) {
161 err = nil
162 }
163 require.NoError(t, err)
164 err = file.Close()
165 require.NoError(t, err)
166 }
167 }
168}
169
170// Start runs the command in a goroutine and cleans it up when the test
171// completed.

Callers 1

Calls 5

MkdirAllMethod · 0.80
NextMethod · 0.65
CloseMethod · 0.65
IsMethod · 0.45
ContainsMethod · 0.45

Tested by

no test coverage detected