@@ -46,8 +46,9 @@ run configuration rules = do
46 provider <- timed logger "Creating provider" $
46 provider <- timed logger "Creating provider" $
47 fileResourceProvider configuration
47 fileResourceProvider configuration
49− -- Fetch the old graph from the store
49+ -- Fetch the old graph from the store. If we don't find it, we consider this
50+ -- to be the first run
50− oldGraph <- fromMaybe mempty <$>
51+ (firstRun, oldGraph) <- fromMaybe (True, mempty) . fmap ((,) False) <$>
51 storeGet store "Hakyll.Core.Run.run" "dependencies"
52 storeGet store "Hakyll.Core.Run.run" "dependencies"
53 let ruleSet = runRules rules provider
54 let ruleSet = runRules rules provider
@@ -61,6 +62,7 @@ run configuration rules = do
61 , hakyllRoutes = rulesRoutes ruleSet
62 , hakyllRoutes = rulesRoutes ruleSet
62 , hakyllResourceProvider = provider
63 , hakyllResourceProvider = provider
63 , hakyllStore = store
64 , hakyllStore = store
65+ , hakyllFirstRun = firstRun
66 -- Run the program and fetch the resulting state
68 -- Run the program and fetch the resulting state
@@ -83,6 +85,7 @@ data RuntimeEnvironment = RuntimeEnvironment
83 , hakyllRoutes :: Routes
85 , hakyllRoutes :: Routes
84 , hakyllResourceProvider :: ResourceProvider
86 , hakyllResourceProvider :: ResourceProvider
85 , hakyllStore :: Store
87 , hakyllStore :: Store
88+ , hakyllFirstRun :: Bool
88data RuntimeState = RuntimeState
91data RuntimeState = RuntimeState
@@ -105,6 +108,7 @@ addNewCompilers newCompilers = Runtime $ do
105 section logger "Adding new compilers"
108 section logger "Adding new compilers"
106 provider <- hakyllResourceProvider <$> ask
109 provider <- hakyllResourceProvider <$> ask
107 store <- hakyllStore <$> ask
110 store <- hakyllStore <$> ask
111+ firstRun <- hakyllFirstRun <$> ask
109 -- Old state information
113 -- Old state information
110 oldCompilers <- hakyllCompilers <$> get
114 oldCompilers <- hakyllCompilers <$> get
@@ -124,9 +128,10 @@ addNewCompilers newCompilers = Runtime $ do
124 -- Check which items have been modified
128 -- Check which items have been modified
125 modified <- fmap S.fromList $ flip filterM (map fst newCompilers) $
129 modified <- fmap S.fromList $ flip filterM (map fst newCompilers) $
126 liftIO . resourceModified provider store . fromIdentifier
130 liftIO . resourceModified provider store . fromIdentifier
131+ let checkModified = if firstRun then const True else (`S.member` modified)
128 -- Create a new analyzer and append it to the currect one
133 -- Create a new analyzer and append it to the currect one
129− let newAnalyzer = makeDependencyAnalyzer newGraph (`S.member` modified) $
134+ let newAnalyzer = makeDependencyAnalyzer newGraph checkModified $
130 analyzerPreviousGraph oldAnalyzer
135 analyzerPreviousGraph oldAnalyzer
131 analyzer = mappend oldAnalyzer newAnalyzer
136 analyzer = mappend oldAnalyzer newAnalyzer