Merge branch 'master' into assistant
This commit is contained in:
commit
e0a65247ae
5 changed files with 54 additions and 35 deletions
5
Git.hs
5
Git.hs
|
@ -19,6 +19,7 @@ module Git (
|
||||||
repoIsHttp,
|
repoIsHttp,
|
||||||
repoIsLocal,
|
repoIsLocal,
|
||||||
repoIsLocalBare,
|
repoIsLocalBare,
|
||||||
|
repoIsLocalUnknown,
|
||||||
repoDescribe,
|
repoDescribe,
|
||||||
repoLocation,
|
repoLocation,
|
||||||
repoPath,
|
repoPath,
|
||||||
|
@ -99,6 +100,10 @@ repoIsLocalBare :: Repo -> Bool
|
||||||
repoIsLocalBare Repo { location = Local { worktree = Nothing } } = True
|
repoIsLocalBare Repo { location = Local { worktree = Nothing } } = True
|
||||||
repoIsLocalBare _ = False
|
repoIsLocalBare _ = False
|
||||||
|
|
||||||
|
repoIsLocalUnknown :: Repo -> Bool
|
||||||
|
repoIsLocalUnknown Repo { location = LocalUnknown { } } = True
|
||||||
|
repoIsLocalUnknown _ = False
|
||||||
|
|
||||||
assertLocal :: Repo -> a -> a
|
assertLocal :: Repo -> a -> a
|
||||||
assertLocal repo action
|
assertLocal repo action
|
||||||
| repoIsUrl repo = error $ unwords
|
| repoIsUrl repo = error $ unwords
|
||||||
|
|
|
@ -75,7 +75,7 @@ byName' :: String -> Annex (Either String Remote)
|
||||||
byName' "" = return $ Left "no remote specified"
|
byName' "" = return $ Left "no remote specified"
|
||||||
byName' n = handle . filter matching <$> remoteList
|
byName' n = handle . filter matching <$> remoteList
|
||||||
where
|
where
|
||||||
handle [] = Left $ "there is no git remote named \"" ++ n ++ "\""
|
handle [] = Left $ "there is no available git remote named \"" ++ n ++ "\""
|
||||||
handle match = Right $ Prelude.head match
|
handle match = Right $ Prelude.head match
|
||||||
matching r = n == name r || toUUID n == uuid r
|
matching r = n == name r || toUUID n == uuid r
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,8 @@ remote = RemoteType {
|
||||||
list :: Annex [Git.Repo]
|
list :: Annex [Git.Repo]
|
||||||
list = do
|
list = do
|
||||||
c <- fromRepo Git.config
|
c <- fromRepo Git.config
|
||||||
mapM (tweakurl c) =<< fromRepo Git.remotes
|
rs <- mapM (tweakurl c) =<< fromRepo Git.remotes
|
||||||
|
catMaybes <$> mapM configread rs
|
||||||
where
|
where
|
||||||
annexurl n = "remote." ++ n ++ ".annexurl"
|
annexurl n = "remote." ++ n ++ ".annexurl"
|
||||||
tweakurl c r = do
|
tweakurl c r = do
|
||||||
|
@ -52,41 +53,47 @@ list = do
|
||||||
Just url -> inRepo $ \g ->
|
Just url -> inRepo $ \g ->
|
||||||
Git.Construct.remoteNamed n $
|
Git.Construct.remoteNamed n $
|
||||||
Git.Construct.fromRemoteLocation url g
|
Git.Construct.fromRemoteLocation url g
|
||||||
|
{- It's assumed to be cheap to read the config of non-URL
|
||||||
|
- remotes, so this is done each time git-annex is run
|
||||||
|
- in a way that uses remotes.
|
||||||
|
- Conversely, the config of an URL remote is only read
|
||||||
|
- when there is no cached UUID value. -}
|
||||||
|
configread r = do
|
||||||
|
notignored <- repoNotIgnored r
|
||||||
|
u <- getRepoUUID r
|
||||||
|
r' <- case (repoCheap r, notignored, u) of
|
||||||
|
(_, False, _) -> return r
|
||||||
|
(True, _, _) -> tryGitConfigRead r
|
||||||
|
(False, _, NoUUID) -> tryGitConfigRead r
|
||||||
|
_ -> return r
|
||||||
|
{- A repo with a LocalUnknown location is not currently
|
||||||
|
- accessible, so skip it. -}
|
||||||
|
if Git.repoIsLocalUnknown r'
|
||||||
|
then return Nothing
|
||||||
|
else return $ Just r'
|
||||||
|
|
||||||
|
repoCheap :: Git.Repo -> Bool
|
||||||
|
repoCheap = not . Git.repoIsUrl
|
||||||
|
|
||||||
gen :: Git.Repo -> UUID -> Maybe RemoteConfig -> Annex Remote
|
gen :: Git.Repo -> UUID -> Maybe RemoteConfig -> Annex Remote
|
||||||
gen r u _ = do
|
gen r u _ = new <$> remoteCost r defcst
|
||||||
{- It's assumed to be cheap to read the config of non-URL remotes,
|
where
|
||||||
- so this is done each time git-annex is run. Conversely,
|
defcst = if repoCheap r then cheapRemoteCost else expensiveRemoteCost
|
||||||
- the config of an URL remote is only read when there is no
|
new cst = Remote {
|
||||||
- cached UUID value. -}
|
uuid = u,
|
||||||
let cheap = not $ Git.repoIsUrl r
|
cost = cst,
|
||||||
notignored <- repoNotIgnored r
|
name = Git.repoDescribe r,
|
||||||
r' <- case (cheap, notignored, u) of
|
storeKey = copyToRemote r,
|
||||||
(_, False, _) -> return r
|
retrieveKeyFile = copyFromRemote r,
|
||||||
(True, _, _) -> tryGitConfigRead r
|
retrieveKeyFileCheap = copyFromRemoteCheap r,
|
||||||
(False, _, NoUUID) -> tryGitConfigRead r
|
removeKey = dropKey r,
|
||||||
_ -> return r
|
hasKey = inAnnex r,
|
||||||
|
hasKeyCheap = repoCheap r,
|
||||||
u' <- getRepoUUID r'
|
whereisKey = Nothing,
|
||||||
|
config = Nothing,
|
||||||
let defcst = if cheap then cheapRemoteCost else expensiveRemoteCost
|
repo = r,
|
||||||
cst <- remoteCost r' defcst
|
remotetype = remote
|
||||||
|
}
|
||||||
return Remote {
|
|
||||||
uuid = u',
|
|
||||||
cost = cst,
|
|
||||||
name = Git.repoDescribe r',
|
|
||||||
storeKey = copyToRemote r',
|
|
||||||
retrieveKeyFile = copyFromRemote r',
|
|
||||||
retrieveKeyFileCheap = copyFromRemoteCheap r',
|
|
||||||
removeKey = dropKey r',
|
|
||||||
hasKey = inAnnex r',
|
|
||||||
hasKeyCheap = cheap,
|
|
||||||
whereisKey = Nothing,
|
|
||||||
config = Nothing,
|
|
||||||
repo = r',
|
|
||||||
remotetype = remote
|
|
||||||
}
|
|
||||||
|
|
||||||
{- Tries to read the config for a specified remote, updates state, and
|
{- Tries to read the config for a specified remote, updates state, and
|
||||||
- returns the updated repo. -}
|
- returns the updated repo. -}
|
||||||
|
|
2
debian/changelog
vendored
2
debian/changelog
vendored
|
@ -3,6 +3,8 @@ git-annex (3.20120625) UNRELEASED; urgency=low
|
||||||
* cabal: Only try to use inotify on Linux.
|
* cabal: Only try to use inotify on Linux.
|
||||||
* Version build dependency on STM, and allow building without it,
|
* Version build dependency on STM, and allow building without it,
|
||||||
which disables the watch command.
|
which disables the watch command.
|
||||||
|
* Avoid ugly failure mode when moving content from a local repository
|
||||||
|
that is not available.
|
||||||
|
|
||||||
-- Joey Hess <joeyh@debian.org> Mon, 25 Jun 2012 11:38:12 -0400
|
-- Joey Hess <joeyh@debian.org> Mon, 25 Jun 2012 11:38:12 -0400
|
||||||
|
|
||||||
|
|
5
doc/bugs/undefined.mdwn
Normal file
5
doc/bugs/undefined.mdwn
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Trying to move files from a local remote that is not mounted:
|
||||||
|
|
||||||
|
git-annex: Prelude.undefined
|
||||||
|
|
||||||
|
> [[fixed|done]] --[[Joey]]
|
Loading…
Reference in a new issue