1+ var chownr = require ( 'chownr' )
12var tar = require ( 'tar-stream' )
23var pump = require ( 'pump' )
34var mkdirp = require ( 'mkdirp' )
@@ -285,10 +286,14 @@ exports.extract = function (cwd, opts) {
285286
286287 if ( header . type === 'directory' ) {
287288 stack . push ( [ name , header . mtime ] )
288- return mkdirp ( name , { fs : xfs } , stat )
289+ return mkdirfix ( name , {
290+ fs : xfs , own : own , uid : header . uid , gid : header . gid
291+ } , stat )
289292 }
290293
291- mkdirp ( path . dirname ( name ) , { fs : xfs } , function ( err ) {
294+ mkdirfix ( path . dirname ( name ) , {
295+ fs : xfs , own : own , uid : header . uid , gid : header . gid
296+ } , function ( err ) {
292297 if ( err ) return next ( err )
293298
294299 switch ( header . type ) {
@@ -306,3 +311,13 @@ exports.extract = function (cwd, opts) {
306311
307312 return extract
308313}
314+
315+ function mkdirfix ( name , opts , cb ) {
316+ mkdirp ( name , { fs : opts . xfs } , function ( err , made ) {
317+ if ( ! err && made && opts . own ) {
318+ chownr ( made , opts . uid , opts . gid , cb )
319+ } else {
320+ cb ( err )
321+ }
322+ } )
323+ }
0 commit comments