aboutsummaryrefslogtreecommitdiff
path: root/Types/MetaData.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2014-03-18 18:55:43 -0400
committerGravatar Joey Hess <joey@kitenet.net>2014-03-18 18:55:43 -0400
commit2402266d0d9731445af1876327a43795795d1a18 (patch)
tree2f52191002e8ee79275c2f4e6070b057a61f9389 /Types/MetaData.hs
parent9adb236103d0b8f1db8110b40cc33b9fe5fda4ae (diff)
Each for each metadata field, there's now an automatically maintained "$field-lastchanged" that gives the timestamp of the last change to that field.
Note that this is a nearly entirely free feature. The data was already stored in the metadata log in an easily accessible way, and already was parsed to a time when parsing the log. The generation of the metadata fields may even be done lazily, although probably not entirely (the map has to be evaulated to when queried).
Diffstat (limited to 'Types/MetaData.hs')
-rw-r--r--Types/MetaData.hs4
1 files changed, 4 insertions, 0 deletions
diff --git a/Types/MetaData.hs b/Types/MetaData.hs
index c37b31c51..70b5bd840 100644
--- a/Types/MetaData.hs
+++ b/Types/MetaData.hs
@@ -28,6 +28,7 @@ module Types.MetaData (
emptyMetaData,
updateMetaData,
unionMetaData,
+ combineMetaData,
differenceMetaData,
isSet,
currentMetaData,
@@ -188,6 +189,9 @@ unionMetaData :: MetaData -> MetaData -> MetaData
unionMetaData (MetaData old) (MetaData new) = MetaData $
M.unionWith S.union new old
+combineMetaData :: [MetaData] -> MetaData
+combineMetaData = foldl' unionMetaData emptyMetaData
+
differenceMetaData :: MetaData -> MetaData -> MetaData
differenceMetaData (MetaData m) (MetaData excludem) = MetaData $
M.differenceWith diff m excludem