diff options
Diffstat (limited to 'bitbake/lib/bb/remotedata.py')
-rw-r--r-- | bitbake/lib/bb/remotedata.py | 49 |
1 files changed, 4 insertions, 45 deletions
diff --git a/bitbake/lib/bb/remotedata.py b/bitbake/lib/bb/remotedata.py index 7391e1b45c..6c9864dd6b 100644 --- a/bitbake/lib/bb/remotedata.py +++ b/bitbake/lib/bb/remotedata.py | |||
@@ -17,16 +17,16 @@ class RemoteDatastores: | |||
17 | self.cooker = cooker | 17 | self.cooker = cooker |
18 | self.datastores = {} | 18 | self.datastores = {} |
19 | self.locked = [] | 19 | self.locked = [] |
20 | self.datastores[0] = self.cooker.data | ||
20 | self.nextindex = 1 | 21 | self.nextindex = 1 |
21 | 22 | ||
22 | def __len__(self): | 23 | def __len__(self): |
23 | return len(self.datastores) | 24 | return len(self.datastores) |
24 | 25 | ||
25 | def __getitem__(self, key): | 26 | def __getitem__(self, key): |
26 | if key is None: | 27 | # Cooker could have changed its datastore from under us |
27 | return self.cooker.data | 28 | self.datastores[0] = self.cooker.data |
28 | else: | 29 | return self.datastores[key] |
29 | return self.datastores[key] | ||
30 | 30 | ||
31 | def items(self): | 31 | def items(self): |
32 | return self.datastores.items() | 32 | return self.datastores.items() |
@@ -63,44 +63,3 @@ class RemoteDatastores: | |||
63 | raise Exception('Tried to release locked datastore %d' % idx) | 63 | raise Exception('Tried to release locked datastore %d' % idx) |
64 | del self.datastores[idx] | 64 | del self.datastores[idx] |
65 | 65 | ||
66 | def receive_datastore(self, remote_data): | ||
67 | """Receive a datastore object sent from the client (as prepared by transmit_datastore())""" | ||
68 | dct = dict(remote_data) | ||
69 | d = bb.data_smart.DataSmart() | ||
70 | d.dict = dct | ||
71 | while True: | ||
72 | if '_remote_data' in dct: | ||
73 | dsindex = dct['_remote_data']['_content'] | ||
74 | del dct['_remote_data'] | ||
75 | if dsindex is None: | ||
76 | dct['_data'] = self.cooker.data.dict | ||
77 | else: | ||
78 | dct['_data'] = self.datastores[dsindex].dict | ||
79 | break | ||
80 | elif '_data' in dct: | ||
81 | idct = dict(dct['_data']) | ||
82 | dct['_data'] = idct | ||
83 | dct = idct | ||
84 | else: | ||
85 | break | ||
86 | return d | ||
87 | |||
88 | @staticmethod | ||
89 | def transmit_datastore(d): | ||
90 | """Prepare a datastore object for sending over IPC from the client end""" | ||
91 | # FIXME content might be a dict, need to turn that into a list as well | ||
92 | def copy_dicts(dct): | ||
93 | if '_remote_data' in dct: | ||
94 | dsindex = dct['_remote_data']['_content'].dsindex | ||
95 | newdct = dct.copy() | ||
96 | newdct['_remote_data'] = {'_content': dsindex} | ||
97 | return list(newdct.items()) | ||
98 | elif '_data' in dct: | ||
99 | newdct = dct.copy() | ||
100 | newdata = copy_dicts(dct['_data']) | ||
101 | if newdata: | ||
102 | newdct['_data'] = newdata | ||
103 | return list(newdct.items()) | ||
104 | return None | ||
105 | main_dict = copy_dicts(d.dict) | ||
106 | return main_dict | ||