In direct mode, files with the same key are no longer hardlinked, as that would cause a surprising behavior if modifying one, where the other would also change.

This commit is contained in:
Joey Hess 2013-01-14 11:56:37 -04:00
parent 36cb19b4e6
commit 85c564ea94
4 changed files with 20 additions and 6 deletions

View file

@ -254,7 +254,8 @@ moveAnnex key src = withObjectLoc key storeobject storedirect
updateCache key src
thawContent src
liftIO $ replaceFile dest $ moveFile src
liftIO $ forM_ fs $ \f -> replaceFile f $ createLink dest
liftIO $ forM_ fs $ \f -> replaceFile f $
void . copyFileExternal dest
{- Replaces any existing file with a new version, by running an action.
- First, makes sure the file is deleted. Or, if it didn't already exist,

View file

@ -24,6 +24,7 @@ import Backend
import Types.KeySource
import Annex.Content
import Annex.Content.Direct
import Utility.CopyFile
{- Uses git ls-files to find files that need to be committed, and stages
- them into the index. Returns True if some changes were staged. -}
@ -181,11 +182,11 @@ toDirectGen k f = do
liftIO $ replaceFile f $ moveFile loc
, return Nothing
)
(loc':_) -> ifM (liftIO $ not . isSymbolicLink <$> getSymbolicLinkStatus f)
{- Another direct file has the content, so
- hard link to it. -}
(loc':_) -> ifM (liftIO $ not . isSymbolicLink <$> getSymbolicLinkStatus loc')
{- Another direct file has the content; copy it. -}
( return $ Just $ do
liftIO $ replaceFile f $ createLink loc'
liftIO $ replaceFile f $
void . copyFileExternal loc'
, return Nothing
)

3
debian/changelog vendored
View file

@ -14,6 +14,9 @@ git-annex (3.20130108) UNRELEASED; urgency=low
* webapp: Adjust longpoll code to work with recent versions of
shakespeare-js.
* assistant: Support new gvfs dbus names used in Gnome 3.6.
* In direct mode, files with the same key are no longer hardlinked, as
that would cause a surprising behavior if modifying one, where the other
would also change.
-- Joey Hess <joeyh@debian.org> Tue, 08 Jan 2013 12:37:38 -0400

View file

@ -12,10 +12,19 @@
When switching to direct mode, both symlinks should be replaced by a copy (or at least a hardlink) of the actual file.
> The typo that caused this bug is fixed. --[[Joey]]
#What version of git-annex are you using? On what operating system?
3.20130107 on Arch Linux x64
#Please provide any additional information below.
The deduplication performed by git-annex is very dangerous in itself because files with identical content become replaced by references to the same file without the user necessarily being aware. Think of the user making a copy of a file, than modifying it. He would expect to end up with two files, the unchanged original and the modified copy. But what he really gets is two symlinks pointing to the same modified file.
The deduplication performed by git-annex is very dangerous in itself
because files with identical content become replaced by references to the
same file without the user necessarily being aware. Think of the user
making a copy of a file, than modifying it. He would expect to end up with
two files, the unchanged original and the modified copy. But what he really
gets is two symlinks pointing to the same modified file.
> I agree, it now copies rather than hard linking. [[done]] --[[Joey]]