lib/epm/fs-explorer.js
function fileStatus(prev, stat, filename, dir, fn) {
  var fullname = path.join(dir, filename)

  // is a deleted file?
  /*if (!fs.existsSync(fullname)) {
    return fn && fn(null, { stats: undefined, code: -1});
  }*/

  // is a file added?
  if (prev === undefined || prev === null) {

    fn && fn(null, { stats: {mtime: stat.mtime, size: stat.size}, code: 1});

    return;
  }

  var mtimeChange = stat.mtime.valueOf() != prev.stats.mtime.valueOf();
  var sizeChange = stat.size != prev.stats.size;

  // has changes ?
  if (!mtimeChange && !sizeChange) {
    return fn && fn(null, { stats: {mtime: stat.mtime, size: stat.size}, code: 0});
  }

  // the file has change
  fn && fn(null, { stats: {mtime: stat.mtime, size: stat.size}, code: 2});

}
function fileStatus(prev, stat, filename, dir, fn) {
  var fullname = path.join(dir, filename)

  // is a deleted file?
  /*if (!fs.existsSync(fullname)) {
    return fn && fn(null, { stats: undefined, code: -1});
  }*/

  // is a file added?
  if (prev === undefined || prev === null) {

    fn && fn(null, { stats: {mtime: stat.mtime, size: stat.size}, code: 1});

    return;
  }

  var mtimeChange = stat.mtime.valueOf() != prev.stats.mtime.valueOf();
  var sizeChange = stat.size != prev.stats.size;

  // has changes ?
  if (!mtimeChange && !sizeChange) {
    return fn && fn(null, { stats: {mtime: stat.mtime, size: stat.size}, code: 0});
  }

  // the file has change
  fn && fn(null, { stats: {mtime: stat.mtime, size: stat.size}, code: 2});

}
function fileStatus ( prev , stat , filename , dir , fn ) { var fullname = path . join ( dir , filename ) // is a deleted file?
 /*if (!fs.existsSync(fullname)) {
    return fn && fn(null, { stats: undefined, code: -1});
  }*/ // is a file added?
 if ( prev === undefined || prev === null ) { fn && fn ( null , { stats : { mtime : stat . mtime , size : stat . size } , code : 1 } ) ; return ; } var mtimeChange = stat . mtime . valueOf ( ) != prev . stats . mtime . valueOf ( ) ; var sizeChange = stat . size != prev . stats . size ; // has changes ?
 if ( ! mtimeChange && ! sizeChange ) { return fn && fn ( null , { stats : { mtime : stat . mtime , size : stat . size } , code : 0 } ) ; } // the file has change
 fn && fn ( null , { stats : { mtime : stat . mtime , size : stat . size } , code : 2 } ) ; }
Get the file status code

and returns async on fn:
-1: file deleted
0: file unchange
1: file added
2: file has changes

@param {Object} prev current file status
@param {String} filename
@param {String} dir file folder
@param {requestCallback} fn callbacks
Get the file status code