diff options
-rw-r--r-- | Annex/Content.hs | 9 | ||||
-rw-r--r-- | Command/RecvKey.hs | 14 | ||||
-rw-r--r-- | debian/changelog | 3 |
3 files changed, 18 insertions, 8 deletions
diff --git a/Annex/Content.hs b/Annex/Content.hs index 6f2c9690e..ad04bdba1 100644 --- a/Annex/Content.hs +++ b/Annex/Content.hs @@ -470,9 +470,8 @@ preseedTmp key file = go =<< inAnnex key liftIO $ copyFileExternal s file ) -{- Blocks writing to an annexed file. The file is made unwritable - - to avoid accidental edits. core.sharedRepository may change - - who can read it. -} +{- Blocks writing to an annexed file, and modifies file permissions to + - allow reading it, per core.sharedRepository setting. -} freezeContent :: FilePath -> Annex () freezeContent file = unlessM crippledFileSystem $ liftIO . go =<< fromRepo getSharedRepository @@ -483,7 +482,9 @@ freezeContent file = unlessM crippledFileSystem $ go AllShared = modifyFileMode file $ removeModes writeModes . addModes readModes - go _ = preventWrite file + go _ = modifyFileMode file $ + removeModes writeModes . + addModes [ownerReadMode] {- Allows writing to an annexed file that freezeContent was called on - before. -} diff --git a/Command/RecvKey.hs b/Command/RecvKey.hs index 041e104a7..840fd34cb 100644 --- a/Command/RecvKey.hs +++ b/Command/RecvKey.hs @@ -44,13 +44,19 @@ start key = ifM (inAnnex key) go tmp = do opts <- filterRsyncSafeOptions . maybe [] words <$> getField "RsyncOptions" - ifM (liftIO $ rsyncServerReceive (map Param opts) tmp) - ( ifM (isJust <$> Fields.getField Fields.direct) + ok <- liftIO $ rsyncServerReceive (map Param opts) tmp + + -- The file could have been received with permissions that + -- do not allow reading it, so this is done before the + -- directcheck. + freezeContent tmp + + if ok + then ifM (isJust <$> Fields.getField Fields.direct) ( directcheck tmp , return True ) - , return False - ) + else return False {- If the sending repository uses direct mode, the file - it sends could be modified as it's sending it. So check - that the right size file was received, and that the key/value diff --git a/debian/changelog b/debian/changelog index dfd2bacb6..3c268866d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -12,6 +12,9 @@ git-annex (4.20130502) UNRELEASED; urgency=low * direct: Fix a bug that could cause some files to be left in indirect mode. * When initializing a directory special remote with a relative path, the path is made absolute. + * git-annex-shell: Ensure that received files can be read. Files + transferred from some Android devices may have very broken permissions + as received. -- Joey Hess <joeyh@debian.org> Thu, 02 May 2013 20:39:19 -0400 |