Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@tomeuvizoso.net>2007-11-07 19:50:54 (GMT)
committer Tomeu Vizoso <tomeu@tomeuvizoso.net>2007-11-07 19:50:54 (GMT)
commitdc34e0fd99673455f01c66f6ef65448e3253b0f6 (patch)
tree6268ac7a6c0fea60dc36a066f663a73be86c82b1
parent41ab44b3b2e9169f60c2c9e4af3f14a2fc89c074 (diff)
#4704 Fix copy of entries with file to removable devices.
-rw-r--r--NEWS1
-rw-r--r--src/olpc/datastore/backingstore.py11
-rw-r--r--src/olpc/datastore/bin_copy.py8
3 files changed, 14 insertions, 6 deletions
diff --git a/NEWS b/NEWS
index 03b9b5d..55f05ef 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,4 @@
+* #4704 Fix copy of entries with file to removable devices. (tomeu)
* #4714 Fix copy of entries without file to removable devices. (tomeu)
Snapshot 74cbc13878
diff --git a/src/olpc/datastore/backingstore.py b/src/olpc/datastore/backingstore.py
index c4af266..bc3905a 100644
--- a/src/olpc/datastore/backingstore.py
+++ b/src/olpc/datastore/backingstore.py
@@ -419,11 +419,20 @@ class FileBackingStore(BackingStore):
return content
def _writeContent_complete(self, path, completion=None):
+ self._set_permissions_if_possible(path)
if completion is None:
return path
completion(None, path)
return None
+ def _set_permissions_if_possible(self, path):
+ try:
+ os.chmod(path, 0604)
+ except OSError, e:
+ # This can fail for usb sticks.
+ if e.errno != errno.EPERM:
+ raise
+
def _writeContent(self, uid, filelike, replace=True, can_move=False, target=None,
completion=None):
"""Returns: path of file in datastore (new path if it was copied/moved)"""
@@ -440,10 +449,12 @@ class FileBackingStore(BackingStore):
# protection on inplace stores
if completion is None:
bin_copy.bin_copy(filelike.name, path)
+ self._set_permissions_if_possible(path)
return path
if can_move:
bin_copy.bin_mv(filelike.name, path)
+ self._set_permissions_if_possible(path)
return self._writeContent_complete(path, completion)
# Otherwise, async copy
diff --git a/src/olpc/datastore/bin_copy.py b/src/olpc/datastore/bin_copy.py
index df28052..6cf7036 100644
--- a/src/olpc/datastore/bin_copy.py
+++ b/src/olpc/datastore/bin_copy.py
@@ -1,21 +1,17 @@
import os, subprocess
-def bin_copy(src, dest, mode=0600):
+def bin_copy(src, dest):
try:
subprocess.check_call(['/bin/cp', src, dest])
except subprocess.CalledProcessError:
raise OSError("Copy failed %s %s" % (src, dest))
- else:
- os.chmod(dest, mode)
-def bin_mv(src, dest, mode=0600):
+def bin_mv(src, dest):
try:
subprocess.check_call(['/bin/mv', src, dest])
except subprocess.CalledProcessError:
raise OSError("Move failed %s %s" % (src, dest))
- else:
- os.chmod(dest, mode)
if __name__ == "__main__":
import sys