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

Function newGetDigestFuncForModuleAndDigestType

private/bufpkg/bufmodule/module.go:437–486  ·  view source on GitHub ↗
(module *module, digestType DigestType)

Source from the content-addressed store, hash-verified

435}
436
437func newGetDigestFuncForModuleAndDigestType(module *module, digestType DigestType) func() (Digest, error) {
438 return func() (Digest, error) {
439 bucket, err := module.getBucket()
440 if err != nil {
441 return nil, err
442 }
443 switch digestType {
444 case DigestTypeB4:
445 v1BufYAMLObjectData, err := module.getV1BufYAMLObjectData()
446 if err != nil {
447 return nil, err
448 }
449 v1BufLockObjectData, err := module.getV1BufLockObjectData()
450 if err != nil {
451 return nil, err
452 }
453 return getB4Digest(module.ctx, bucket, v1BufYAMLObjectData, v1BufLockObjectData)
454 case DigestTypeB5:
455 // B5 digests are calculated from the Module's content and its dependencies.
456 //
457 // Dependencies are all direct and transitive dependencies of the Module.
458 // For local Modules, the dependencies are resolved to the current ModuleSet.
459 // For remote Modules, the dependencies are the ModuleKeys of
460 // the direct and transitive dependencies of the Module at the specific commit.
461 //
462 // This is effectively the same. The local Modules have a dependency at the current commit,
463 // and the remote Modules have a dependency at a specific commit. Pushing up a local Module
464 // as a remote Module will result in the same Digest.
465 //
466 // See the comment on getDepModuleKeysB5 for more information.
467 if !module.isLocal {
468 depModuleKeys, err := module.getDepModuleKeysB5()
469 if err != nil {
470 return nil, err
471 }
472 return getB5DigestForBucketAndDepModuleKeys(module.ctx, bucket, depModuleKeys)
473 }
474 // ModuleDeps returns the dependent Modules resolved for the target Module in the ModuleSet.
475 // A local Module will recursively resolve the Digest of other dependent local Modules.
476 // This is done by calling Module.Digest(DigestTypeB5) on each ModuleDep.
477 moduleDeps, err := module.ModuleDeps()
478 if err != nil {
479 return nil, err
480 }
481 return getB5DigestForBucketAndModuleDeps(module.ctx, bucket, moduleDeps)
482 default:
483 return nil, syserror.Newf("unknown DigestType: %v", digestType)
484 }
485 }
486}
487
488func newGetModuleDepsFuncForModule(module *module) func() ([]ModuleDep, error) {
489 return func() ([]ModuleDep, error) {

Calls 5

NewfFunction · 0.92
getB4DigestFunction · 0.85
ModuleDepsMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…