{"action":"created","issue":{"url":"https://api.github.com/repos/ndmitchell/shake/issues/218","labels_url":"https://api.github.com/repos/ndmitchell/shake/issues/218/labels{/name}","comments_url":"https://api.github.com/repos/ndmitchell/shake/issues/218/comments","events_url":"https://api.github.com/repos/ndmitchell/shake/issues/218/events","html_url":"https://github.com/ndmitchell/shake/issues/218","id":63552900,"number":218,"title":"ChangeModtimeAndDigest doesn't work as documented","user":{"login":"LukeHoersten","id":743,"avatar_url":"https://avatars.githubusercontent.com/u/743?v=3","gravatar_id":"","url":"https://api.github.com/users/LukeHoersten","html_url":"https://github.com/LukeHoersten","followers_url":"https://api.github.com/users/LukeHoersten/followers","following_url":"https://api.github.com/users/LukeHoersten/following{/other_user}","gists_url":"https://api.github.com/users/LukeHoersten/gists{/gist_id}","starred_url":"https://api.github.com/users/LukeHoersten/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/LukeHoersten/subscriptions","organizations_url":"https://api.github.com/users/LukeHoersten/orgs","repos_url":"https://api.github.com/users/LukeHoersten/repos","events_url":"https://api.github.com/users/LukeHoersten/events{/privacy}","received_events_url":"https://api.github.com/users/LukeHoersten/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"milestone":null,"comments":8,"created_at":"2015-03-22T16:57:34Z","updated_at":"2015-03-23T13:18:17Z","closed_at":"2015-03-23T12:13:49Z","body":"According to my understanding of [the documentation](http://hackage.haskell.org/package/shake-0.14.3/docs/Development-Shake.html#t:Change), if a target file's modification time has changed but its digest has not then `ChangeModtimeAndDigest` and `ChangeDigest` should have the same behavior: to not rerun the rule. This is not the case in 0.14.3. `(T && F) == F `\r\n\r\n> ChangeModtimeAndDigest\t\r\n> A file is rebuilt if both its modification time and digest have changed. For efficiency reasons, the modification time is checked first, and if that has changed, the digest is checked.\r\n\r\nLooking at [the relevant code for ChangeDigest](https://github.com/ndmitchell/shake/blob/3c474defd00174f366c8a1722cb865225c9ae5b2/src/Development/Shake/Rules/File.hs#L62), I don't see how `ChangeModtimeAndDigest` is supposed to work as documented. Maybe this was never implemented?"},"comment":{"url":"https://api.github.com/repos/ndmitchell/shake/issues/comments/84993817","html_url":"https://github.com/ndmitchell/shake/issues/218#issuecomment-84993817","issue_url":"https://api.github.com/repos/ndmitchell/shake/issues/218","id":84993817,"user":{"login":"LukeHoersten","id":743,"avatar_url":"https://avatars.githubusercontent.com/u/743?v=3","gravatar_id":"","url":"https://api.github.com/users/LukeHoersten","html_url":"https://github.com/LukeHoersten","followers_url":"https://api.github.com/users/LukeHoersten/followers","following_url":"https://api.github.com/users/LukeHoersten/following{/other_user}","gists_url":"https://api.github.com/users/LukeHoersten/gists{/gist_id}","starred_url":"https://api.github.com/users/LukeHoersten/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/LukeHoersten/subscriptions","organizations_url":"https://api.github.com/users/LukeHoersten/orgs","repos_url":"https://api.github.com/users/LukeHoersten/repos","events_url":"https://api.github.com/users/LukeHoersten/events{/privacy}","received_events_url":"https://api.github.com/users/LukeHoersten/received_events","type":"User","site_admin":false},"created_at":"2015-03-23T13:18:17Z","updated_at":"2015-03-23T13:18:17Z","body":"Thanks a lot Neil. I think I've been having this bug for some time. It was difficult to track down since I had complex builds. Once I started a new project I could more clearly see what was happening. Thanks for the fixes! This should result in less rebuilds for anyone using hashes!"}}