Automatically convert direct mode repositories to v7 with adjusted unlocked branches

* Automatically convert direct mode repositories to v7 with adjusted
  unlocked branches and set annex.thin.
* init: When run on a crippled filesystem with --version=5,
  will error out, since version 7 is needed for adjusted unlocked branch.
* direct: This command always errors out as direct mode is no longer
  supported.
* indirect: This command has become a deprecated noop.
* proxy: This command is deprecated because it was only needed in direct
  mode. (But it continues to work.)

Also removed mentions of direct mode throughough the documentation.

I have not removed all the direct mode code yet.
This commit is contained in:
Joey Hess 2019-08-26 14:52:55 -04:00
parent f6fb4b8cdb
commit 20741b1eb4
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
27 changed files with 98 additions and 484 deletions

View file

@ -8,60 +8,14 @@
module Command.Direct where
import Command
import qualified Git
import qualified Git.LsFiles
import qualified Git.Branch
import Config
import Annex.Direct
import Annex.Version
cmd :: Command
cmd = notBareRepo $ noDaemonRunning $
command "direct" SectionSetup "switch repository to direct mode"
command "direct" SectionSetup "switch repository to direct mode (deprecated)"
paramNothing (withParams seek)
seek :: CmdParams -> CommandSeek
seek = withNothing (commandAction start)
start :: CommandStart
start = ifM versionSupportsDirectMode
( ifM isDirect
( stop
, starting "direct" (ActionItemOther Nothing)
perform
)
, giveup "Direct mode is not supported by this repository version. Use git-annex unlock instead."
)
perform :: CommandPerform
perform = do
showOutput
_ <- inRepo $ Git.Branch.commitCommand Git.Branch.ManualCommit
[ Param "-a"
, Param "-m"
, Param "commit before switching to direct mode"
]
top <- fromRepo Git.repoPath
(l, clean) <- inRepo $ Git.LsFiles.inRepo [top]
forM_ l go
void $ liftIO clean
next cleanup
where
go = whenAnnexed $ \f k -> do
toDirectGen k f >>= \case
Nothing -> noop
Just a -> tryNonAsync a >>= \case
Left e -> warnlocked f e
Right _ -> return ()
return Nothing
warnlocked :: FilePath -> SomeException -> Annex ()
warnlocked f e = do
warning $ f ++ ": " ++ show e
warning "leaving this file as-is; correct this problem and run git annex fsck on it"
cleanup :: CommandCleanup
cleanup = do
setDirect True
return True
start = giveup "Direct mode is not supported by this repository version. Use git-annex unlock instead."