whole_func_string: 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});
  
  }
func_code_string: 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});
  
  }
func_documentation_string: 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