我使用shake来构建一堆静态网页,然后我必须使用sftp将其上传到远程主机。目前,cronjob运行
git pull # get possibly updated sources
./my-shake-system
lftp ... # upload
如果震动实际上没有重建任何东西,我想避免运行最终命令。有没有办法告诉摇动“运行命令foo
,在其他一切之后,只有你改变了什么!”?
或者,可以动摇报告它是否在流程退出代码中执行了某些操作?
我想我可以添加一个依赖于所有可能生成的文件的规则,但这似乎是多余的并且容易出错。
答案 0 :(得分:2)
目前没有直接/简单的方法来确定是否有任何建立。对于更简单的构建系统,它也不是一个有用的概念,因为某些规则(特别是那些定义storedValue
以返回Nothing
)的规则将始终"重新运行"但是然后很快决定他们不需要运行依赖于他们的规则。要摇晃,这与重新运行相同。我可以想到几种方法,最好的方法可能取决于你的情况:
标记有趣的规则
您可以使用写入特定文件的函数标记每个有趣的规则(产生需要上载的内容的规则)。如果该特定文件存在,则需要上传。这可能稍微好一点,就像你做了多次Shake运行一样,并且在第一次更改但第二次没有任何操作时,文件仍将存在。如果有意义,请使用IORef
而不是文件。
使用性能分析
Shake拥有相当高级的分析功能。如果您传递shakeProfile=["output.json"]
,它将生成一个JSON文件,详细说明构建和何时构建。运行由Int编制索引,最近一次运行为0
,并且排除任何未构建的运行。如果您有一个始终触发的规则(例如,使用alwaysRerun
写入虚拟文件),那么如果同时触发任何内容,则会重建。
观看.shake.database
文件大小
Shake有一个数据库,存储在shakeFiles
下。每个不感兴趣的运行它将增长相当少的量(~100字节) - 但给定系统的固定大小。如果它的大小变化更大,那么它就会做一些有趣的事情。
在这些方法中,标记有趣的规则可能是最简单和最直接的(尽管存在忘记标记内容的风险)。