(cfi *ComposeFileInfo, tarBall TarBall)
| 45 | } |
| 46 | |
| 47 | func (p *RegularTarBallFilePacker) PackFileIntoTar(cfi *ComposeFileInfo, tarBall TarBall) error { |
| 48 | fileReadCloser, err := StartReadingFile(cfi.Header, cfi.FileInfo, cfi.Path) |
| 49 | if err != nil { |
| 50 | if !p.skipFileNotExists { |
| 51 | return err |
| 52 | } |
| 53 | |
| 54 | switch err.(type) { |
| 55 | case FileNotExistError: |
| 56 | // File was deleted before opening. |
| 57 | // We should ignore file here as if it did not exist. |
| 58 | tracelog.WarningLogger.Println(err) |
| 59 | return nil |
| 60 | default: |
| 61 | return err |
| 62 | } |
| 63 | } |
| 64 | p.files.AddFile(cfi.Header, cfi.FileInfo, cfi.IsIncremented) |
| 65 | |
| 66 | defer utility.LoggedClose(fileReadCloser, "") |
| 67 | packedFileSize, err := PackFileTo(tarBall, cfi.Header, fileReadCloser) |
| 68 | |
| 69 | if err != nil { |
| 70 | return errors.Wrap(err, "PackFileIntoTar: operation failed") |
| 71 | } |
| 72 | if packedFileSize != cfi.Header.Size { |
| 73 | return newTarSizeError(packedFileSize, cfi.Header.Size) |
| 74 | } |
| 75 | return nil |
| 76 | } |
| 77 | |
| 78 | // TODO : unit tests |
| 79 | func StartReadingFile(fileInfoHeader *tar.Header, info os.FileInfo, path string) (io.ReadSeekCloser, error) { |
nothing calls this directly
no test coverage detected