Bring back rsync -p, but only when git-annex is running on a non-crippled file system. This is a better approach to fix #700282 while not unncessarily losing file permissions on non-crippled systems.
This commit is contained in:
parent
797af48f24
commit
f00cb21037
4 changed files with 22 additions and 6 deletions
|
@ -312,7 +312,7 @@ copyFromRemote r key file dest _p = copyFromRemote' r key file dest
|
||||||
copyFromRemote' :: Remote -> Key -> AssociatedFile -> FilePath -> Annex Bool
|
copyFromRemote' :: Remote -> Key -> AssociatedFile -> FilePath -> Annex Bool
|
||||||
copyFromRemote' r key file dest
|
copyFromRemote' r key file dest
|
||||||
| not $ Git.repoIsUrl (repo r) = guardUsable (repo r) False $ do
|
| not $ Git.repoIsUrl (repo r) = guardUsable (repo r) False $ do
|
||||||
let params = Ssh.rsyncParams r Download
|
params <- Ssh.rsyncParams r Download
|
||||||
u <- getUUID
|
u <- getUUID
|
||||||
-- run copy from perspective of remote
|
-- run copy from perspective of remote
|
||||||
onLocal r $ do
|
onLocal r $ do
|
||||||
|
@ -411,7 +411,7 @@ copyToRemote r key file p
|
||||||
-- the remote's Annex, but it needs access to the current
|
-- the remote's Annex, but it needs access to the current
|
||||||
-- Annex monad's state.
|
-- Annex monad's state.
|
||||||
checksuccessio <- Annex.withCurrentState checksuccess
|
checksuccessio <- Annex.withCurrentState checksuccess
|
||||||
let params = Ssh.rsyncParams r Upload
|
params <- Ssh.rsyncParams r Upload
|
||||||
u <- getUUID
|
u <- getUUID
|
||||||
-- run copy from perspective of remote
|
-- run copy from perspective of remote
|
||||||
onLocal r $ ifM (Annex.Content.inAnnex key)
|
onLocal r $ ifM (Annex.Content.inAnnex key)
|
||||||
|
|
|
@ -21,6 +21,7 @@ import Utility.Metered
|
||||||
import Utility.Rsync
|
import Utility.Rsync
|
||||||
import Types.Remote
|
import Types.Remote
|
||||||
import Logs.Transfer
|
import Logs.Transfer
|
||||||
|
import Config
|
||||||
|
|
||||||
{- Generates parameters to ssh to a repository's host and run a command.
|
{- Generates parameters to ssh to a repository's host and run a command.
|
||||||
- Caller is responsible for doing any neccessary shellEscaping of the
|
- Caller is responsible for doing any neccessary shellEscaping of the
|
||||||
|
@ -122,7 +123,7 @@ rsyncParamsRemote direct r direction key file afile = do
|
||||||
fields
|
fields
|
||||||
-- Convert the ssh command into rsync command line.
|
-- Convert the ssh command into rsync command line.
|
||||||
let eparam = rsyncShell (Param shellcmd:shellparams)
|
let eparam = rsyncShell (Param shellcmd:shellparams)
|
||||||
let o = rsyncParams r direction
|
o <- rsyncParams r direction
|
||||||
return $ if direction == Download
|
return $ if direction == Download
|
||||||
then o ++ rsyncopts eparam dummy (File file)
|
then o ++ rsyncopts eparam dummy (File file)
|
||||||
else o ++ rsyncopts eparam (File file) dummy
|
else o ++ rsyncopts eparam (File file) dummy
|
||||||
|
@ -140,9 +141,19 @@ rsyncParamsRemote direct r direction key file afile = do
|
||||||
dummy = Param "dummy:"
|
dummy = Param "dummy:"
|
||||||
|
|
||||||
-- --inplace to resume partial files
|
-- --inplace to resume partial files
|
||||||
rsyncParams :: Remote -> Direction -> [CommandParam]
|
--
|
||||||
rsyncParams r direction = Params "--progress --inplace" :
|
-- Only use --perms when not on a crippled file system, as rsync
|
||||||
map Param (remoteAnnexRsyncOptions gc ++ dps)
|
-- will fail trying to restore file perms onto a filesystem that does not
|
||||||
|
-- support them.
|
||||||
|
rsyncParams :: Remote -> Direction -> Annex [CommandParam]
|
||||||
|
rsyncParams r direction = do
|
||||||
|
crippled <- crippledFileSystem
|
||||||
|
return $ map Param $ catMaybes
|
||||||
|
[ Just "--progress"
|
||||||
|
, Just "--inplace"
|
||||||
|
, if crippled then Nothing else Just "--perms"
|
||||||
|
]
|
||||||
|
++ remoteAnnexRsyncOptions gc ++ dps
|
||||||
where
|
where
|
||||||
dps
|
dps
|
||||||
| direction == Download = remoteAnnexRsyncDownloadOptions gc
|
| direction == Download = remoteAnnexRsyncDownloadOptions gc
|
||||||
|
|
3
debian/changelog
vendored
3
debian/changelog
vendored
|
@ -23,6 +23,9 @@ git-annex (5.20140413) UNRELEASED; urgency=medium
|
||||||
to clone it back the way it was.
|
to clone it back the way it was.
|
||||||
* drop --from: When local repository is untrusted, its copy of a file does
|
* drop --from: When local repository is untrusted, its copy of a file does
|
||||||
not count.
|
not count.
|
||||||
|
* Bring back rsync -p, but only when git-annex is running on a non-crippled
|
||||||
|
file system. This is a better approach to fix #700282 while not
|
||||||
|
unncessarily losing file permissions on non-crippled systems.
|
||||||
|
|
||||||
-- Joey Hess <joeyh@debian.org> Fri, 11 Apr 2014 21:33:35 -0400
|
-- Joey Hess <joeyh@debian.org> Fri, 11 Apr 2014 21:33:35 -0400
|
||||||
|
|
||||||
|
|
|
@ -43,3 +43,5 @@ Linux
|
||||||
|
|
||||||
# End of transcript or log.
|
# End of transcript or log.
|
||||||
"""]]
|
"""]]
|
||||||
|
|
||||||
|
> [[fixed|done]]; brought back -p on non-crippled file systems --[[Joey]]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue