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

Function WriteZip

archive/archive.go:190–230  ·  view source on GitHub ↗

WriteZip writes the given tarReader to w.

(w io.Writer, tarReader *tar.Reader, maxSize int64)

Source from the content-addressed store, hash-verified

188
189// WriteZip writes the given tarReader to w.
190func WriteZip(w io.Writer, tarReader *tar.Reader, maxSize int64) error {
191 zipWriter := zip.NewWriter(w)
192 defer zipWriter.Close()
193
194 for {
195 tarHeader, err := tarReader.Next()
196 if errors.Is(err, io.EOF) {
197 break
198 }
199
200 if err != nil {
201 return err
202 }
203
204 zipHeader, err := zip.FileInfoHeader(tarHeader.FileInfo())
205 if err != nil {
206 return err
207 }
208 zipHeader.Name = tarHeader.Name
209 // Some versions of unzip do not check the mode on a file entry and
210 // simply assume that entries with a trailing path separator (/) are
211 // directories, and that everything else is a file. Give them a hint.
212 if tarHeader.FileInfo().IsDir() && !strings.HasSuffix(tarHeader.Name, "/") {
213 zipHeader.Name += "/"
214 }
215
216 zipEntry, err := zipWriter.CreateHeader(zipHeader)
217 if err != nil {
218 return err
219 }
220
221 _, err = io.CopyN(zipEntry, tarReader, maxSize)
222 if errors.Is(err, io.EOF) {
223 err = nil
224 }
225 if err != nil {
226 return err
227 }
228 }
229 return nil // don't need to flush as we call `writer.Close()`
230}

Callers 2

fileByIDMethod · 0.92
CreateZipFromTarFunction · 0.85

Calls 3

CloseMethod · 0.65
NextMethod · 0.65
IsMethod · 0.45

Tested by

no test coverage detected