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,23 +8,11 @@
module Command.Proxy where
import Command
import Config
import Utility.Tmp.Dir
import Utility.Env
import Annex.Direct
import Annex.Tmp
import qualified Git
import qualified Git.Sha
import qualified Git.Ref
import qualified Git.Branch
import qualified Git.LsFiles
import Git.FilePath
import Utility.CopyFile
cmd :: Command
cmd = notBareRepo $
command "proxy" SectionPlumbing
"safely bypass direct mode guard"
"safely bypass direct mode guard (deprecated)"
("-- git command") (withParams seek)
seek :: CmdParams -> CommandSeek
@ -32,48 +20,4 @@ seek = withWords (commandAction . start)
start :: [String] -> CommandStart
start [] = giveup "Did not specify command to run."
start (c:ps) = liftIO . exitWith =<< ifM isDirect
( withOtherTmp $ \tmp -> withTmpDirIn tmp "proxy" go
, liftIO $ safeSystem c (map Param ps)
)
where
go tmp = do
oldref <- fromMaybe Git.Sha.emptyTree
<$> (inRepo . maybe Git.Ref.headSha Git.Ref.sha
=<< inRepo Git.Branch.currentUnsafe)
exitcode <- proxy tmp
cleanupproxy tmp oldref
return exitcode
proxy tmp = do
usetmp <- liftIO $ Just . addEntry "GIT_WORK_TREE" tmp <$> getEnvironment
-- Set up the tmp work tree, to contain both a checkout of all
-- staged files as well as hard links (or copies) of any
-- unstaged files.
unlessM (isNothing <$> inRepo Git.Branch.current) $
unlessM (liftIO $ boolSystemEnv "git" [Param "checkout", Param "--", Param "."] usetmp) $
error "Failed to set up proxy work tree."
top <- fromRepo Git.repoPath
(fs, cleanup) <- inRepo $ Git.LsFiles.notInRepo True [top]
forM_ fs $ \f -> do
tf <- inRepo $ toTopFilePath f
let tmpf = tmp </> getTopFilePath tf
liftIO $ do
createDirectoryIfMissing True (takeDirectory tmpf)
createLinkOrCopy f tmpf
liftIO $ void cleanup
liftIO $ safeSystemEnv c (map Param ps) usetmp
-- To merge the changes made by the proxied command into
-- the work tree is similar to cleaning up after a
-- direct mode merge. But, here we force updates of any
-- non-annxed files that were changed by the proxied
-- command.
cleanupproxy tmp oldref = do
updateWorkTree tmp oldref True
liftIO $ removeDirectoryRecursive tmp
start (c:ps) = liftIO $ exitWith =<< safeSystem c (map Param ps)