gpt4 book ai didi

shake-build-system - 当我的规则改变时,Shake : How to reliably, 自动强制重建,变得与 shake 数据库不同步?

转载 作者:行者123 更新时间:2023-12-04 16:50:08 29 4
gpt4 key购买 nike

Shake 有 shakeVersion::String:

Defaults to 1. The version number of your build rules. Change the version number to force a complete rebuild, such as when making significant changes to the rules that require a wipe. The version number should be set in the source code, and not passed on the command line.

稍微改进构建系统而没有注意到它们是需要删除的重大更改是非常容易的。如果您通过版本控制分发它们,可能会导致我的同事和我的持续集成机器人的构建不正确。

虽然我通过删除 .shake.database 来修复我自己的构建,但与整个公司沟通这个并不有趣。

我怎样才能自动处理这个问题?

最佳答案

这是我在 https://github.com/ndmitchell/shake/issues/59 中设法想出的;在 stackoverflow 上比在已关闭的问题中更容易发现它:


假设我的 Shake 规则在 Build.hs 中。

我使用 Build.hs 本身的散列作为 shakeVersion:

{-# LANGUAGE TemplateHaskell #-}

import qualified Data.ByteString as BS
import Development.Shake.Classes (hashWithSalt)
import Language.Haskell.TH

-- | The name of this file we are in.
_THIS_FILE_NAME :: String
_THIS_FILE_NAME = $(LitE . StringL . loc_filename <$> location)

main = do
checksum <- dropWhile (== '-') . show . hashWithSalt 0 <$> BS.readFile _THIS_FILE_NAME

shakeArgs shakeOptions
{ shakeVersion = "hash-" ++ checksum ++ "-" ++ _THIS_FILE_NAME
} $ do ...

这样,当我更改我的 Shake 代码时,版本会自动更改,而且我永远不必担心手动修改它。


更新:现在有一个函数 getHashedShakeVersionshake 中,可以更轻松地执行以下操作。

关于shake-build-system - 当我的规则改变时,Shake : How to reliably, 自动强制重建,变得与 shake 数据库不同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18532552/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com