Skip to content

Commit cd5c86f

Browse files
committed
Report information from the image zip file if it is present
In local builds this would only be accessible from a dist build, which we don't currently rely on. Tested against build fetched with and without `--keep_downloaded_archives`. Bug: b/463470215
1 parent 2c9cf49 commit cd5c86f

File tree

2 files changed

+42
-5
lines changed

2 files changed

+42
-5
lines changed

base/cvd/cuttlefish/host/commands/assemble_cvd/BUILD.bazel

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,11 +175,14 @@ cf_cc_library(
175175
"//cuttlefish/host/libs/config:ap_boot_flow",
176176
"//cuttlefish/host/libs/config:cuttlefish_config",
177177
"//cuttlefish/host/libs/config:data_image",
178+
"//cuttlefish/host/libs/config:fetched_archive",
178179
"//cuttlefish/host/libs/config:fetcher_config",
180+
"//cuttlefish/host/libs/config:file_source",
179181
"//cuttlefish/host/libs/config:instance_nums",
180182
"//cuttlefish/host/libs/config:vmm_mode",
181183
"//cuttlefish/host/libs/feature:inject",
182184
"//libbase",
185+
"@abseil-cpp//absl/strings",
183186
"@gflags",
184187
],
185188
)

base/cvd/cuttlefish/host/commands/assemble_cvd/create_dynamic_disk_files.cc

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
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"
@@ -55,12 +56,15 @@
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

6164
namespace 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+
7597
Result<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

Comments
 (0)