summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2010-10-31 23:21:16 -0400
committerGravatar Joey Hess <joey@kitenet.net>2010-10-31 23:21:16 -0400
commitf3e4633e359d0a4afc7a0f90a89e4d276b597d84 (patch)
tree4c90c61c6ce6f09f546a5e412d8c23f82de67013
parent0194394be61dba0324a5a99f462aa2206066771c (diff)
refactor inAnnex remote checking to Remotes
-rw-r--r--Core.hs13
-rw-r--r--Remotes.hs20
2 files changed, 18 insertions, 15 deletions
diff --git a/Core.hs b/Core.hs
index e2e6eaa0c..ab7291aff 100644
--- a/Core.hs
+++ b/Core.hs
@@ -86,19 +86,12 @@ gitPreCommitHook repo = do
p <- getPermissions hook
setPermissions hook $ p {executable = True}
-{- Checks if a given key is currently present in the annexLocation.
- -
- - This can be run against a remote repository to check the key there. -}
+{- Checks if a given key is currently present in the annexLocation. -}
inAnnex :: Key -> Annex Bool
inAnnex key = do
g <- Annex.gitRepo
- if (not $ Git.repoIsUrl g)
- then liftIO $ doesFileExist $ annexLocation g key
- else do
- showNote ("checking " ++ Git.repoDescribe g ++ "...")
- liftIO $ boolSystem "ssh" [Git.urlHost g,
- "test -e " ++
- (shellEscape $ annexLocation g key)]
+ when (Git.repoIsUrl g) $ error "inAnnex cannot check remote repo"
+ liftIO $ doesFileExist $ annexLocation g key
{- Calculates the relative path to use to link a file to a key. -}
calcGitLink :: FilePath -> Key -> Annex FilePath
diff --git a/Remotes.hs b/Remotes.hs
index 778ad89e2..a01da7d48 100644
--- a/Remotes.hs
+++ b/Remotes.hs
@@ -81,14 +81,24 @@ keyPossibilities key = do
- If the remote cannot be accessed, returns a Left error.
-}
inAnnex :: Git.Repo -> Key -> Annex (Either IOException Bool)
-inAnnex remote key = do
- -- the check needs to run in an Annex monad using the remote
- liftIO $ ((try $ check)::IO (Either IOException Bool))
+inAnnex r key = do
+ if (not $ Git.repoIsUrl r)
+ then check local
+ else do
+ Core.showNote ("checking " ++ Git.repoDescribe r ++ "...")
+ check remote
where
- check = do
- a <- Annex.new remote []
+ check a = liftIO $ ((try a)::IO (Either IOException Bool))
+ local = do
+ -- run a local check by making an Annex monad
+ -- using the remote
+ a <- Annex.new r []
(result, _) <- Annex.run a (Core.inAnnex key)
return result
+ remote = do
+ -- remote check via ssh in and test
+ boolSystem "ssh" [Git.urlHost r, "test -e " ++
+ (shellEscape $ annexLocation r key)]
{- Cost Ordered list of remotes. -}
remotesByCost :: Annex [Git.Repo]