1

我有一个简单的FSSM(文件系统状态监视器)脚本设置来监视一些文件并在它们被更改时对它们做一些事情。睡得很好。

但是,我希望它在我启动脚本时处理它具有更新处理程序的任何文件。就像现在一样,如果我在启动脚本之前对文件进行了编辑,那么在我再次保存文件之前,我的编辑不会被拾取。在一个有几十个文件被监视的项目中,这不太理想。

那么如何让 FSSM 处理它配置为在我的脚本启动时观看的每个文件呢?

我现在拥有的一个片段:

monitor = FSSM::Monitor.new
monitor.path '.' do
  glob '**/*.coffee'

  update do |base, relative|
    coffee base, relative
  end

  delete do |base, relative|
    remove base, relative
  end
end
monitor.run

我希望它在启动时运行更新子句,以便在不被监视时编辑的任何文件都会立即得到处理。

4

1 回答 1

1

最简单的方法可能是在每次调用 update 子句时更新零字节文件的时间戳,然后在启动过程中更新比该标记文件更新的任何文件。由于 update 子句需要在两个地方使用,因此将其存储为 lambda。

# 标记文件
ts = ".timestamp"
File.open(ts,"w"){} 除非 File.exists?ts


# 存储更新块,所以我们是 DRY
update_clause = lambda do |base, relative|
       咖啡碱,相对
       atime = mtime = Time.now
       File.utime(atime, mtime, ts)
结尾

# 针对比时间戳文件更新的任何文件运行更新
目录["**/*.coffee"].each 做 |f|
    如果 File.mtime(f) > File.mtime(ts)
       update_clause.call(File.dirname(f), File.basename(f))
    结尾
结尾

监视器 = FSSM::Monitor.new
monitor.path '.' 做
  glob '**/*.coffee'

  更新 &update_clause

  删除 do |base, relative|
    删除基础,相对
  结尾
结尾
监视器运行

我对 Ruby 还很陌生,所以可能会有更简洁或更惯用的语法,但基本的想法应该会照顾到你。

于 2011-04-05T14:27:20.467 回答