如何跳过动作?

时间:2016-09-20 23:42:54

标签: haskell shake-build-system

我想用震动下载一堆网页,然后对它们进行一些处理。但是,我还想选择在震动之外下载页面,告诉我已经这样做了,然后继续摇动其余的处理步骤。现在我正在做第二步,“告诉我,我已经完成了一些工作”。

举一个最小的例子,这是一个非常简短的摇动脚本:

$.ajax({
  url: {% url 'create' %},
  dataType: "html",
  method: "GET",
  success: function(data){
      $("#createModal").html(data);
  }
});

我想找到一种方法来阻止此脚本打印import Development.Shake main = shakeArgs shakeOptions $ do want ["test.txt"] "test.txt" %> \_ -> liftIO (putStrLn "yikes!") (但仍然更新yikes!的数据库条目)。使用test.txt运行此功能,部分看到了:

--help

这听起来很有希望。但是:

--touch                     Assume targets are clean.

也许它需要一个明确的文件列表来标记为新的?

% rm -r .shake && ./test --touch
yikes!
Build completed in 0:01m

好。好吧,% rm -r .shake && ./test --touch test.txt yikes! Build completed in 0:01m 也列出了这个:

--help

我觉得有点令人费解:我们现在有一个“干净/肮脏”的比喻和一个“旧的/新的”比喻,并不清楚它们是如何相关的。而且,当然,如果文件过时,那意味着 想重拍它,对吗?无论如何,它似乎没有做我想要的:

-o FILE, --old-file=FILE, --assume-old=FILE
                            Consider FILE to be very old and don't remake it.

好吧......好吧,也许这个选项与那个选项完全相反,可以做我想做的事情:

% rm -r .shake && ./test -o test.txt
yikes!
Build completed in 0:01m

没有骰子:

-W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE
                        Consider FILE to be infinitely new.

这给我留下了几个问题:

  • 最重要的是:如何在不运行与% r .shake && ./test -W test.txt yikes! Build completed in 0:01m 相关联的test.txt的情况下,让 更新Action的数据库条目?
  • test.txt做了什么,为什么没有帮助?
  • --touch / -o做了什么,为什么他们没有帮助?
  • 旧/新与干净/脏的关系是什么?

1 个答案:

答案 0 :(得分:2)

观察到混合隐喻是正确的,也是问题的一部分。在当前发布的Shake版本中,标志取自Make,它与Shake具有不同的语义,因此映射得很差。在当前的HEAD版本的Shake中,它已被重写并且更加简单 - 但是现在让我们关注已发布的版本。

在Shake 0.15(当前发布的版本)中,只有在Shake之前成功运行它时,才能跳过规则。因此,当您{Shake数据库rm时,Shake无法跳过测试执行的规则,因为它以前从未运行过。

在Shake 0.16出来之前,一个可靠而简单的选择是为你的构建系统添加一个标志,其存在会跳过所有下载 - 所以Shake仍然运行规则,但规则的效果是无操作。