摇一摇-如何复制目录的所有内容

时间:2019-01-30 10:01:19

标签: shake-build-system

我想使用震动进行回归测试,并且必须设置测试目录。我想将带有字体的目录复制到测试目录中,并在目标目录中包含need,然后复制文件,但是我的代码给出了错误:

Probably due to calling 'need' on a directory. Shake only permits 'need' on files.

我试图在单个文件上获取needs,但没有成功。我有

        fontFiles1 <- getDirectoryFiles (templatesD</>"et-book" ) ["/**/*"]
        need $ map (\f -> staticD</>"et-book"</>f) fontFiles1 

然后:

  (staticD</>"et-book/**") %> \out ->
        copyFileChanged  (replaceDirectory out (templatesD</>"et-book")) out

,但这不包括et-book下的所有子目录。

正确的方法是什么?我是否应该复制所有目录内容(例如使用fsutils的System.Path)?

1 个答案:

答案 0 :(得分:1)

这个答案在本质上是正确的,所以我怀疑只有一些细节有些错误:

  • fontFiles1是否包含文件的完整列表?我的猜测是模式应该为**,并且前导/会使事情变得混乱。无论哪种方式,**都将更简单,并且将为将来提供更多证明。
  • replaceDirectory替换了所有目录组件,因此,如果您拥有static/et-book/foo/bar.txt,则将从templates/et-book/bar.txt复制。假设您知道staticD始终只是一个目录组件,那么templatesD</>dropDirectory1 out将作为源位置。

复制目录的模式非常普遍,因此我可能会添加一个辅助函数,以使其在将来的版本中更容易使用。 Shake bug tracker上有一张票和有关此事的讨论。