New annex.hardlink setting. Closes: #758593
* New annex.hardlink setting. Closes: #758593 * init: Automatically detect when a repository was cloned with --shared, and set annex.hardlink=true, as well as marking the repository as untrusted. Had to reorganize Logs.Trust a bit to avoid a cycle between it and Annex.Init.
This commit is contained in:
parent
0881f6d45c
commit
b874f84086
9 changed files with 94 additions and 19 deletions
|
@ -355,15 +355,27 @@ copyFromRemote' r key file dest
|
|||
| not $ Git.repoIsUrl (repo r) = guardUsable (repo r) (return False) $ do
|
||||
params <- Ssh.rsyncParams r Download
|
||||
u <- getUUID
|
||||
hardlink <- annexHardLink <$> Annex.getGitConfig
|
||||
-- run copy from perspective of remote
|
||||
onLocal r $ do
|
||||
ensureInitialized
|
||||
v <- Annex.Content.prepSendAnnex key
|
||||
case v of
|
||||
Nothing -> return False
|
||||
Just (object, checksuccess) ->
|
||||
runTransfer (Transfer Download u key) file noRetry
|
||||
(rsyncOrCopyFile params object dest)
|
||||
Just (object, checksuccess) -> do
|
||||
let copier = rsyncOrCopyFile params object dest
|
||||
#ifndef mingw32_HOST_OS
|
||||
let linker = createLink object dest >> return True
|
||||
go <- ifM (pure hardlink <&&> not <$> isDirect)
|
||||
( return $ \m -> liftIO (catchBoolIO linker)
|
||||
<||> copier m
|
||||
, return copier
|
||||
)
|
||||
#else
|
||||
let go = copier
|
||||
#endif
|
||||
runTransfer (Transfer Download u key)
|
||||
file noRetry go
|
||||
<&&> checksuccess
|
||||
| Git.repoIsSsh (repo r) = feedprogressback $ \feeder -> do
|
||||
direct <- isDirect
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue