diff options
Diffstat (limited to 'Command')
-rw-r--r-- | Command/Unannex.hs | 11 | ||||
-rw-r--r-- | Command/Uninit.hs | 2 |
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 |