summaryrefslogtreecommitdiff
path: root/Command
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2013-12-15 14:46:29 -0400
committerGravatar Joey Hess <joey@kitenet.net>2013-12-15 14:52:09 -0400
commit0ca7ec1752419b9245373f5063c7c86e52ef2e9a (patch)
treed368bc5367f5549c75ddbed0bf10407ce66e41f5 /Command
parent3d1b94998a0aff3d08cf8648ae977614412e8138 (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.hs27
-rw-r--r--Command/Find.hs46
-rw-r--r--Command/LookupKey.hs2
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"]