From dc34e0fd99673455f01c66f6ef65448e3253b0f6 Mon Sep 17 00:00:00 2001 From: Tomeu Vizoso Date: Wed, 07 Nov 2007 19:50:54 +0000 Subject: #4704 Fix copy of entries with file to removable devices. --- 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 -- cgit v0.9.1