summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/remotedata.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/bb/remotedata.py')
-rw-r--r--bitbake/lib/bb/remotedata.py49
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