map: Fix crash when one of the remotes of a repo is a local directory that does not exist, or is not a git repo.
This commit is contained in:
parent
46a6396778
commit
fb9ddfa231
3 changed files with 15 additions and 8 deletions
|
@ -158,7 +158,8 @@ absRepo reference r
|
||||||
| Git.repoIsUrl r = return r
|
| Git.repoIsUrl r = return r
|
||||||
| otherwise = liftIO $ do
|
| otherwise = liftIO $ do
|
||||||
r' <- Git.Construct.fromAbsPath =<< absPath (Git.repoPath r)
|
r' <- Git.Construct.fromAbsPath =<< absPath (Git.repoPath r)
|
||||||
flip Annex.eval Annex.gitRepo =<< Annex.new r'
|
r'' <- safely $ flip Annex.eval Annex.gitRepo =<< Annex.new r'
|
||||||
|
return (fromMaybe r' r'')
|
||||||
|
|
||||||
{- Checks if two repos are the same. -}
|
{- Checks if two repos are the same. -}
|
||||||
same :: Git.Repo -> Git.Repo -> Bool
|
same :: Git.Repo -> Git.Repo -> Bool
|
||||||
|
@ -192,14 +193,9 @@ tryScan :: Git.Repo -> Annex (Maybe Git.Repo)
|
||||||
tryScan r
|
tryScan r
|
||||||
| Git.repoIsSsh r = sshscan
|
| Git.repoIsSsh r = sshscan
|
||||||
| Git.repoIsUrl r = return Nothing
|
| Git.repoIsUrl r = return Nothing
|
||||||
| otherwise = safely $ Git.Config.read r
|
| otherwise = liftIO $ safely $ Git.Config.read r
|
||||||
where
|
where
|
||||||
safely a = do
|
pipedconfig cmd params = liftIO $ safely $
|
||||||
result <- liftIO (try a :: IO (Either SomeException Git.Repo))
|
|
||||||
case result of
|
|
||||||
Left _ -> return Nothing
|
|
||||||
Right r' -> return $ Just r'
|
|
||||||
pipedconfig cmd params = safely $
|
|
||||||
withHandle StdoutHandle createProcessSuccess p $
|
withHandle StdoutHandle createProcessSuccess p $
|
||||||
Git.Config.hRead r
|
Git.Config.hRead r
|
||||||
where
|
where
|
||||||
|
@ -247,3 +243,10 @@ combineSame = map snd . nubBy sameuuid . map pair
|
||||||
where
|
where
|
||||||
sameuuid (u1, _) (u2, _) = u1 == u2 && u1 /= NoUUID
|
sameuuid (u1, _) (u2, _) = u1 == u2 && u1 /= NoUUID
|
||||||
pair r = (getUncachedUUID r, r)
|
pair r = (getUncachedUUID r, r)
|
||||||
|
|
||||||
|
safely :: IO Git.Repo -> IO (Maybe Git.Repo)
|
||||||
|
safely a = do
|
||||||
|
result <- try a :: IO (Either SomeException Git.Repo)
|
||||||
|
case result of
|
||||||
|
Left _ -> return Nothing
|
||||||
|
Right r' -> return $ Just r'
|
||||||
|
|
2
debian/changelog
vendored
2
debian/changelog
vendored
|
@ -24,6 +24,8 @@ git-annex (5.20140307) UNRELEASED; urgency=medium
|
||||||
* groupwanted can be used in preferred content expressions.
|
* groupwanted can be used in preferred content expressions.
|
||||||
* metadata: Add --get
|
* metadata: Add --get
|
||||||
* metadata: Support --key option (and some other ones like --all)
|
* metadata: Support --key option (and some other ones like --all)
|
||||||
|
* map: Fix crash when one of the remotes of a repo is a local directory
|
||||||
|
that does not exist, or is not a git repo.
|
||||||
|
|
||||||
-- Joey Hess <joeyh@debian.org> Thu, 06 Mar 2014 16:17:01 -0400
|
-- Joey Hess <joeyh@debian.org> Thu, 06 Mar 2014 16:17:01 -0400
|
||||||
|
|
||||||
|
|
|
@ -33,3 +33,5 @@ git-annex: user error (git ["config","--null","--list"] exited 126)
|
||||||
failed
|
failed
|
||||||
git-annex: map: 1 failed
|
git-annex: map: 1 failed
|
||||||
"""]]
|
"""]]
|
||||||
|
|
||||||
|
> [[fixed|done]] --[[Joey]]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue