diff options
author | Joey Hess <joey@kitenet.net> | 2013-12-15 14:46:29 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2013-12-15 14:52:09 -0400 |
commit | 0ca7ec1752419b9245373f5063c7c86e52ef2e9a (patch) | |
tree | d368bc5367f5549c75ddbed0bf10407ce66e41f5 /Command | |
parent | 3d1b94998a0aff3d08cf8648ae977614412e8138 (diff) |
Add plumbing-level lookupkey examinekey command.
find --format: Added hashdirlower, hashdirmixed, keyname, and mtime format
variables.
Diffstat (limited to 'Command')
-rw-r--r-- | Command/ExamineKey.hs | 27 | ||||
-rw-r--r-- | Command/Find.hs | 46 | ||||
-rw-r--r-- | Command/LookupKey.hs | 2 |
3 files changed, 56 insertions, 19 deletions
diff --git a/Command/ExamineKey.hs b/Command/ExamineKey.hs new file mode 100644 index 000000000..7dfdadd3d --- /dev/null +++ b/Command/ExamineKey.hs @@ -0,0 +1,27 @@ +{- git-annex command + - + - Copyright 2013 Joey Hess <joey@kitenet.net> + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Command.ExamineKey where + +import Common.Annex +import Command +import qualified Utility.Format +import Command.Find (formatOption, withFormat, showFormatted, keyVars) +import Types.Key + +def :: [Command] +def = [noCommit $ noMessages $ withOptions [formatOption] $ + command "examinekey" (paramRepeating paramKey) seek + SectionPlumbing "prints information from a key"] + +seek :: [CommandSeek] +seek = [withFormat $ \f -> withKeys $ start f] + +start :: Maybe Utility.Format.Format -> Key -> CommandStart +start format key = do + showFormatted format (key2file key) (keyVars key) + stop diff --git a/Command/Find.hs b/Command/Find.hs index 4b8c7ce0e..0591e657e 100644 --- a/Command/Find.hs +++ b/Command/Find.hs @@ -26,6 +26,9 @@ def = [noCommit $ noMessages $ withOptions [formatOption, print0Option] $ formatOption :: Option formatOption = Option.field [] "format" paramFormat "control format of output" +withFormat :: (Maybe Utility.Format.Format -> CommandSeek) -> CommandSeek +withFormat = withField formatOption $ return . fmap Utility.Format.gen + print0Option :: Option print0Option = Option.Option [] ["print0"] (Option.NoArg set) "terminate output with null" @@ -33,29 +36,36 @@ print0Option = Option.Option [] ["print0"] (Option.NoArg set) set = Annex.setField (Option.name formatOption) "${file}\0" seek :: [CommandSeek] -seek = [withField formatOption formatconverter $ \f -> - withFilesInGit $ whenAnnexed $ start f] - where - formatconverter = return . fmap Utility.Format.gen +seek = [withFormat $ \f -> withFilesInGit $ whenAnnexed $ start f] start :: Maybe Utility.Format.Format -> FilePath -> (Key, Backend) -> CommandStart start format file (key, _) = do -- only files inAnnex are shown, unless the user has requested -- others via a limit whenM (limited <||> inAnnex key) $ - unlessM (showFullJSON vars) $ - case format of - Nothing -> liftIO $ putStrLn file - Just formatter -> liftIO $ putStr $ - Utility.Format.format formatter $ - M.fromList vars + showFormatted format file $ ("file", file) : keyVars key stop + +showFormatted :: Maybe Utility.Format.Format -> String -> [(String, String)] -> Annex () +showFormatted format unformatted vars = + unlessM (showFullJSON vars) $ + case format of + Nothing -> liftIO $ putStrLn unformatted + Just formatter -> liftIO $ putStr $ + Utility.Format.format formatter $ + M.fromList vars + +keyVars :: Key -> [(String, String)] +keyVars key = + [ ("key", key2file key) + , ("backend", keyBackendName key) + , ("bytesize", size show) + , ("humansize", size $ roughSize storageUnits True) + , ("keyname", keyName key) + , ("hashdirlower", hashDirLower key) + , ("hashdirmixed", hashDirMixed key) + , ("mtime", whenavail show $ keyMtime key) + ] where - vars = - [ ("file", file) - , ("key", key2file key) - , ("backend", keyBackendName key) - , ("bytesize", size show) - , ("humansize", size $ roughSize storageUnits True) - ] - size c = maybe "unknown" c $ keySize key + size c = whenavail c $ keySize key + whenavail = maybe "unknown" diff --git a/Command/LookupKey.hs b/Command/LookupKey.hs index 7964213fe..aa83266cb 100644 --- a/Command/LookupKey.hs +++ b/Command/LookupKey.hs @@ -13,7 +13,7 @@ import Annex.CatFile import Types.Key def :: [Command] -def = [notBareRepo $ +def = [notBareRepo $ noCommit $ noMessages $ command "lookupkey" (paramRepeating paramFile) seek SectionPlumbing "looks up key used for file"] |