diff options
Diffstat (limited to 'Remote')
-rw-r--r-- | Remote/BitTorrent.hs | 4 | ||||
-rw-r--r-- | Remote/Bup.hs | 2 | ||||
-rw-r--r-- | Remote/Ddar.hs | 2 | ||||
-rw-r--r-- | Remote/Directory.hs | 2 | ||||
-rw-r--r-- | Remote/External.hs | 2 | ||||
-rw-r--r-- | Remote/GCrypt.hs | 2 | ||||
-rw-r--r-- | Remote/Git.hs | 25 | ||||
-rw-r--r-- | Remote/Glacier.hs | 2 | ||||
-rw-r--r-- | Remote/Hook.hs | 2 | ||||
-rw-r--r-- | Remote/List.hs | 19 | ||||
-rw-r--r-- | Remote/Rsync.hs | 2 | ||||
-rw-r--r-- | Remote/S3.hs | 2 | ||||
-rw-r--r-- | Remote/Tahoe.hs | 2 | ||||
-rw-r--r-- | Remote/Web.hs | 4 | ||||
-rw-r--r-- | Remote/WebDAV.hs | 2 |
15 files changed, 42 insertions, 32 deletions
diff --git a/Remote/BitTorrent.hs b/Remote/BitTorrent.hs index a4ec11bf1..d3963a918 100644 --- a/Remote/BitTorrent.hs +++ b/Remote/BitTorrent.hs @@ -43,8 +43,8 @@ remote = RemoteType { } -- There is only one bittorrent remote, and it always exists. -list :: Annex [Git.Repo] -list = do +list :: Bool -> Annex [Git.Repo] +list _autoinit = do r <- liftIO $ Git.Construct.remoteNamed "bittorrent" (pure Git.Construct.fromUnknown) return [r] diff --git a/Remote/Bup.hs b/Remote/Bup.hs index 0c156345e..92ff7ab68 100644 --- a/Remote/Bup.hs +++ b/Remote/Bup.hs @@ -36,7 +36,7 @@ type BupRepo = String remote :: RemoteType remote = RemoteType { typename = "bup", - enumerate = findSpecialRemotes "buprepo", + enumerate = const (findSpecialRemotes "buprepo"), generate = gen, setup = bupSetup } diff --git a/Remote/Ddar.hs b/Remote/Ddar.hs index a24960935..b616093a3 100644 --- a/Remote/Ddar.hs +++ b/Remote/Ddar.hs @@ -31,7 +31,7 @@ data DdarRepo = DdarRepo remote :: RemoteType remote = RemoteType { typename = "ddar", - enumerate = findSpecialRemotes "ddarrepo", + enumerate = const (findSpecialRemotes "ddarrepo"), generate = gen, setup = ddarSetup } diff --git a/Remote/Directory.hs b/Remote/Directory.hs index c0bbcf544..ab4137d75 100644 --- a/Remote/Directory.hs +++ b/Remote/Directory.hs @@ -33,7 +33,7 @@ import Utility.Metered remote :: RemoteType remote = RemoteType { typename = "directory", - enumerate = findSpecialRemotes "directory", + enumerate = const (findSpecialRemotes "directory"), generate = gen, setup = directorySetup } diff --git a/Remote/External.hs b/Remote/External.hs index d09e1f9b3..6c36d879a 100644 --- a/Remote/External.hs +++ b/Remote/External.hs @@ -34,7 +34,7 @@ import qualified Data.Map as M remote :: RemoteType remote = RemoteType { typename = "external", - enumerate = findSpecialRemotes "externaltype", + enumerate = const (findSpecialRemotes "externaltype"), generate = gen, setup = externalSetup } diff --git a/Remote/GCrypt.hs b/Remote/GCrypt.hs index 8a1dcc41a..51dfed4f4 100644 --- a/Remote/GCrypt.hs +++ b/Remote/GCrypt.hs @@ -54,7 +54,7 @@ remote = RemoteType { typename = "gcrypt", -- Remote.Git takes care of enumerating gcrypt remotes too, -- and will call our gen on them. - enumerate = return [], + enumerate = const (return []), generate = gen, setup = gCryptSetup } diff --git a/Remote/Git.hs b/Remote/Git.hs index 5ac79df6d..4505c14ff 100644 --- a/Remote/Git.hs +++ b/Remote/Git.hs @@ -67,11 +67,11 @@ remote = RemoteType { setup = gitSetup } -list :: Annex [Git.Repo] -list = do +list :: Bool -> Annex [Git.Repo] +list autoinit = do c <- fromRepo Git.config rs <- mapM (tweakurl c) =<< fromRepo Git.remotes - mapM configRead rs + mapM (configRead autoinit) rs where annexurl n = "remote." ++ n ++ ".annexurl" tweakurl c r = do @@ -116,14 +116,14 @@ gitSetup (Just u) _ c = do - - Conversely, the config of an URL remote is only read when there is no - cached UUID value. -} -configRead :: Git.Repo -> Annex Git.Repo -configRead r = do +configRead :: Bool -> Git.Repo -> Annex Git.Repo +configRead autoinit r = do gc <- Annex.getRemoteGitConfig r u <- getRepoUUID r case (repoCheap r, remoteAnnexIgnore gc, u) of (_, True, _) -> return r - (True, _, _) -> tryGitConfigRead r - (False, _, NoUUID) -> tryGitConfigRead r + (True, _, _) -> tryGitConfigRead autoinit r + (False, _, NoUUID) -> tryGitConfigRead autoinit r _ -> return r gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote) @@ -196,11 +196,12 @@ repoAvail r {- Tries to read the config for a specified remote, updates state, and - returns the updated repo. -} -tryGitConfigRead :: Git.Repo -> Annex Git.Repo -tryGitConfigRead r +tryGitConfigRead :: Bool -> Git.Repo -> Annex Git.Repo +tryGitConfigRead autoinit r | haveconfig r = return r -- already read | Git.repoIsSsh r = store $ do - v <- Ssh.onRemote r (pipedconfig, return (Left $ error "configlist failed")) "configlist" [] [] + liftIO $ print autoinit + v <- Ssh.onRemote r (pipedconfig, return (Left $ error "configlist failed")) "configlist" [] configlistfields case v of Right r' | haveconfig r' -> return r' @@ -302,6 +303,10 @@ tryGitConfigRead r Annex.BranchState.disableUpdate void $ tryNonAsync $ ensureInitialized Annex.getState Annex.repo + + configlistfields = if autoinit + then [(Fields.autoInit, "1")] + else [] {- Checks if a given remote has the content for a key in its annex. -} inAnnex :: Remote -> Key -> Annex Bool diff --git a/Remote/Glacier.hs b/Remote/Glacier.hs index 75b264bac..98b7d6fad 100644 --- a/Remote/Glacier.hs +++ b/Remote/Glacier.hs @@ -31,7 +31,7 @@ type Archive = FilePath remote :: RemoteType remote = RemoteType { typename = "glacier", - enumerate = findSpecialRemotes "glacier", + enumerate = const (findSpecialRemotes "glacier"), generate = gen, setup = glacierSetup } diff --git a/Remote/Hook.hs b/Remote/Hook.hs index 9abc4e303..259a44bcd 100644 --- a/Remote/Hook.hs +++ b/Remote/Hook.hs @@ -27,7 +27,7 @@ type HookName = String remote :: RemoteType remote = RemoteType { typename = "hook", - enumerate = findSpecialRemotes "hooktype", + enumerate = const (findSpecialRemotes "hooktype"), generate = gen, setup = hookSetup } diff --git a/Remote/List.hs b/Remote/List.hs index 49b0a35f2..5472059bd 100644 --- a/Remote/List.hs +++ b/Remote/List.hs @@ -72,14 +72,19 @@ remoteList :: Annex [Remote] remoteList = do rs <- Annex.getState Annex.remotes if null rs - then do - m <- readRemoteLog - rs' <- concat <$> mapM (process m) remoteTypes - Annex.changeState $ \s -> s { Annex.remotes = rs' } - return rs' + then remoteList' False else return rs + +remoteList' :: Bool -> Annex [Remote] +remoteList' autoinit = do + m <- readRemoteLog + rs <- concat <$> mapM (process m) remoteTypes + Annex.changeState $ \s -> s { Annex.remotes = rs } + return rs where - process m t = enumerate t >>= mapM (remoteGen m t) >>= return . catMaybes + process m t = enumerate t autoinit + >>= mapM (remoteGen m t) + >>= return . catMaybes {- Forces the remoteList to be re-generated, re-reading the git config. -} remoteListRefresh :: Annex [Remote] @@ -109,7 +114,7 @@ updateRemote remote = do where updaterepo r | Git.repoIsLocal r || Git.repoIsLocalUnknown r = - Remote.Git.configRead r + Remote.Git.configRead False r | otherwise = return r {- Checks if a remote is syncable using git. -} diff --git a/Remote/Rsync.hs b/Remote/Rsync.hs index c610938a9..be9629b26 100644 --- a/Remote/Rsync.hs +++ b/Remote/Rsync.hs @@ -44,7 +44,7 @@ import qualified Data.Map as M remote :: RemoteType remote = RemoteType { typename = "rsync", - enumerate = findSpecialRemotes "rsyncurl", + enumerate = const (findSpecialRemotes "rsyncurl"), generate = gen, setup = rsyncSetup } diff --git a/Remote/S3.hs b/Remote/S3.hs index 0e7606139..1290e784a 100644 --- a/Remote/S3.hs +++ b/Remote/S3.hs @@ -54,7 +54,7 @@ type BucketName = String remote :: RemoteType remote = RemoteType { typename = "S3", - enumerate = findSpecialRemotes "s3", + enumerate = const (findSpecialRemotes "s3"), generate = gen, setup = s3Setup } diff --git a/Remote/Tahoe.hs b/Remote/Tahoe.hs index f2649fa4b..1357a0183 100644 --- a/Remote/Tahoe.hs +++ b/Remote/Tahoe.hs @@ -53,7 +53,7 @@ type Capability = String remote :: RemoteType remote = RemoteType { typename = "tahoe", - enumerate = findSpecialRemotes "tahoe", + enumerate = const (findSpecialRemotes "tahoe"), generate = gen, setup = tahoeSetup } diff --git a/Remote/Web.hs b/Remote/Web.hs index 102972b02..9892f4c98 100644 --- a/Remote/Web.hs +++ b/Remote/Web.hs @@ -36,8 +36,8 @@ remote = RemoteType { -- There is only one web remote, and it always exists. -- (If the web should cease to exist, remove this module and redistribute -- a new release to the survivors by carrier pigeon.) -list :: Annex [Git.Repo] -list = do +list :: Bool -> Annex [Git.Repo] +list _autoinit = do r <- liftIO $ Git.Construct.remoteNamed "web" (pure Git.Construct.fromUnknown) return [r] diff --git a/Remote/WebDAV.hs b/Remote/WebDAV.hs index 3c414f003..6cc53964e 100644 --- a/Remote/WebDAV.hs +++ b/Remote/WebDAV.hs @@ -36,7 +36,7 @@ import Remote.WebDAV.DavLocation remote :: RemoteType remote = RemoteType { typename = "webdav", - enumerate = findSpecialRemotes "webdav", + enumerate = const (findSpecialRemotes "webdav"), generate = gen, setup = webdavSetup } |