summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Annex/Content.hs9
-rw-r--r--Command/RecvKey.hs14
-rw-r--r--debian/changelog3
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