Merge lp:~jderose/filestore/global-rw-tmp into lp:filestore

Proposed by Jason Gerard DeRose
Status: Merged
Merged at revision: 242
Proposed branch: lp:~jderose/filestore/global-rw-tmp
Merge into: lp:filestore
Diff against target: 87 lines (+11/-1)
2 files modified
filestore.py (+2/-0)
test_filestore.py (+9/-1)
To merge this branch: bzr merge lp:~jderose/filestore/global-rw-tmp
Reviewer Review Type Date Requested Status
Jason Gerard DeRose Approve
Review via email: mp+110647@code.launchpad.net

Description of the change

FileStore.allocate_tmp() and FileStore.allocate_partial() now set global read-write permissions on the file so it's possible to share ext4-formatted drives between multiple users without permission issues.

See bug for more details:

https://bugs.launchpad.net/filestore/+bug/1013924

To post a comment you must log in.
Revision history for this message
Jason Gerard DeRose (jderose) wrote :

I'm gonna self-approve as there as a series of changes that depend on this.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'filestore.py'
--- filestore.py 2012-06-08 02:20:00 +0000
+++ filestore.py 2012-06-16 02:16:20 +0000
@@ -1282,6 +1282,7 @@
1282 except CalledProcessError:1282 except CalledProcessError:
1283 pass1283 pass
1284 tmp_fp.truncate(size)1284 tmp_fp.truncate(size)
1285 os.fchmod(tmp_fp.fileno(), 0o666)
1285 return tmp_fp1286 return tmp_fp
12861287
1287 def allocate_partial(self, size, _id):1288 def allocate_partial(self, size, _id):
@@ -1309,6 +1310,7 @@
1309 except CalledProcessError:1310 except CalledProcessError:
1310 pass1311 pass
1311 tmp_fp.truncate(size)1312 tmp_fp.truncate(size)
1313 os.fchmod(tmp_fp.fileno(), 0o666)
1312 return tmp_fp1314 return tmp_fp
13131315
1314 def move_to_canonical(self, src_fp, _id):1316 def move_to_canonical(self, src_fp, _id):
13151317
=== modified file 'test_filestore.py'
--- test_filestore.py 2011-12-15 21:08:50 +0000
+++ test_filestore.py 2012-06-16 02:16:20 +0000
@@ -2148,13 +2148,15 @@
2148 self.assertIsInstance(fp1, io.BufferedWriter)2148 self.assertIsInstance(fp1, io.BufferedWriter)
2149 self.assertEqual(fp1.mode, 'wb')2149 self.assertEqual(fp1.mode, 'wb')
2150 self.assertEqual(os.fstat(fp1.fileno()).st_size, 0)2150 self.assertEqual(os.fstat(fp1.fileno()).st_size, 0)
2151 self.assertEqual(stat.S_IMODE(os.fstat(fp1.fileno()).st_mode), 0o666)
2151 self.assertTrue(fp1.name.startswith(t + os.sep))2152 self.assertTrue(fp1.name.startswith(t + os.sep))
21522153
2153 # Test with size=None2154 # Test with size=2311
2154 fp2 = fs.allocate_tmp(2311)2155 fp2 = fs.allocate_tmp(2311)
2155 self.assertIsInstance(fp2, io.BufferedWriter)2156 self.assertIsInstance(fp2, io.BufferedWriter)
2156 self.assertEqual(fp2.mode, 'wb')2157 self.assertEqual(fp2.mode, 'wb')
2157 self.assertEqual(os.fstat(fp2.fileno()).st_size, 2311)2158 self.assertEqual(os.fstat(fp2.fileno()).st_size, 2311)
2159 self.assertEqual(stat.S_IMODE(os.fstat(fp2.fileno()).st_mode), 0o666)
2158 self.assertTrue(fp2.name.startswith(t + os.sep))2160 self.assertTrue(fp2.name.startswith(t + os.sep))
2159 self.assertNotEqual(fp2.name, fp1.name)2161 self.assertNotEqual(fp2.name, fp1.name)
21602162
@@ -2179,6 +2181,7 @@
2179 self.assertIsInstance(fp3, io.BufferedWriter)2181 self.assertIsInstance(fp3, io.BufferedWriter)
2180 self.assertEqual(fp3.mode, 'wb')2182 self.assertEqual(fp3.mode, 'wb')
2181 self.assertEqual(os.fstat(fp3.fileno()).st_size, 1)2183 self.assertEqual(os.fstat(fp3.fileno()).st_size, 1)
2184 self.assertEqual(stat.S_IMODE(os.fstat(fp3.fileno()).st_mode), 0o666)
2182 self.assertTrue(fp3.name.startswith(t + os.sep))2185 self.assertTrue(fp3.name.startswith(t + os.sep))
2183 self.assertNotEqual(fp3.name, fp1.name)2186 self.assertNotEqual(fp3.name, fp1.name)
2184 self.assertNotEqual(fp3.name, fp2.name)2187 self.assertNotEqual(fp3.name, fp2.name)
@@ -2195,6 +2198,7 @@
2195 self.assertIsInstance(fp, io.BufferedWriter)2198 self.assertIsInstance(fp, io.BufferedWriter)
2196 self.assertEqual(fp.mode, 'wb')2199 self.assertEqual(fp.mode, 'wb')
2197 self.assertEqual(os.fstat(fp.fileno()).st_size, 2311)2200 self.assertEqual(os.fstat(fp.fileno()).st_size, 2311)
2201 self.assertEqual(stat.S_IMODE(os.fstat(fp.fileno()).st_mode), 0o666)
21982202
2199 fp.write(b'a' * 3141) # Extend past size2203 fp.write(b'a' * 3141) # Extend past size
2200 fp.close()2204 fp.close()
@@ -2206,6 +2210,7 @@
2206 self.assertIsInstance(fp, io.BufferedRandom)2210 self.assertIsInstance(fp, io.BufferedRandom)
2207 self.assertIn(fp.mode, ('r+b', 'rb+'))2211 self.assertIn(fp.mode, ('r+b', 'rb+'))
2208 self.assertEqual(os.fstat(fp.fileno()).st_size, 2311)2212 self.assertEqual(os.fstat(fp.fileno()).st_size, 2311)
2213 self.assertEqual(stat.S_IMODE(os.fstat(fp.fileno()).st_mode), 0o666)
2209 fp.close()2214 fp.close()
22102215
2211 open(filename, 'wb').write(b'a' * 200) # Truncate to smaller than size2216 open(filename, 'wb').write(b'a' * 200) # Truncate to smaller than size
@@ -2217,6 +2222,7 @@
2217 self.assertIsInstance(fp, io.BufferedRandom)2222 self.assertIsInstance(fp, io.BufferedRandom)
2218 self.assertIn(fp.mode, ('r+b', 'rb+'))2223 self.assertIn(fp.mode, ('r+b', 'rb+'))
2219 self.assertEqual(os.fstat(fp.fileno()).st_size, 2311)2224 self.assertEqual(os.fstat(fp.fileno()).st_size, 2311)
2225 self.assertEqual(stat.S_IMODE(os.fstat(fp.fileno()).st_mode), 0o666)
22202226
22212227
2222 _id = random_id() # We'll use a new ID for below2228 _id = random_id() # We'll use a new ID for below
@@ -2244,12 +2250,14 @@
2244 self.assertIsInstance(fp, io.BufferedWriter)2250 self.assertIsInstance(fp, io.BufferedWriter)
2245 self.assertEqual(fp.mode, 'wb')2251 self.assertEqual(fp.mode, 'wb')
2246 self.assertEqual(os.fstat(fp.fileno()).st_size, 1)2252 self.assertEqual(os.fstat(fp.fileno()).st_size, 1)
2253 self.assertEqual(stat.S_IMODE(os.fstat(fp.fileno()).st_mode), 0o666)
2247 fp.close()2254 fp.close()
2248 fp = fs.allocate_partial(1, _id)2255 fp = fs.allocate_partial(1, _id)
2249 self.assertEqual(fp.name, filename)2256 self.assertEqual(fp.name, filename)
2250 self.assertIsInstance(fp, io.BufferedRandom)2257 self.assertIsInstance(fp, io.BufferedRandom)
2251 self.assertIn(fp.mode, ('r+b', 'rb+'))2258 self.assertIn(fp.mode, ('r+b', 'rb+'))
2252 self.assertEqual(os.fstat(fp.fileno()).st_size, 1)2259 self.assertEqual(os.fstat(fp.fileno()).st_size, 1)
2260 self.assertEqual(stat.S_IMODE(os.fstat(fp.fileno()).st_mode), 0o666)
22532261
2254 def test_move_to_canonical(self):2262 def test_move_to_canonical(self):
2255 tmp = TempDir()2263 tmp = TempDir()

Subscribers

People subscribed via source and target branches