2525#include < android-base/parseint.h>
2626#include < android-base/strings.h>
2727#include < gflags/gflags.h>
28+ #include " absl/strings/match.h"
2829
2930#include " cuttlefish/common/libs/utils/files.h"
3031#include " cuttlefish/common/libs/utils/result.h"
5556#include " cuttlefish/host/libs/config/ap_boot_flow.h"
5657#include " cuttlefish/host/libs/config/cuttlefish_config.h"
5758#include " cuttlefish/host/libs/config/data_image.h"
59+ #include " cuttlefish/host/libs/config/fetched_archive.h"
5860#include " cuttlefish/host/libs/config/fetcher_config.h"
61+ #include " cuttlefish/host/libs/config/file_source.h"
5962#include " cuttlefish/host/libs/config/vmm_mode.h"
6063
6164namespace cuttlefish {
65+ namespace {
6266
63- static uint64_t AvailableSpaceAtPath (const std::string& path) {
67+ uint64_t AvailableSpaceAtPath (const std::string& path) {
6468 struct statvfs vfs{};
6569 if (statvfs (path.c_str (), &vfs) != 0 ) {
6670 int error_num = errno;
@@ -72,11 +76,42 @@ static uint64_t AvailableSpaceAtPath(const std::string& path) {
7276 return static_cast <uint64_t >(vfs.f_frsize ) * vfs.f_bavail ;
7377}
7478
79+ Result<FetchedArchive> FindImgZip (const FetcherConfig& fetcher_config,
80+ std::string_view system_image_dir) {
81+ for (const auto & [member_name, member] : fetcher_config.get_cvd_files ()) {
82+ if (member.source != FileSource::DEFAULT_BUILD) {
83+ continue ;
84+ } else if (absl::StrContains (member_name, " -img-" )) {
85+ return CF_EXPECT (FetchedArchive::Create (
86+ fetcher_config, FileSource::DEFAULT_BUILD, member_name));
87+ } else if (absl::StrContains (member.archive_source , " -img-" )) {
88+ return CF_EXPECT (FetchedArchive::Create (
89+ fetcher_config, FileSource::DEFAULT_BUILD, member.archive_source ));
90+ }
91+ }
92+ return CF_ERR (" No img zip found" );
93+ }
94+
95+ } // namespace
96+
7597Result<void > CreateDynamicDiskFiles (
7698 const FetcherConfigs& fetcher_configs, const CuttlefishConfig& config,
77- const SystemImageDirFlag& system_image_dir ) {
99+ const SystemImageDirFlag& system_image_dirs ) {
78100 size_t instance_index = 0 ;
79101 for (const auto & instance : config.Instances ()) {
102+ const FetcherConfig& fetcher_config =
103+ fetcher_configs.ForInstance (instance_index);
104+ std::string system_image_dir = system_image_dirs.ForIndex (instance_index);
105+
106+ if (Result<FetchedArchive> img_zip =
107+ FindImgZip (fetcher_config, system_image_dir);
108+ img_zip.ok ()) {
109+ LOG (DEBUG) << " Found image zip: " << *img_zip;
110+ } else {
111+ LOG (DEBUG) << " Error accessing '-img-*.zip', expected for a local build." ;
112+ LOG (DEBUG) << img_zip.error ().FormatForEnv ();
113+ }
114+
80115 std::optional<ChromeOsStateImage> chrome_os_state =
81116 CF_EXPECT (ChromeOsStateImage::CreateIfNecessary (instance));
82117
@@ -85,8 +120,7 @@ Result<void> CreateDynamicDiskFiles(
85120 CF_EXPECT (BootloaderPresentCheck (instance));
86121 CF_EXPECT (Gem5ImageUnpacker (config)); // Requires RepackKernelRamdisk
87122 CF_EXPECT (InitializeEspImage (config, instance));
88- CF_EXPECT (RebuildSuperImageIfNecessary (
89- fetcher_configs.ForInstance (instance_index), instance));
123+ CF_EXPECT (RebuildSuperImageIfNecessary (fetcher_config, instance));
90124
91125 CF_EXPECT (InitializeAccessKregistryImage (instance));
92126 CF_EXPECT (InitializeHwcomposerPmemImage (instance));
@@ -128,7 +162,7 @@ Result<void> CreateDynamicDiskFiles(
128162 MiscImage misc = CF_EXPECT (MiscImage::ReuseOrCreate (instance));
129163
130164 DiskBuilder os_disk_builder = OsCompositeDiskBuilder (
131- config, instance, chrome_os_state, metadata, misc, system_image_dir );
165+ config, instance, chrome_os_state, metadata, misc, system_image_dirs );
132166 const auto os_built_composite =
133167 CF_EXPECT (os_disk_builder.BuildCompositeDiskIfNecessary ());
134168
0 commit comments