From ed1cc2fe199fb8145652da244edc35e12716192c Mon Sep 17 00:00:00 2001
From: Duncan Coutts <duncan@community.haskell.org>
Date: Sat, 16 Apr 2016 04:05:52 +0100
Subject: [PATCH] matchFileGlob should only monitor for existence

Since the matchFileGlob function returns names of files and not content,
actions using it don't actually depend on the content, so it's more
consistent not to monitor the content.

In particular, following Edward's recent fix, the code that reads the
package cabal files already monitors the content. This is the
appropriate separation of concerns, the code that finds the .cabal files
monitors the search glob for file existence, while the code that reads
the .cabal files monitors the file content.
---
 cabal-install/Distribution/Client/FileMonitor.hs  | 8 ++++++++
 cabal-install/Distribution/Client/RebuildMonad.hs | 3 ++-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/cabal-install/Distribution/Client/FileMonitor.hs b/cabal-install/Distribution/Client/FileMonitor.hs
index 7a1abb3bf7..15cca4a451 100644
--- a/cabal-install/Distribution/Client/FileMonitor.hs
+++ b/cabal-install/Distribution/Client/FileMonitor.hs
@@ -19,6 +19,7 @@ module Distribution.Client.FileMonitor (
   monitorDirectoryExistence,
   monitorFileOrDirectory,
   monitorFileGlob,
+  monitorFileGlobExistence,
   monitorFileSearchPath,
   monitorFileHashedSearchPath,
 
@@ -156,6 +157,13 @@ monitorFileOrDirectory = MonitorFile FileModTime DirModTime
 monitorFileGlob :: FilePathGlob -> MonitorFilePath
 monitorFileGlob = MonitorFileGlob FileHashed DirExists
 
+-- | Monitor a set of files (or directories) identified by a file glob for
+-- existence only. The monitored glob is considered to have changed if the set
+-- of files matching the glob changes (i.e. creations or deletions).
+--
+monitorFileGlobExistence :: FilePathGlob -> MonitorFilePath
+monitorFileGlobExistence = MonitorFileGlob FileExists DirExists
+
 -- | Creates a list of files to monitor when you search for a file which
 -- unsuccessfully looked in @notFoundAtPaths@ before finding it at
 -- @foundAtPath@.
diff --git a/cabal-install/Distribution/Client/RebuildMonad.hs b/cabal-install/Distribution/Client/RebuildMonad.hs
index f3ef1c107a..fbd2248891 100644
--- a/cabal-install/Distribution/Client/RebuildMonad.hs
+++ b/cabal-install/Distribution/Client/RebuildMonad.hs
@@ -28,6 +28,7 @@ module Distribution.Client.RebuildMonad (
     monitorFileHashedSearchPath,
     -- ** Monitoring file globs
     monitorFileGlob,
+    monitorFileGlobExistence,
     FilePathGlob(..),
     FilePathRoot(..),
     FilePathGlobRel(..),
@@ -140,6 +141,6 @@ rerunIfChanged verbosity monitor key action = do
 matchFileGlob :: FilePathGlob -> Rebuild [FilePath]
 matchFileGlob glob = do
     root <- askRoot
-    monitorFiles [monitorFileGlob glob]
+    monitorFiles [monitorFileGlobExistence glob]
     liftIO $ Glob.matchFileGlob root glob
 
-- 
GitLab