lib/file/chown.js
function _chown(file, uid, gid, options) {
  options = _.opts(options, {abortOnError: true});
  uid = parseInt(uid, 10);
  uid = _.isFinite(uid) ? uid : getUid(_fileStats(file).uid, {refresh: false});
  gid = parseInt(gid, 10);
  gid = _.isFinite(gid) ? gid : getGid(_fileStats(file).gid, {refresh: false});
  try {
    if (options.abortOnError) {
      nodeFs.chownSync(file, uid, gid);
    } else {
      fs.chownSync(file, uid, gid);
    }
  } catch (e) {
    if (options.abortOnError) {
      throw e;
    }
  }
}
function _chown(file, uid, gid, options) {
  options = _.opts(options, {abortOnError: true});
  uid = parseInt(uid, 10);
  uid = _.isFinite(uid) ? uid : getUid(_fileStats(file).uid, {refresh: false});
  gid = parseInt(gid, 10);
  gid = _.isFinite(gid) ? gid : getGid(_fileStats(file).gid, {refresh: false});
  try {
    if (options.abortOnError) {
      nodeFs.chownSync(file, uid, gid);
    } else {
      fs.chownSync(file, uid, gid);
    }
  } catch (e) {
    if (options.abortOnError) {
      throw e;
    }
  }
}
function _chown ( file , uid , gid , options ) { options = _ . opts ( options , { abortOnError : true } ) ; uid = parseInt ( uid , 10 ) ; uid = _ . isFinite ( uid ) ? uid : getUid ( _fileStats ( file ) . uid , { refresh : false } ) ; gid = parseInt ( gid , 10 ) ; gid = _ . isFinite ( gid ) ? gid : getGid ( _fileStats ( file ) . gid , { refresh : false } ) ; try { if ( options . abortOnError ) { nodeFs . chownSync ( file , uid , gid ) ; } else { fs . chownSync ( file , uid , gid ) ; } } catch ( e ) { if ( options . abortOnError ) { throw e ; } } }
this is a strict function signature version of _chown, it also do not worry about recursivity
this is a strict function signature version of _chown it also do not worry about recursivity