summaryrefslogtreecommitdiff
path: root/Command/Uninit.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2011-07-04 16:19:04 -0400
committerGravatar Joey Hess <joey@kitenet.net>2011-07-04 16:20:50 -0400
commit71c783bf24f2aa4ab911d8279081bcad08951ece (patch)
treeeaf1b3aee26c76a2038c9084c0ef045a6acb317b /Command/Uninit.hs
parentd7ce51af5abd5c8582a31c39c3968597f5cae34e (diff)
uninit: Use unannex in --fast mode, to support unannexing multiple files that link to the same content.
Diffstat (limited to 'Command/Uninit.hs')
-rw-r--r--Command/Uninit.hs20
1 files changed, 14 insertions, 6 deletions
diff --git a/Command/Uninit.hs b/Command/Uninit.hs
index 5cb66e83a..1497bbfd1 100644
--- a/Command/Uninit.hs
+++ b/Command/Uninit.hs
@@ -28,7 +28,15 @@ command = [repoCommand "uninit" paramPath seek
"de-initialize git-annex and clean out repository"]
seek :: [CommandSeek]
-seek = [withFilesInGit Command.Unannex.start, withNothing start]
+seek = [withFilesInGit startUnannex, withNothing start]
+
+startUnannex :: CommandStartString
+startUnannex file = do
+ -- Force fast mode before running unannex. This way, if multiple
+ -- files link to a key, it will be left in the annex and hardlinked
+ -- to by each.
+ Annex.changeState $ \s -> s { Annex.fast = True }
+ Command.Unannex.start file
start :: CommandStartNothing
start = next perform
@@ -40,12 +48,12 @@ cleanup :: CommandCleanup
cleanup = do
g <- Annex.gitRepo
gitPreCommitHookUnWrite g
+ mapM_ removeAnnex =<< getKeysPresent
+ liftIO $ removeDirectoryRecursive (gitAnnexDir g)
+ -- avoid normal shutdown
saveState
- liftIO $ do
- Git.run g "branch" [Param "-D", Param Branch.name]
- removeDirectoryRecursive (gitAnnexDir g)
- -- avoid normal shutdown
- exitSuccess
+ liftIO $ Git.run g "branch" [Param "-D", Param Branch.name]
+ liftIO $ exitSuccess
gitPreCommitHookUnWrite :: Git.Repo -> Annex ()
gitPreCommitHookUnWrite repo = do