2012-12-13 19:44:56 +00:00
|
|
|
{- git-annex command
|
|
|
|
-
|
2015-01-21 16:50:09 +00:00
|
|
|
- Copyright 2012 Joey Hess <id@joeyh.name>
|
2012-12-13 19:44:56 +00:00
|
|
|
-
|
|
|
|
- Licensed under the GNU GPL version 3 or higher.
|
|
|
|
-}
|
|
|
|
|
|
|
|
module Command.Direct where
|
|
|
|
|
|
|
|
import Command
|
|
|
|
import qualified Git
|
|
|
|
import qualified Git.LsFiles
|
2014-07-04 15:36:59 +00:00
|
|
|
import qualified Git.Branch
|
2012-12-13 19:44:56 +00:00
|
|
|
import Config
|
2012-12-18 19:04:44 +00:00
|
|
|
import Annex.Direct
|
2015-12-04 20:29:27 +00:00
|
|
|
import Annex.Version
|
2012-12-13 19:44:56 +00:00
|
|
|
|
2015-07-08 16:33:27 +00:00
|
|
|
cmd :: Command
|
|
|
|
cmd = notBareRepo $ noDaemonRunning $
|
2015-07-08 19:08:02 +00:00
|
|
|
command "direct" SectionSetup "switch repository to direct mode"
|
|
|
|
paramNothing (withParams seek)
|
2012-12-13 19:44:56 +00:00
|
|
|
|
2015-07-08 19:08:02 +00:00
|
|
|
seek :: CmdParams -> CommandSeek
|
2018-10-01 18:12:06 +00:00
|
|
|
seek = withNothing (commandAction start)
|
2012-12-13 19:44:56 +00:00
|
|
|
|
|
|
|
start :: CommandStart
|
2015-12-04 20:29:27 +00:00
|
|
|
start = ifM versionSupportsDirectMode
|
|
|
|
( ifM isDirect ( stop , next perform )
|
2017-02-11 09:38:49 +00:00
|
|
|
, giveup "Direct mode is not supported by this repository version. Use git-annex unlock instead."
|
2015-12-04 20:29:27 +00:00
|
|
|
)
|
2012-12-13 19:44:56 +00:00
|
|
|
|
|
|
|
perform :: CommandPerform
|
|
|
|
perform = do
|
2017-11-28 18:40:26 +00:00
|
|
|
showStart' "commit" Nothing
|
2012-12-13 19:44:56 +00:00
|
|
|
showOutput
|
2014-07-04 15:36:59 +00:00
|
|
|
_ <- inRepo $ Git.Branch.commitCommand Git.Branch.ManualCommit
|
|
|
|
[ Param "-a"
|
2013-03-03 17:39:07 +00:00
|
|
|
, Param "-m"
|
|
|
|
, Param "commit before switching to direct mode"
|
|
|
|
]
|
2012-12-13 20:00:17 +00:00
|
|
|
showEndOk
|
|
|
|
|
2012-12-13 19:44:56 +00:00
|
|
|
top <- fromRepo Git.repoPath
|
|
|
|
(l, clean) <- inRepo $ Git.LsFiles.inRepo [top]
|
|
|
|
forM_ l go
|
|
|
|
void $ liftIO clean
|
|
|
|
next cleanup
|
|
|
|
where
|
2014-04-17 22:03:39 +00:00
|
|
|
go = whenAnnexed $ \f k -> do
|
2017-12-05 19:00:50 +00:00
|
|
|
toDirectGen k f >>= \case
|
2012-12-18 19:04:44 +00:00
|
|
|
Nothing -> noop
|
|
|
|
Just a -> do
|
2012-12-13 19:44:56 +00:00
|
|
|
showStart "direct" f
|
2017-12-05 19:00:50 +00:00
|
|
|
tryNonAsync a >>= \case
|
2013-09-30 16:48:40 +00:00
|
|
|
Left e -> warnlocked e
|
|
|
|
Right _ -> showEndOk
|
2012-12-13 19:44:56 +00:00
|
|
|
return Nothing
|
|
|
|
|
2013-09-30 16:48:40 +00:00
|
|
|
warnlocked :: SomeException -> Annex ()
|
|
|
|
warnlocked e = do
|
|
|
|
warning $ show e
|
|
|
|
warning "leaving this file as-is; correct this problem and run git annex fsck on it"
|
|
|
|
|
2012-12-13 19:44:56 +00:00
|
|
|
cleanup :: CommandCleanup
|
|
|
|
cleanup = do
|
2017-11-28 18:40:26 +00:00
|
|
|
showStart' "direct" Nothing
|
2012-12-13 19:44:56 +00:00
|
|
|
setDirect True
|
|
|
|
return True
|