lib/local.js
function statFile(file, source) {
  return function(cb) {
    var abs = join(source, file);
    stat(abs, function(err, stats) {
      if (err) return cb(err);

      var manifest = {
        name: file,
        abs: abs,
        mtime: Math.floor(stats.mtime.getTime() / 1000),
        mode: '' + parseInt(stats.mode.toString(8), 10),
        size: '' + stats.size // do we need this?
      };

      if (stats.isDirectory()) return cb();
      if (stats.isSymbolicLink()) return fs.readlink(abs, finish('link'));
      calculateHash(abs, finish('hash'));

      function finish(key) {
        return function(err, val) {
          if (err) return cb(err);
          manifest[key] = val;
          cb(null, manifest);
        };
      }
    });
  };
}
function statFile(file, source) {
  return function(cb) {
    var abs = join(source, file);
    stat(abs, function(err, stats) {
      if (err) return cb(err);

      var manifest = {
        name: file,
        abs: abs,
        mtime: Math.floor(stats.mtime.getTime() / 1000),
        mode: '' + parseInt(stats.mode.toString(8), 10),
        size: '' + stats.size // do we need this?
      };

      if (stats.isDirectory()) return cb();
      if (stats.isSymbolicLink()) return fs.readlink(abs, finish('link'));
      calculateHash(abs, finish('hash'));

      function finish(key) {
        return function(err, val) {
          if (err) return cb(err);
          manifest[key] = val;
          cb(null, manifest);
        };
      }
    });
  };
}
function statFile ( file , source ) { return function ( cb ) { var abs = join ( source , file ) ; stat ( abs , function ( err , stats ) { if ( err ) return cb ( err ) ; var manifest = { name : file , abs : abs , mtime : Math . floor ( stats . mtime . getTime ( ) / 1000 ) , mode : '' + parseInt ( stats . mode . toString ( 8 ) , 10 ) , size : '' + stats . size // do we need this? } ; if ( stats . isDirectory ( ) ) return cb ( ) ; if ( stats . isSymbolicLink ( ) ) return fs . readlink ( abs , finish ( 'link' ) ) ; calculateHash ( abs , finish ( 'hash' ) ) ; function finish ( key ) { return function ( err , val ) { if ( err ) return cb ( err ) ; manifest [ key ] = val ; cb ( null , manifest ) ; } ; } } ) ; } ; }
Get a file manifest

@param {String} file
@param {String} source
@return {Function}
Get a file manifest