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
1=== modified file 'filestore.py'
2--- filestore.py 2012-06-08 02:20:00 +0000
3+++ filestore.py 2012-06-16 02:16:20 +0000
4@@ -1282,6 +1282,7 @@
5 except CalledProcessError:
6 pass
7 tmp_fp.truncate(size)
8+ os.fchmod(tmp_fp.fileno(), 0o666)
9 return tmp_fp
10
11 def allocate_partial(self, size, _id):
12@@ -1309,6 +1310,7 @@
13 except CalledProcessError:
14 pass
15 tmp_fp.truncate(size)
16+ os.fchmod(tmp_fp.fileno(), 0o666)
17 return tmp_fp
18
19 def move_to_canonical(self, src_fp, _id):
20
21=== modified file 'test_filestore.py'
22--- test_filestore.py 2011-12-15 21:08:50 +0000
23+++ test_filestore.py 2012-06-16 02:16:20 +0000
24@@ -2148,13 +2148,15 @@
25 self.assertIsInstance(fp1, io.BufferedWriter)
26 self.assertEqual(fp1.mode, 'wb')
27 self.assertEqual(os.fstat(fp1.fileno()).st_size, 0)
28+ self.assertEqual(stat.S_IMODE(os.fstat(fp1.fileno()).st_mode), 0o666)
29 self.assertTrue(fp1.name.startswith(t + os.sep))
30
31- # Test with size=None
32+ # Test with size=2311
33 fp2 = fs.allocate_tmp(2311)
34 self.assertIsInstance(fp2, io.BufferedWriter)
35 self.assertEqual(fp2.mode, 'wb')
36 self.assertEqual(os.fstat(fp2.fileno()).st_size, 2311)
37+ self.assertEqual(stat.S_IMODE(os.fstat(fp2.fileno()).st_mode), 0o666)
38 self.assertTrue(fp2.name.startswith(t + os.sep))
39 self.assertNotEqual(fp2.name, fp1.name)
40
41@@ -2179,6 +2181,7 @@
42 self.assertIsInstance(fp3, io.BufferedWriter)
43 self.assertEqual(fp3.mode, 'wb')
44 self.assertEqual(os.fstat(fp3.fileno()).st_size, 1)
45+ self.assertEqual(stat.S_IMODE(os.fstat(fp3.fileno()).st_mode), 0o666)
46 self.assertTrue(fp3.name.startswith(t + os.sep))
47 self.assertNotEqual(fp3.name, fp1.name)
48 self.assertNotEqual(fp3.name, fp2.name)
49@@ -2195,6 +2198,7 @@
50 self.assertIsInstance(fp, io.BufferedWriter)
51 self.assertEqual(fp.mode, 'wb')
52 self.assertEqual(os.fstat(fp.fileno()).st_size, 2311)
53+ self.assertEqual(stat.S_IMODE(os.fstat(fp.fileno()).st_mode), 0o666)
54
55 fp.write(b'a' * 3141) # Extend past size
56 fp.close()
57@@ -2206,6 +2210,7 @@
58 self.assertIsInstance(fp, io.BufferedRandom)
59 self.assertIn(fp.mode, ('r+b', 'rb+'))
60 self.assertEqual(os.fstat(fp.fileno()).st_size, 2311)
61+ self.assertEqual(stat.S_IMODE(os.fstat(fp.fileno()).st_mode), 0o666)
62 fp.close()
63
64 open(filename, 'wb').write(b'a' * 200) # Truncate to smaller than size
65@@ -2217,6 +2222,7 @@
66 self.assertIsInstance(fp, io.BufferedRandom)
67 self.assertIn(fp.mode, ('r+b', 'rb+'))
68 self.assertEqual(os.fstat(fp.fileno()).st_size, 2311)
69+ self.assertEqual(stat.S_IMODE(os.fstat(fp.fileno()).st_mode), 0o666)
70
71
72 _id = random_id() # We'll use a new ID for below
73@@ -2244,12 +2250,14 @@
74 self.assertIsInstance(fp, io.BufferedWriter)
75 self.assertEqual(fp.mode, 'wb')
76 self.assertEqual(os.fstat(fp.fileno()).st_size, 1)
77+ self.assertEqual(stat.S_IMODE(os.fstat(fp.fileno()).st_mode), 0o666)
78 fp.close()
79 fp = fs.allocate_partial(1, _id)
80 self.assertEqual(fp.name, filename)
81 self.assertIsInstance(fp, io.BufferedRandom)
82 self.assertIn(fp.mode, ('r+b', 'rb+'))
83 self.assertEqual(os.fstat(fp.fileno()).st_size, 1)
84+ self.assertEqual(stat.S_IMODE(os.fstat(fp.fileno()).st_mode), 0o666)
85
86 def test_move_to_canonical(self):
87 tmp = TempDir()

Subscribers

People subscribed via source and target branches