Support --metadata field<number, --metadata field>number etc to match ranges of numeric values.

Similarly (well, for free), support preferred content expressions like
metadata=field<number and metadata=field>number
This commit is contained in:
Joey Hess 2016-02-27 10:55:02 -04:00
parent 01f1de0c3c
commit b946ca44c3
Failed to extract signature
8 changed files with 67 additions and 30 deletions

View file

@ -36,8 +36,6 @@ module Types.MetaData (
metaDataValues,
ModMeta(..),
modMeta,
parseModMeta,
parseMetaData,
prop_metadata_sane,
prop_metadata_serialize
) where
@ -239,26 +237,6 @@ modMeta m (MaybeSetMeta f v)
| S.null (currentMetaDataValues f m) = updateMetaData f v emptyMetaData
| otherwise = emptyMetaData
{- Parses field=value, field+=value, field-=value, field?=value -}
parseModMeta :: String -> Either String ModMeta
parseModMeta p = case lastMaybe f of
Just '+' -> AddMeta <$> mkMetaField f' <*> v
Just '-' -> DelMeta <$> mkMetaField f' <*> v
Just '?' -> MaybeSetMeta <$> mkMetaField f' <*> v
_ -> SetMeta <$> mkMetaField f <*> v
where
(f, sv) = separate (== '=') p
f' = beginning f
v = pure (toMetaValue sv)
{- Parses field=value -}
parseMetaData :: String -> Either String (MetaField, MetaValue)
parseMetaData p = (,)
<$> mkMetaField f
<*> pure (toMetaValue v)
where
(f, v) = separate (== '=') p
{- Avoid putting too many fields in the map; extremely large maps make
- the seriaization test slow due to the sheer amount of data.
- It's unlikely that more than 100 fields of metadata will be used. -}