MCPcopy Create free account
hub / github.com/defold/defold / GetDependenciesInternal

Function GetDependenciesInternal

engine/resource/src/resource_mounts.cpp:448–530  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

446}
447
448static dmResource::Result GetDependenciesInternal(DependencyIterContext* ctx, const dmhash_t url_hash)
449{
450 ResourceMountsContext* mounts_ctx = (ResourceMountsContext*)ctx->m_Mounts;
451 DM_MUTEX_SCOPED_LOCK(mounts_ctx->m_Mutex);
452
453 uint32_t num_mounts = mounts_ctx->m_Mounts.Size();
454 bool only_missing = ctx->m_OnlyMissing;
455 bool include_requested_url = ctx->m_IncludeRequestedUrl;
456
457 dmArray<dmhash_t> dependencies; // allocate it outside of the loop
458
459 for (uint32_t i = 0; i < num_mounts; ++i)
460 {
461 ArchiveMount& mount = mounts_ctx->m_Mounts[i];
462
463 dmResource::Manifest* manifest;
464 dmResourceProvider::Result presult = dmResourceProvider::GetManifest(mount.m_Archive, &manifest);
465 if (presult != dmResourceProvider::RESULT_OK)
466 continue;
467
468 dependencies.SetSize(0);
469 dmResource::Result result = dmResource::GetDependencies(manifest, url_hash, dependencies);
470 if (dmResource::RESULT_RESOURCE_NOT_FOUND == result)
471 continue;
472
473 if (include_requested_url) {
474 // include only once
475 include_requested_url = false;
476 dependencies.OffsetCapacity(1);
477 int size = dependencies.Size();
478 dependencies.SetSize(size + 1);
479 dependencies[size] = url_hash;
480 }
481
482 uint32_t hash_len = dmResource::GetEntryHashLength(manifest);
483
484 for (uint32_t d = 0; d < dependencies.Size(); ++d)
485 {
486 dmhash_t dep_hash = dependencies[d];
487 bool* visited = ctx->m_Visited.Get(dep_hash);
488 if (visited)
489 continue;
490
491 bool exists = true;
492 if (only_missing)
493 {
494 exists = ResourceExists(mounts_ctx, dep_hash) == dmResource::RESULT_OK;
495 }
496
497 UpdateVisited(ctx->m_Visited, dep_hash, exists);
498
499 // If we only want the missing ones
500 if (only_missing && exists)
501 continue;
502
503
504 SGetDependenciesResult result = {0};
505 result.m_UrlHash = dep_hash;

Callers 1

GetDependenciesFunction · 0.85

Calls 10

GetEntryHashLengthFunction · 0.85
UpdateVisitedFunction · 0.85
GetDependenciesFunction · 0.70
ResourceExistsFunction · 0.70
FindEntryFunction · 0.70
GetManifestFunction · 0.50
SizeMethod · 0.45
SetSizeMethod · 0.45
OffsetCapacityMethod · 0.45
GetMethod · 0.45

Tested by

no test coverage detected