pre-commit-annex hook script to automatically extract metadata from lots of types of files
Using the extract(1) program to do the heavy lifting. Decided to make git-annex run pre-commit-annex when committing. Since git-annex pre-commit also runs it, it'll be run when git commit is run too, via the pre-commit hook. This basically gives back the pre-commit hook that git-annex took away. The implementation avoids repeatedly looking for the hook script when the assistant is running and committing repeatedly; only checks if the hook is available once. To make the script simpler, made git-annex metadata -s field?=value only set a field when it's not already got a value. This commit was sponsored by bak.
This commit is contained in:
parent
34059c09e2
commit
d0fce426c4
12 changed files with 152 additions and 16 deletions
|
@ -219,6 +219,7 @@ data ModMeta
|
|||
= AddMeta MetaField MetaValue
|
||||
| DelMeta MetaField MetaValue
|
||||
| SetMeta MetaField MetaValue -- removes any existing values
|
||||
| MaybeSetMeta MetaField MetaValue -- when field has no existing value
|
||||
|
||||
{- Applies a ModMeta, generating the new MetaData.
|
||||
- Note that the new MetaData does not include all the
|
||||
|
@ -229,12 +230,16 @@ modMeta _ (DelMeta f oldv) = updateMetaData f (unsetMetaValue oldv) emptyMetaDat
|
|||
modMeta m (SetMeta f v) = updateMetaData f v $
|
||||
foldr (updateMetaData f) emptyMetaData $
|
||||
map unsetMetaValue $ S.toList $ currentMetaDataValues f m
|
||||
modMeta m (MaybeSetMeta f v)
|
||||
| S.null (currentMetaDataValues f m) = updateMetaData f v emptyMetaData
|
||||
| otherwise = emptyMetaData
|
||||
|
||||
{- Parses field=value, field+=value, field-=value -}
|
||||
{- 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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue