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). --- Annex/MetaData.hs | 17 ++++++----------- Annex/MetaData/StandardFields.hs | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 11 deletions(-) create mode 100644 Annex/MetaData/StandardFields.hs (limited to 'Annex') diff --git a/Annex/MetaData.hs b/Annex/MetaData.hs index 68aef33f1..f382f0ab1 100644 --- a/Annex/MetaData.hs +++ b/Annex/MetaData.hs @@ -5,11 +5,15 @@ - Licensed under the GNU GPL version 3 or higher. -} -module Annex.MetaData where +module Annex.MetaData ( + genMetaData, + module X +) where import Common.Annex import qualified Annex -import Types.MetaData +import Types.MetaData as X +import Annex.MetaData.StandardFields as X import Logs.MetaData import Annex.CatFile @@ -19,15 +23,6 @@ import Data.Time.Calendar import Data.Time.Clock import Data.Time.Clock.POSIX -tagMetaField :: MetaField -tagMetaField = mkMetaFieldUnchecked "tag" - -yearMetaField :: MetaField -yearMetaField = mkMetaFieldUnchecked "year" - -monthMetaField :: MetaField -monthMetaField = mkMetaFieldUnchecked "month" - {- Adds metadata for a file that has just been ingested into the - annex, but has not yet been committed to git. - diff --git a/Annex/MetaData/StandardFields.hs b/Annex/MetaData/StandardFields.hs new file mode 100644 index 000000000..00b810593 --- /dev/null +++ b/Annex/MetaData/StandardFields.hs @@ -0,0 +1,38 @@ +{- git-annex metadata, standard fields + - + - Copyright 2014 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Annex.MetaData.StandardFields ( + tagMetaField, + yearMetaField, + monthMetaField, + lastChangedField, + isLastChangedField +) where + +import Types.MetaData + +import Data.List + +tagMetaField :: MetaField +tagMetaField = mkMetaFieldUnchecked "tag" + +yearMetaField :: MetaField +yearMetaField = mkMetaFieldUnchecked "year" + +monthMetaField :: MetaField +monthMetaField = mkMetaFieldUnchecked "month" + +lastChangedField :: MetaField -> MetaField +lastChangedField f = mkMetaFieldUnchecked (fromMetaField f ++ lastchanged) + +isLastChangedField :: MetaField -> Bool +isLastChangedField f = lastchanged `isSuffixOf` s && s /= lastchanged + where + s = fromMetaField f + +lastchanged :: String +lastchanged = "-lastchanged" -- cgit v1.2.3