@@ -162,13 +162,13 @@ func Create(req *rpc.CreateRequest) (*rpc.CreateResponse, *status.Status) {
162162}
163163
164164// Init loads installed libraries and Platforms in CoreInstance with specified ID, 
165- // an gRPC status error is returned if the CoreInstance doesn't exist. 
165+ // a gRPC status error is returned if the CoreInstance doesn't exist. 
166+ // All responses are sent through responseCallback, can be nil to ignore all responses. 
166167// Failures don't stop the loading process, in case of loading failure the Platform or library 
167- // is simply skipped and an error gRPC status is sent in the returned channel. 
168- // Channel is closed when loading is finished. 
169- func  Init (req  * rpc.InitRequest , resp  func (r  * rpc.InitResponse )) * status.Status  {
170- 	if  resp  ==  nil  {
171- 		resp  =  func (r  * rpc.InitResponse ) {}
168+ // is simply skipped and an error gRPC status is sent to responseCallback. 
169+ func  Init (req  * rpc.InitRequest , responseCallback  func (r  * rpc.InitResponse )) * status.Status  {
170+ 	if  responseCallback  ==  nil  {
171+ 		responseCallback  =  func (r  * rpc.InitResponse ) {}
172172	}
173173	instance  :=  instances [req .Instance .Id ]
174174	if  instance  ==  nil  {
@@ -182,7 +182,7 @@ func Init(req *rpc.InitRequest, resp func(r *rpc.InitResponse)) *status.Status {
182182		URL , err  :=  utils .URLParse (u )
183183		if  err  !=  nil  {
184184			s  :=  status .Newf (codes .InvalidArgument , "Invalid additional URL: %v" , err )
185- 			resp (& rpc.InitResponse {
185+ 			responseCallback (& rpc.InitResponse {
186186				Message : & rpc.InitResponse_Error {
187187					Error : s .Proto (),
188188				},
@@ -196,7 +196,7 @@ func Init(req *rpc.InitRequest, resp func(r *rpc.InitResponse)) *status.Status {
196196			_ , err  :=  instance .PackageManager .LoadPackageIndexFromFile (indexFile )
197197			if  err  !=  nil  {
198198				s  :=  status .Newf (codes .FailedPrecondition , "Loading index file: %v" , err )
199- 				resp (& rpc.InitResponse {
199+ 				responseCallback (& rpc.InitResponse {
200200					Message : & rpc.InitResponse_Error {
201201						Error : s .Proto (),
202202					},
@@ -207,7 +207,7 @@ func Init(req *rpc.InitRequest, resp func(r *rpc.InitResponse)) *status.Status {
207207
208208		if  err  :=  instance .PackageManager .LoadPackageIndex (URL ); err  !=  nil  {
209209			s  :=  status .Newf (codes .FailedPrecondition , "Loading index file: %v" , err )
210- 			resp (& rpc.InitResponse {
210+ 			responseCallback (& rpc.InitResponse {
211211				Message : & rpc.InitResponse_Error {
212212					Error : s .Proto (),
213213				},
@@ -219,15 +219,15 @@ func Init(req *rpc.InitRequest, resp func(r *rpc.InitResponse)) *status.Status {
219219	// otherwise we wouldn't find them and reinstall them each time 
220220	// and they would never get reloaded. 
221221	for  _ , err  :=  range  instance .PackageManager .LoadHardware () {
222- 		resp (& rpc.InitResponse {
222+ 		responseCallback (& rpc.InitResponse {
223223			Message : & rpc.InitResponse_Error {
224224				Error : err .Proto (),
225225			},
226226		})
227227	}
228228
229229	taskCallback  :=  func (msg  * rpc.TaskProgress ) {
230- 		resp (& rpc.InitResponse {
230+ 		responseCallback (& rpc.InitResponse {
231231			Message : & rpc.InitResponse_InitProgress {
232232				InitProgress : & rpc.InitResponse_Progress {
233233					TaskProgress : msg ,
@@ -237,7 +237,7 @@ func Init(req *rpc.InitRequest, resp func(r *rpc.InitResponse)) *status.Status {
237237	}
238238
239239	downloadCallback  :=  func (msg  * rpc.DownloadProgress ) {
240- 		resp (& rpc.InitResponse {
240+ 		responseCallback (& rpc.InitResponse {
241241			Message : & rpc.InitResponse_InitProgress {
242242				InitProgress : & rpc.InitResponse_Progress {
243243					DownloadProgress : msg ,
@@ -251,7 +251,7 @@ func Init(req *rpc.InitRequest, resp func(r *rpc.InitResponse)) *status.Status {
251251	ctagsTool , err  :=  getBuiltinCtagsTool (instance .PackageManager )
252252	if  err  !=  nil  {
253253		s  :=  status .Newf (codes .Internal , err .Error ())
254- 		resp (& rpc.InitResponse {
254+ 		responseCallback (& rpc.InitResponse {
255255			Message : & rpc.InitResponse_Error {
256256				Error : s .Proto (),
257257			},
@@ -261,7 +261,7 @@ func Init(req *rpc.InitRequest, resp func(r *rpc.InitResponse)) *status.Status {
261261		toolHasBeenInstalled  =  toolHasBeenInstalled  ||  ctagsInstalled 
262262		if  err  !=  nil  {
263263			s  :=  status .Newf (codes .Internal , err .Error ())
264- 			resp (& rpc.InitResponse {
264+ 			responseCallback (& rpc.InitResponse {
265265				Message : & rpc.InitResponse_Error {
266266					Error : s .Proto (),
267267				},
@@ -272,7 +272,7 @@ func Init(req *rpc.InitRequest, resp func(r *rpc.InitResponse)) *status.Status {
272272	serialDiscoveryTool , _  :=  getBuiltinSerialDiscoveryTool (instance .PackageManager )
273273	if  err  !=  nil  {
274274		s  :=  status .Newf (codes .Internal , err .Error ())
275- 		resp (& rpc.InitResponse {
275+ 		responseCallback (& rpc.InitResponse {
276276			Message : & rpc.InitResponse_Error {
277277				Error : s .Proto (),
278278			},
@@ -282,7 +282,7 @@ func Init(req *rpc.InitRequest, resp func(r *rpc.InitResponse)) *status.Status {
282282		toolHasBeenInstalled  =  toolHasBeenInstalled  ||  serialDiscoveryToolInstalled 
283283		if  err  !=  nil  {
284284			s  :=  status .Newf (codes .Internal , err .Error ())
285- 			resp (& rpc.InitResponse {
285+ 			responseCallback (& rpc.InitResponse {
286286				Message : & rpc.InitResponse_Error {
287287					Error : s .Proto (),
288288				},
@@ -294,7 +294,7 @@ func Init(req *rpc.InitRequest, resp func(r *rpc.InitResponse)) *status.Status {
294294		// We installed at least one new tool after loading hardware 
295295		// so we must reload again otherwise we would never found them. 
296296		for  _ , err  :=  range  instance .PackageManager .LoadHardware () {
297- 			resp (& rpc.InitResponse {
297+ 			responseCallback (& rpc.InitResponse {
298298				Message : & rpc.InitResponse_Error {
299299					Error : err .Proto (),
300300				},
@@ -313,7 +313,7 @@ func Init(req *rpc.InitRequest, resp func(r *rpc.InitResponse)) *status.Status {
313313
314314	if  err  :=  instance .lm .LoadIndex (); err  !=  nil  {
315315		s  :=  status .Newf (codes .FailedPrecondition , "Loading index file: %v" , err )
316- 		resp (& rpc.InitResponse {
316+ 		responseCallback (& rpc.InitResponse {
317317			Message : & rpc.InitResponse_Error {
318318				Error : s .Proto (),
319319			},
@@ -322,7 +322,7 @@ func Init(req *rpc.InitRequest, resp func(r *rpc.InitResponse)) *status.Status {
322322
323323	for  _ , err  :=  range  instance .lm .RescanLibraries () {
324324		s  :=  status .Newf (codes .FailedPrecondition , "Loading libraries: %v" , err )
325- 		resp (& rpc.InitResponse {
325+ 		responseCallback (& rpc.InitResponse {
326326			Message : & rpc.InitResponse_Error {
327327				Error : s .Proto (),
328328			},
0 commit comments