MCPcopy Create free account
hub / github.com/bufbuild/buf / cacheFileLocked

Method cacheFileLocked

private/buf/bufcurl/reflection_resolver.go:376–425  ·  view source on GitHub ↗
(name string, seen []string)

Source from the content-addressed store, hash-verified

374}
375
376func (r *reflectionResolver) cacheFileLocked(name string, seen []string) error {
377 if _, err := r.cachedFiles.FindFileByPath(name); err == nil {
378 return nil // already processed this file
379 }
380 for i, alreadySeen := range seen {
381 if name == alreadySeen {
382 // we've seen this file already which means malformed
383 // file descriptor protos that have an import cycle
384 cycle := append(seen[i:], name)
385 return fmt.Errorf("downloaded files contain an import cycle: %s", strings.Join(cycle, " -> "))
386 }
387 }
388
389 file := r.downloadedProtos[name]
390 if file == nil {
391 // download missing file(s)
392 moreFiles, err := r.fileByNameLocked(name)
393 if err != nil {
394 return err
395 }
396 for _, newFile := range moreFiles {
397 r.downloadedProtos[newFile.GetName()] = newFile
398 if newFile.GetName() == name {
399 file = newFile
400 }
401 }
402 if file == nil {
403 return fmt.Errorf("requested file %q but response did not contain it", name)
404 }
405 }
406
407 // make sure imports have been downloaded and cached
408 for _, dep := range file.Dependency {
409 if err := r.cacheFileLocked(dep, append(seen, name)); err != nil {
410 return err
411 }
412 }
413
414 // now we can create and cache this file
415 fileDescriptor, err := protodesc.NewFile(file, &r.cachedFiles)
416 if err != nil {
417 return err
418 }
419 if err := r.cachedFiles.RegisterFile(fileDescriptor); err != nil {
420 return err
421 }
422 registerExtensions(&r.cachedExts, fileDescriptor)
423 r.printer.Printf("* Server reflection has resolved file %q\n", fileDescriptor.Path())
424 return nil
425}
426
427func (r *reflectionResolver) sendLocked(req *reflectionv1.ServerReflectionRequest) (*reflectionv1.ServerReflectionResponse, error) {
428 stream, isNew := r.getStreamLocked()

Callers 1

cacheFilesLockedMethod · 0.95

Calls 6

fileByNameLockedMethod · 0.95
PathMethod · 0.95
registerExtensionsFunction · 0.85
GetNameMethod · 0.65
PrintfMethod · 0.65
FindFileByPathMethod · 0.45

Tested by

no test coverage detected