summaryrefslogtreecommitdiff
path: root/Types/FileMatcher.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Types/FileMatcher.hs')
-rw-r--r--Types/FileMatcher.hs40
1 files changed, 40 insertions, 0 deletions
diff --git a/Types/FileMatcher.hs b/Types/FileMatcher.hs
new file mode 100644
index 000000000..03a86a38c
--- /dev/null
+++ b/Types/FileMatcher.hs
@@ -0,0 +1,40 @@
+{- git-annex file matcher types
+ -
+ - Copyright 2013 Joey Hess <joey@kitenet.net>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Types.FileMatcher where
+
+import Types.UUID (UUID)
+import Types.Key (Key)
+import Utility.Matcher (Matcher, Token)
+
+import qualified Data.Map as M
+import qualified Data.Set as S
+
+data MatchInfo
+ = MatchingFile FileInfo
+ | MatchingKey Key
+
+data FileInfo = FileInfo
+ { relFile :: FilePath -- may be relative to cwd
+ , matchFile :: FilePath -- filepath to match on; may be relative to top
+ }
+
+type FileMatcherMap a = M.Map UUID (Utility.Matcher.Matcher (S.Set UUID -> MatchInfo -> a Bool))
+
+type MkLimit a = String -> Either String (MatchFiles a)
+
+type AssumeNotPresent = S.Set UUID
+
+type MatchFiles a = AssumeNotPresent -> MatchInfo -> a Bool
+
+type FileMatcher a = Matcher (MatchFiles a)
+
+-- This is a matcher that can have tokens added to it while it's being
+-- built, and once complete is compiled to an unchangable matcher.
+data ExpandableMatcher a
+ = BuildingMatcher [Token (MatchInfo -> a Bool)]
+ | CompleteMatcher (Matcher (MatchInfo -> a Bool))