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:
parent
36cb19b4e6
commit
85c564ea94
4 changed files with 20 additions and 6 deletions
|
@ -254,7 +254,8 @@ moveAnnex key src = withObjectLoc key storeobject storedirect
|
||||||
updateCache key src
|
updateCache key src
|
||||||
thawContent src
|
thawContent src
|
||||||
liftIO $ replaceFile dest $ moveFile 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.
|
{- 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,
|
- First, makes sure the file is deleted. Or, if it didn't already exist,
|
||||||
|
|
|
@ -24,6 +24,7 @@ import Backend
|
||||||
import Types.KeySource
|
import Types.KeySource
|
||||||
import Annex.Content
|
import Annex.Content
|
||||||
import Annex.Content.Direct
|
import Annex.Content.Direct
|
||||||
|
import Utility.CopyFile
|
||||||
|
|
||||||
{- Uses git ls-files to find files that need to be committed, and stages
|
{- 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. -}
|
- them into the index. Returns True if some changes were staged. -}
|
||||||
|
@ -181,11 +182,11 @@ toDirectGen k f = do
|
||||||
liftIO $ replaceFile f $ moveFile loc
|
liftIO $ replaceFile f $ moveFile loc
|
||||||
, return Nothing
|
, return Nothing
|
||||||
)
|
)
|
||||||
(loc':_) -> ifM (liftIO $ not . isSymbolicLink <$> getSymbolicLinkStatus f)
|
(loc':_) -> ifM (liftIO $ not . isSymbolicLink <$> getSymbolicLinkStatus loc')
|
||||||
{- Another direct file has the content, so
|
{- Another direct file has the content; copy it. -}
|
||||||
- hard link to it. -}
|
|
||||||
( return $ Just $ do
|
( return $ Just $ do
|
||||||
liftIO $ replaceFile f $ createLink loc'
|
liftIO $ replaceFile f $
|
||||||
|
void . copyFileExternal loc'
|
||||||
, return Nothing
|
, return Nothing
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
3
debian/changelog
vendored
3
debian/changelog
vendored
|
@ -14,6 +14,9 @@ git-annex (3.20130108) UNRELEASED; urgency=low
|
||||||
* webapp: Adjust longpoll code to work with recent versions of
|
* webapp: Adjust longpoll code to work with recent versions of
|
||||||
shakespeare-js.
|
shakespeare-js.
|
||||||
* assistant: Support new gvfs dbus names used in Gnome 3.6.
|
* 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
|
-- Joey Hess <joeyh@debian.org> Tue, 08 Jan 2013 12:37:38 -0400
|
||||||
|
|
||||||
|
|
|
@ -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.
|
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?
|
#What version of git-annex are you using? On what operating system?
|
||||||
|
|
||||||
3.20130107 on Arch Linux x64
|
3.20130107 on Arch Linux x64
|
||||||
|
|
||||||
#Please provide any additional information below.
|
#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]]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue