diff options
| author | Jorge Israel Peña <jorge.israel.p@gmail.com> | 2014-05-09 02:11:56 -0700 |
|---|---|---|
| committer | Jorge Israel Peña <jorge.israel.p@gmail.com> | 2014-05-09 02:11:56 -0700 |
| commit | d86b4753d4811a0f1bd1004e83296238c83a383a (patch) | |
| tree | 9896ca0c58d9f89e62d2eda2cf47c498694d281f | |
| parent | 43c2aeae54253157725c6a58318fff9f2776f108 (diff) | |
| download | hakyll-d86b4753d4811a0f1bd1004e83296238c83a383a.tar.gz | |
save modification time with sub-second granularity
Some systems can get the file modification time with sub-second
granularity. However, Hakyll shaves off the sub-seconds, as defined in
the Binary instance of BinaryTime, which poses a problem because when a
file is checked to see if it was modified in `resourceModified`, it
still contains the sub-seconds. This results in a file (almost) always
being considered as having been modified.
Example:
1. First go around, modification time is 3:45.325. This time is saved
as 3:45.000 (i.e. sub-seconds are shaved off).
2. Second go around, modification time is again read as 3:45.325 and
compared against the stored time, 3:45.000. 3:45.325 is more recent
than 3:45.000, so the file is considered to have been modified.
This change prevents the shaving off of sub-seconds. This will naturally
work on systems that don't support sub-second granularity, as that
'field' will simply appear as all zeros.
Closes #250
| -rw-r--r-- | src/Hakyll/Core/Provider/Internal.hs | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/src/Hakyll/Core/Provider/Internal.hs b/src/Hakyll/Core/Provider/Internal.hs index fdf1342..34400fd 100644 --- a/src/Hakyll/Core/Provider/Internal.hs +++ b/src/Hakyll/Core/Provider/Internal.hs @@ -31,8 +31,7 @@ import Data.Maybe (fromMaybe) import Data.Monoid (mempty) import Data.Set (Set) import qualified Data.Set as S -import Data.Time (Day (..), UTCTime (..), - secondsToDiffTime) +import Data.Time (Day (..), UTCTime (..)) import Data.Typeable (Typeable) import System.Directory (getModificationTime) import System.FilePath (addExtension, (</>)) @@ -62,11 +61,11 @@ newtype BinaryTime = BinaryTime {unBinaryTime :: UTCTime} -------------------------------------------------------------------------------- instance Binary BinaryTime where put (BinaryTime (UTCTime (ModifiedJulianDay d) dt)) = - put d >> put (floor dt :: Integer) + put d >> put (toRational dt) get = fmap BinaryTime $ UTCTime <$> (ModifiedJulianDay <$> get) - <*> (secondsToDiffTime <$> get) + <*> (fromRational <$> get) -------------------------------------------------------------------------------- |
