metadata: Add --get (from bremner)
This commit is contained in:
parent
34c6720bdf
commit
8bcd67b9d8
4 changed files with 29 additions and 8 deletions
|
@ -73,6 +73,8 @@ paramNumRange :: String
|
||||||
paramNumRange = "NUM|RANGE"
|
paramNumRange = "NUM|RANGE"
|
||||||
paramRemote :: String
|
paramRemote :: String
|
||||||
paramRemote = "REMOTE"
|
paramRemote = "REMOTE"
|
||||||
|
paramField :: String
|
||||||
|
paramField = "FIELD"
|
||||||
paramGlob :: String
|
paramGlob :: String
|
||||||
paramGlob = "GLOB"
|
paramGlob = "GLOB"
|
||||||
paramName :: String
|
paramName :: String
|
||||||
|
|
|
@ -18,7 +18,7 @@ import qualified Data.Set as S
|
||||||
import Data.Time.Clock.POSIX
|
import Data.Time.Clock.POSIX
|
||||||
|
|
||||||
def :: [Command]
|
def :: [Command]
|
||||||
def = [withOptions [setOption, tagOption, untagOption, jsonOption] $
|
def = [withOptions [setOption, tagOption, untagOption, getOption, jsonOption] $
|
||||||
command "metadata" paramPaths seek
|
command "metadata" paramPaths seek
|
||||||
SectionMetaData "sets metadata of a file"]
|
SectionMetaData "sets metadata of a file"]
|
||||||
|
|
||||||
|
@ -31,6 +31,9 @@ setOption = Option ['s'] ["set"] (ReqArg mkmod "FIELD[+-]=VALUE") "set metadata"
|
||||||
where
|
where
|
||||||
mkmod = either error storeModMeta . parseModMeta
|
mkmod = either error storeModMeta . parseModMeta
|
||||||
|
|
||||||
|
getOption :: Option
|
||||||
|
getOption = fieldOption ['g'] "get" paramField "get single metadata field"
|
||||||
|
|
||||||
tagOption :: Option
|
tagOption :: Option
|
||||||
tagOption = Option ['t'] ["tag"] (ReqArg mkmod "TAG") "set a tag"
|
tagOption = Option ['t'] ["tag"] (ReqArg mkmod "TAG") "set a tag"
|
||||||
where
|
where
|
||||||
|
@ -44,13 +47,20 @@ untagOption = Option ['u'] ["untag"] (ReqArg mkmod "TAG") "remove a tag"
|
||||||
seek :: CommandSeek
|
seek :: CommandSeek
|
||||||
seek ps = do
|
seek ps = do
|
||||||
modmeta <- Annex.getState Annex.modmeta
|
modmeta <- Annex.getState Annex.modmeta
|
||||||
|
getfield <- getOptionField getOption $ \ms ->
|
||||||
|
return $ either error id . mkMetaField <$> ms
|
||||||
now <- liftIO getPOSIXTime
|
now <- liftIO getPOSIXTime
|
||||||
withFilesInGit (whenAnnexed $ start now modmeta) ps
|
withFilesInGit (whenAnnexed $ start now getfield modmeta) ps
|
||||||
|
|
||||||
start :: POSIXTime -> [ModMeta] -> FilePath -> (Key, Backend) -> CommandStart
|
start :: POSIXTime -> Maybe MetaField -> [ModMeta] -> FilePath -> (Key, Backend) -> CommandStart
|
||||||
start now ms file (k, _) = do
|
start now Nothing ms file (k, _) = do
|
||||||
showStart "metadata" file
|
showStart "metadata" file
|
||||||
next $ perform now ms k
|
next $ perform now ms k
|
||||||
|
start _ (Just f) _ _ (k, _) = do
|
||||||
|
l <- S.toList . currentMetaDataValues f <$> getCurrentMetaData k
|
||||||
|
liftIO $ forM_ l $
|
||||||
|
putStrLn . fromMetaValue
|
||||||
|
stop
|
||||||
|
|
||||||
perform :: POSIXTime -> [ModMeta] -> Key -> CommandPerform
|
perform :: POSIXTime -> [ModMeta] -> Key -> CommandPerform
|
||||||
perform _ [] k = next $ cleanup k
|
perform _ [] k = next $ cleanup k
|
||||||
|
|
1
debian/changelog
vendored
1
debian/changelog
vendored
|
@ -22,6 +22,7 @@ git-annex (5.20140307) UNRELEASED; urgency=medium
|
||||||
* Avoid encoding errors when using the unused log file.
|
* Avoid encoding errors when using the unused log file.
|
||||||
* vicfg: Allows editing preferred content expressions for groups.
|
* vicfg: Allows editing preferred content expressions for groups.
|
||||||
* groupwanted can be used in preferred content expressions.
|
* groupwanted can be used in preferred content expressions.
|
||||||
|
* metadata: Add --get
|
||||||
|
|
||||||
-- Joey Hess <joeyh@debian.org> Thu, 06 Mar 2014 16:17:01 -0400
|
-- Joey Hess <joeyh@debian.org> Thu, 06 Mar 2014 16:17:01 -0400
|
||||||
|
|
||||||
|
|
|
@ -705,12 +705,20 @@ subdirectories).
|
||||||
|
|
||||||
# METADATA COMMANDS
|
# METADATA COMMANDS
|
||||||
|
|
||||||
* `metadata [path ...] [-s field=value -s field+=value -s field-=value ...]`
|
* `metadata [path ...] [-s field=value -s field+=value -s field-=value ...] [-g field]`
|
||||||
|
|
||||||
Each file can have any number of metadata fields attached to it,
|
Each file can have any number of metadata fields attached to it,
|
||||||
which each in turn have any number of values. This sets metadata
|
which each in turn have any number of values.
|
||||||
for the specified file or files, or if run without any values, shows
|
|
||||||
the current metadata.
|
This command can be used to set metadata, or show the currently set
|
||||||
|
metadata.
|
||||||
|
|
||||||
|
To show current metadata, run without any -s parameters. The --json
|
||||||
|
option will enable json output.
|
||||||
|
|
||||||
|
To only get the value(s) of a single field, use -g field.
|
||||||
|
The values will be output one per line, with no other output, so
|
||||||
|
this is suitable for use in a script.
|
||||||
|
|
||||||
To set a field's value, removing any old value(s), use -s field=value.
|
To set a field's value, removing any old value(s), use -s field=value.
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue