@@ -121,10 +121,11 @@ func getCompressionWriter(file *os.File, algo string, concurrency int) (io.Write
121121 }
122122}
123123
124- func writeTarball (path string , tarWriter * tar.Writer , prefix string ) error {
124+ func writeTarball (path string , tarWriter * tar.Writer , prefix string ) ( returnErr error ) {
125125 fileInfo , err := os .Lstat (path )
126126 if err != nil {
127- return errwrap .Wrap (err , fmt .Sprintf ("error getting file info for %s" , path ))
127+ returnErr = errwrap .Wrap (err , fmt .Sprintf ("error getting file info for %s" , path ))
128+ return
128129 }
129130
130131 if fileInfo .Mode ()& os .ModeSocket == os .ModeSocket {
@@ -135,19 +136,22 @@ func writeTarball(path string, tarWriter *tar.Writer, prefix string) error {
135136 if fileInfo .Mode ()& os .ModeSymlink == os .ModeSymlink {
136137 var err error
137138 if link , err = os .Readlink (path ); err != nil {
138- return errwrap .Wrap (err , fmt .Sprintf ("error resolving symlink %s" , path ))
139+ returnErr = errwrap .Wrap (err , fmt .Sprintf ("error resolving symlink %s" , path ))
140+ return
139141 }
140142 }
141143
142144 header , err := tar .FileInfoHeader (fileInfo , link )
143145 if err != nil {
144- return errwrap .Wrap (err , "error getting file info header" )
146+ returnErr = errwrap .Wrap (err , "error getting file info header" )
147+ return
145148 }
146149 header .Name = strings .TrimPrefix (path , prefix )
147150
148151 err = tarWriter .WriteHeader (header )
149152 if err != nil {
150- return errwrap .Wrap (err , "error writing file info header" )
153+ returnErr = errwrap .Wrap (err , "error writing file info header" )
154+ return
151155 }
152156
153157 if ! fileInfo .Mode ().IsRegular () {
@@ -156,13 +160,17 @@ func writeTarball(path string, tarWriter *tar.Writer, prefix string) error {
156160
157161 file , err := os .Open (path )
158162 if err != nil {
159- return errwrap .Wrap (err , fmt .Sprintf ("error opening %s" , path ))
163+ returnErr = errwrap .Wrap (err , fmt .Sprintf ("error opening %s" , path ))
164+ return
160165 }
161- defer file .Close ()
166+ defer func () {
167+ returnErr = file .Close ()
168+ }()
162169
163170 _ , err = io .Copy (tarWriter , file )
164171 if err != nil {
165- return errwrap .Wrap (err , fmt .Sprintf ("error copying %s to tar writer" , path ))
172+ returnErr = errwrap .Wrap (err , fmt .Sprintf ("error copying %s to tar writer" , path ))
173+ return
166174 }
167175
168176 return nil
0 commit comments