auto-init autoenable=yes
Try to enable special remotes configured with autoenable=yes when git-annex auto-initialization happens in a new clone of an existing repo. Previously, git-annex init had to be explicitly run to enable them. That was a bit of a wart of a special case for users to need to keep in mind. Special remotes cannot display anything when autoenabled this way, to avoid interfering with the output of git-annex query commands. Any error messages will be hidden, and if it fails, nothing is displayed. The user will realize the remote isn't enable when they try to use it, and can run git-annex init manually then to try the autoenable again and see what failed. That seems like a reasonable approach, and it's less complicated than communicating something across a pipe in order to display it as a side message. Other reason not to do that is that, if the first command the user runs is one like git-annex find that has machine readable output, any message about autoenable failing would need to not be displayed anyway. So better to not display a failure message ever, for consistency. (Had to split out Remote.List.Util to avoid an import cycle.)
This commit is contained in:
parent
731815891d
commit
484a74f073
16 changed files with 105 additions and 37 deletions
|
@ -1,6 +1,6 @@
|
|||
{- git-annex repository initialization
|
||||
-
|
||||
- Copyright 2011-2019 Joey Hess <id@joeyh.name>
|
||||
- Copyright 2011-2020 Joey Hess <id@joeyh.name>
|
||||
-
|
||||
- Licensed under the GNU AGPL version 3 or higher.
|
||||
-}
|
||||
|
@ -35,11 +35,13 @@ import Annex.Difference
|
|||
import Annex.UUID
|
||||
import Annex.WorkTree
|
||||
import Annex.Fixup
|
||||
import Annex.Path
|
||||
import Config
|
||||
import Config.Files
|
||||
import Config.Smudge
|
||||
import qualified Upgrade.V5.Direct as Direct
|
||||
import qualified Annex.AdjustedBranch as AdjustedBranch
|
||||
import Remote.List.Util (remotesChanged)
|
||||
import Annex.Environment
|
||||
import Annex.Hook
|
||||
import Annex.InodeSentinal
|
||||
|
@ -150,8 +152,10 @@ ensureInitialized :: Annex ()
|
|||
ensureInitialized = getVersion >>= maybe needsinit checkUpgrade
|
||||
where
|
||||
needsinit = ifM Annex.Branch.hasSibling
|
||||
( initialize Nothing Nothing
|
||||
, giveup $ "First run: git-annex init"
|
||||
( do
|
||||
initialize Nothing Nothing
|
||||
autoEnableSpecialRemotes
|
||||
, giveup "First run: git-annex init"
|
||||
)
|
||||
|
||||
{- Checks if a repository is initialized. Does not check version for ugrade. -}
|
||||
|
@ -287,3 +291,25 @@ fixupUnusualReposAfterInit :: Annex ()
|
|||
fixupUnusualReposAfterInit = do
|
||||
gc <- Annex.getGitConfig
|
||||
void $ inRepo $ \r -> fixupUnusualRepos r gc
|
||||
|
||||
{- Try to enable any special remotes that are configured to do so.
|
||||
-
|
||||
- The enabling is done in a child process to avoid it using stdio.
|
||||
-}
|
||||
autoEnableSpecialRemotes :: Annex ()
|
||||
autoEnableSpecialRemotes = do
|
||||
rp <- fromRawFilePath <$> fromRepo Git.repoPath
|
||||
cmd <- liftIO programPath
|
||||
liftIO $ withNullHandle $ \nullh -> do
|
||||
let p = proc cmd
|
||||
[ "init"
|
||||
, "--autoenable"
|
||||
]
|
||||
(Nothing, Nothing, Nothing, pid) <- createProcess $ p
|
||||
{ std_out = UseHandle nullh
|
||||
, std_err = UseHandle nullh
|
||||
, std_in = UseHandle nullh
|
||||
, cwd = Just rp
|
||||
}
|
||||
void $ waitForProcess pid
|
||||
remotesChanged
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue