diff options
author | Joey Hess <joey@kitenet.net> | 2014-02-23 00:08:29 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2014-02-23 00:08:29 -0400 |
commit | 704fa2fa789b453d354f2f375b0b42481c8990f6 (patch) | |
tree | afb28b2548c067be546b22fa6b04fa8b5d76c3fd /Annex/MetaData.hs | |
parent | e0ae2f6bba897367ae23bfb1a6584ebd4843452e (diff) |
annex.genmetadata can be set to make git-annex automatically set metadata (year and month) when adding files
Diffstat (limited to 'Annex/MetaData.hs')
-rw-r--r-- | Annex/MetaData.hs | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/Annex/MetaData.hs b/Annex/MetaData.hs new file mode 100644 index 000000000..ef235b51f --- /dev/null +++ b/Annex/MetaData.hs @@ -0,0 +1,51 @@ +{- git-annex metadata + - + - Copyright 2014 Joey Hess <joey@kitenet.net> + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Annex.MetaData where + +import Common.Annex +import qualified Annex +import Types.MetaData +import Logs.MetaData + +import qualified Data.Set as S +import qualified Data.Map as M +import Data.Time.Calendar +import Data.Time.Clock +import Data.Time.Clock.POSIX + +tagMetaField :: MetaField +tagMetaField = MetaField "tag" + +yearMetaField :: MetaField +yearMetaField = MetaField "year" + +monthMetaField :: MetaField +monthMetaField = MetaField "month" + +{- Generates metadata for a file that has just been ingested into the + - annex. Passed the FileStatus of the content file. + - + - Does not overwrite any existing metadata values for the key. + -} +genMetaData :: Key -> FileStatus -> Annex () +genMetaData key status = whenM (annexGenMetaData <$> Annex.getGitConfig) $ do + metadata <- getCurrentMetaData key + let metadata' = genMetaData' status metadata + unless (metadata' == emptyMetaData) $ + addMetaData key metadata' + +genMetaData' :: FileStatus -> MetaData -> MetaData +genMetaData' status old = MetaData $ M.fromList $ filter isnew + [ (yearMetaField, S.singleton $ toMetaValue $ show y) + , (monthMetaField, S.singleton $ toMetaValue $ show m) + ] + where + isnew (f, _) = S.null (currentMetaDataValues f old) + (y, m, _d) = toGregorian $ utctDay $ + posixSecondsToUTCTime $ realToFrac $ + modificationTime status |