diff options
author | Joey Hess <joeyh@joeyh.name> | 2017-09-28 12:36:10 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2017-09-28 12:36:10 -0400 |
commit | 5b3ff3fb3c8c4191e0d0a7653014d0b5fd9a0120 (patch) | |
tree | c92045726b3768319d060a53459b46ae73ff445f /Types | |
parent | 212d9db545ef30fd42bfb6848cef37a36976cc17 (diff) |
metadata: Added --remove-all.
Motivation is to remove all metadata when it gets copied from a previous
version of the file, and that is not deisrable.
This commit was supported by the NSF-funded DataLad project.
Diffstat (limited to 'Types')
-rw-r--r-- | Types/MetaData.hs | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/Types/MetaData.hs b/Types/MetaData.hs index 9e153ffb9..bc27c345f 100644 --- a/Types/MetaData.hs +++ b/Types/MetaData.hs @@ -244,12 +244,17 @@ removeEmptyFields (MetaData m) = MetaData $ M.filter (not . S.null) m metaDataValues :: MetaField -> MetaData -> S.Set MetaValue metaDataValues f (MetaData m) = fromMaybe S.empty (M.lookup f m) +mapMetaData :: (S.Set MetaValue -> S.Set MetaValue) -> MetaData -> MetaData +mapMetaData f (MetaData m) = MetaData (M.map f m) + {- Ways that existing metadata can be modified -} data ModMeta = AddMeta MetaField MetaValue | DelMeta MetaField (Maybe MetaValue) -- ^ delete value of a field. With Just, only that specific value - -- is deleted; with Nothing, all current values are deleted. + -- is deleted; with Nothing, all current values are deleted.a + | DelAllMeta + -- ^ delete all currently set metadata | SetMeta MetaField (S.Set MetaValue) -- ^ removes any existing values | MaybeSetMeta MetaField MetaValue @@ -265,6 +270,9 @@ modMeta _ (DelMeta f (Just oldv)) = updateMetaData f (unsetMetaValue oldv) emptyMetaData modMeta m (DelMeta f Nothing) = MetaData $ M.singleton f $ S.fromList $ map unsetMetaValue $ S.toList $ currentMetaDataValues f m +modMeta m DelAllMeta = mapMetaData + (S.fromList . map unsetMetaValue . S.toList) + (currentMetaData m) modMeta m (SetMeta f s) = updateMetaData' f s $ foldr (updateMetaData f) emptyMetaData $ map unsetMetaValue $ S.toList $ currentMetaDataValues f m |