Don't try to import .git directories from special remotes

Because git does not support storing git repositories inside a git
repository.
This commit is contained in:
Joey Hess 2019-06-04 15:14:20 -04:00
parent 500f72ec3d
commit 082e1f1738
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
4 changed files with 32 additions and 1 deletions

View file

@ -16,6 +16,7 @@ module Annex.Import (
downloadImport,
filterImportableContents,
makeImportMatcher,
listImportableContents,
) where
import Annex.Common
@ -54,6 +55,7 @@ import qualified Logs.ContentIdentifier as CIDLog
import Control.Concurrent.STM
import qualified Data.Map.Strict as M
import qualified Data.Set as S
import qualified System.FilePath.Posix as Posix
{- Configures how to build an import tree. -}
data ImportTreeConfig
@ -480,3 +482,22 @@ filterImportableContents r matcher importable
<*> mapM (go dbhandle) (importableHistory ic)
match dbhandle (loc, (_cid, sz)) = shouldImport dbhandle matcher loc sz
{- Gets the ImportableContents from the remote.
-
- Filters out any paths that include a ".git" component, because git does
- not allow storing ".git" in a git repository. While it is possible to
- write a git tree that contains that, git will complain and refuse to
- check it out.
-}
listImportableContents :: Remote -> Annex (Maybe (ImportableContents (ContentIdentifier, ByteSize)))
listImportableContents r = fmap removegitspecial
<$> Remote.listImportableContents (Remote.importActions r)
where
removegitspecial ic = ImportableContents
{ importableContents =
filter (not . gitspecial . fst) (importableContents ic)
, importableHistory =
map removegitspecial (importableHistory ic)
}
gitspecial l = ".git" `elem` Posix.splitDirectories (fromImportLocation l)