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

Function estimateModuleSize

provisioner/terraform/modules.go:212–249  ·  view source on GitHub ↗

estimateModuleSize estimates the size impact of adding the specified module directory to a tar archive.

(root fs.FS, moduleDir string)

Source from the content-addressed store, hash-verified

210// estimateModuleSize estimates the size impact of adding the specified module
211// directory to a tar archive.
212func estimateModuleSize(root fs.FS, moduleDir string) (int64, error) {
213 size := int64(0)
214 err := fs.WalkDir(root, moduleDir, func(_ string, d fs.DirEntry, err error) error {
215 if err != nil {
216 return err
217 }
218 fileMode := d.Type()
219 if !fileMode.IsRegular() && !fileMode.IsDir() {
220 return nil
221 }
222
223 // .git directories are not needed in the archive and only cause
224 // hash differences for identical modules.
225 if fileMode.IsDir() && d.Name() == ".git" {
226 return fs.SkipDir
227 }
228
229 fileInfo, err := d.Info()
230 if err != nil {
231 return xerrors.Errorf("file info: %w", err)
232 }
233
234 size += 512 // tar header size
235 if !fileMode.IsRegular() {
236 return nil // Dirs have no content size
237 }
238
239 fileSize := fileInfo.Size()
240 size += fileSize
241 // Pad to 512 bytes
242 size += 512 - (fileSize % 512)
243 return nil
244 })
245 if err != nil {
246 return -1, err
247 }
248 return size, err
249}
250
251func fileHeader(filePath string, fileMode fs.FileMode, fileInfo fs.FileInfo) (*tar.Header, error) {
252 header, err := tar.FileInfoHeader(fileInfo, "")

Callers 1

Calls 5

SizeMethod · 0.80
TypeMethod · 0.65
NameMethod · 0.65
InfoMethod · 0.45
ErrorfMethod · 0.45

Tested by

no test coverage detected