summaryrefslogtreecommitdiff
path: root/Command
diff options
context:
space:
mode:
Diffstat (limited to 'Command')
-rw-r--r--Command/Unannex.hs11
-rw-r--r--Command/Uninit.hs2
2 files changed, 12 insertions, 1 deletions
diff --git a/Command/Unannex.hs b/Command/Unannex.hs
index 3da7c2a41..ca9788ddb 100644
--- a/Command/Unannex.hs
+++ b/Command/Unannex.hs
@@ -75,7 +75,16 @@ cleanupIndirect :: FilePath -> Key -> CommandCleanup
cleanupIndirect file key = do
src <- calcRepo $ gitAnnexLocation key
ifM (Annex.getState Annex.fast)
- ( hardlinkfrom src
+ ( do
+ -- Only make a hard link if the annexed file does not
+ -- already have other hard links pointing at it.
+ -- This avoids unannexing (and uninit) ending up
+ -- hard linking files together, which would be
+ -- surprising.
+ s <- liftIO $ getFileStatus src
+ if linkCount s > 1
+ then copyfrom src
+ else hardlinkfrom src
, copyfrom src
)
where
diff --git a/Command/Uninit.hs b/Command/Uninit.hs
index 5b2adf0bd..dccf4a614 100644
--- a/Command/Uninit.hs
+++ b/Command/Uninit.hs
@@ -8,6 +8,7 @@
module Command.Uninit where
import Common.Annex
+import qualified Annex
import Command
import qualified Git
import qualified Git.Command
@@ -37,6 +38,7 @@ check = do
seek :: CommandSeek
seek ps = do
withFilesNotInGit False (whenAnnexed startCheckIncomplete) ps
+ Annex.changeState $ \s -> s { Annex.fast = True }
withFilesInGit (whenAnnexed Command.Unannex.start) ps
finish