summaryrefslogtreecommitdiff
path: root/Command/Whereis.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2012-02-14 03:49:48 -0400
committerGravatar Joey Hess <joey@kitenet.net>2012-02-14 03:49:48 -0400
commitcb631ce518b715e36cb3c476d576696f0630738f (patch)
treef7790f49e3b07eeb0ac86f7fa1b24d06eccbcd2e /Command/Whereis.hs
parent8fbc529d68feb1f40ac7dd44514ac387ba1237ed (diff)
whereis: Prints the urls of files that the web special remote knows about.
Diffstat (limited to 'Command/Whereis.hs')
-rw-r--r--Command/Whereis.hs28
1 files changed, 21 insertions, 7 deletions
diff --git a/Command/Whereis.hs b/Command/Whereis.hs
index 1fbe70799..f62d34642 100644
--- a/Command/Whereis.hs
+++ b/Command/Whereis.hs
@@ -7,6 +7,8 @@
module Command.Whereis where
+import qualified Data.Map as M
+
import Common.Annex
import Command
import Remote
@@ -17,24 +19,36 @@ def = [command "whereis" paramPaths seek
"lists repositories that have file content"]
seek :: [CommandSeek]
-seek = [withFilesInGit $ whenAnnexed start]
+seek = [withValue (remoteMap id) $ \m ->
+ withFilesInGit $ whenAnnexed $ start m]
-start :: FilePath -> (Key, Backend) -> CommandStart
-start file (key, _) = do
+start :: (M.Map UUID Remote) -> FilePath -> (Key, Backend) -> CommandStart
+start remotemap file (key, _) = do
showStart "whereis" file
- next $ perform key
+ next $ perform remotemap key
-perform :: Key -> CommandPerform
-perform key = do
- (untrustedlocations, safelocations) <- trustPartition UnTrusted =<< keyLocations key
+perform :: (M.Map UUID Remote) -> Key -> CommandPerform
+perform remotemap key = do
+ locations <- keyLocations key
+ (untrustedlocations, safelocations) <- trustPartition UnTrusted locations
let num = length safelocations
showNote $ show num ++ " " ++ copiesplural num
pp <- prettyPrintUUIDs "whereis" safelocations
unless (null safelocations) $ showLongNote pp
pp' <- prettyPrintUUIDs "untrusted" untrustedlocations
unless (null untrustedlocations) $ showLongNote $ untrustedheader ++ pp'
+ forM_ (catMaybes $ map (`M.lookup` remotemap) locations) $
+ performRemote key
if null safelocations then stop else next $ return True
where
copiesplural 1 = "copy"
copiesplural _ = "copies"
untrustedheader = "The following untrusted locations may also have copies:\n"
+
+performRemote :: Key -> Remote -> Annex ()
+performRemote key remote = case whereisKey remote of
+ Nothing -> return ()
+ Just a -> do
+ ls <- a key
+ unless (null ls) $ showLongNote $
+ unlines $ map (\l -> name remote ++ ": " ++ l) ls