From 2402266d0d9731445af1876327a43795795d1a18 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 18 Mar 2014 18:55:43 -0400 Subject: 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). --- Types/MetaData.hs | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'Types') 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 -- cgit v1.2.3