Skip to content

Commit ff3df29

Browse files
committed
Accept generic ImageFiles from AndroidCompositeDiskConfig
This will avoid an expansion of arguments, and is a step towards reusing the same ImageFile instances between create_dynamic_disk_files.cc and assemble_cvd.cc without double-creating them. Bug: b/472374649
1 parent fc48499 commit ff3df29

File tree

10 files changed

+63
-46
lines changed

10 files changed

+63
-46
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ cf_cc_binary(
4141
"//cuttlefish/host/commands/assemble_cvd:touchpad",
4242
"//cuttlefish/host/commands/assemble_cvd/disk:ap_composite_disk",
4343
"//cuttlefish/host/commands/assemble_cvd/disk:factory_reset_protected",
44+
"//cuttlefish/host/commands/assemble_cvd/disk:image_file",
4445
"//cuttlefish/host/commands/assemble_cvd/disk:metadata_image",
4546
"//cuttlefish/host/commands/assemble_cvd/disk:misc_image",
4647
"//cuttlefish/host/commands/assemble_cvd/disk:os_composite_disk",
@@ -160,6 +161,7 @@ cf_cc_library(
160161
"//cuttlefish/host/commands/assemble_cvd/disk:generate_persistent_bootconfig",
161162
"//cuttlefish/host/commands/assemble_cvd/disk:generate_persistent_vbmeta",
162163
"//cuttlefish/host/commands/assemble_cvd/disk:hwcomposer_pmem",
164+
"//cuttlefish/host/commands/assemble_cvd/disk:image_file",
163165
"//cuttlefish/host/commands/assemble_cvd/disk:initialize_instance_composite_disk",
164166
"//cuttlefish/host/commands/assemble_cvd/disk:kernel_ramdisk_repacker",
165167
"//cuttlefish/host/commands/assemble_cvd/disk:metadata_image",

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

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include "cuttlefish/host/commands/assemble_cvd/create_dynamic_disk_files.h"
3838
#include "cuttlefish/host/commands/assemble_cvd/disk/ap_composite_disk.h"
3939
#include "cuttlefish/host/commands/assemble_cvd/disk/factory_reset_protected.h"
40+
#include "cuttlefish/host/commands/assemble_cvd/disk/image_file.h"
4041
#include "cuttlefish/host/commands/assemble_cvd/disk/metadata_image.h"
4142
#include "cuttlefish/host/commands/assemble_cvd/disk/misc_image.h"
4243
#include "cuttlefish/host/commands/assemble_cvd/disk/os_composite_disk.h"
@@ -338,14 +339,16 @@ Result<const CuttlefishConfig*> InitFilesystemAndCreateConfig(
338339
// if any device needs to rebuild its composite disk,
339340
// then don't preserve any files and delete everything.
340341
for (const auto& instance : config.Instances()) {
341-
MetadataImage metadata(instance);
342-
MiscImage misc(instance);
342+
std::vector<std::unique_ptr<ImageFile>> image_files;
343+
344+
image_files.emplace_back(std::make_unique<MetadataImage>(instance));
345+
image_files.emplace_back(std::make_unique<MiscImage>(instance));
346+
343347
Result<std::optional<ChromeOsStateImage>> chrome_os_state =
344348
CF_EXPECT(ChromeOsStateImage::Reuse(instance));
345349
if (chrome_os_state.ok()) {
346-
Result<DiskBuilder> os_builder =
347-
OsCompositeDiskBuilder(config, instance, *chrome_os_state, metadata,
348-
misc, system_image_dir);
350+
Result<DiskBuilder> os_builder = OsCompositeDiskBuilder(
351+
config, instance, *chrome_os_state, image_files, system_image_dir);
349352
if (!os_builder.ok()) {
350353
creating_os_disk = true;
351354
} else {

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

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
#include <sys/statvfs.h>
2020

21+
#include <memory>
2122
#include <string>
2223

2324
#include <android-base/logging.h>
@@ -39,6 +40,7 @@
3940
#include "cuttlefish/host/commands/assemble_cvd/disk/generate_persistent_bootconfig.h"
4041
#include "cuttlefish/host/commands/assemble_cvd/disk/generate_persistent_vbmeta.h"
4142
#include "cuttlefish/host/commands/assemble_cvd/disk/hwcomposer_pmem.h"
43+
#include "cuttlefish/host/commands/assemble_cvd/disk/image_file.h"
4244
#include "cuttlefish/host/commands/assemble_cvd/disk/initialize_instance_composite_disk.h"
4345
#include "cuttlefish/host/commands/assemble_cvd/disk/kernel_ramdisk_repacker.h"
4446
#include "cuttlefish/host/commands/assemble_cvd/disk/metadata_image.h"
@@ -158,14 +160,17 @@ Result<void> CreateDynamicDiskFiles(
158160
}
159161
}
160162

161-
MetadataImage metadata(instance);
162-
CF_EXPECT(metadata.Generate());
163+
std::vector<std::unique_ptr<ImageFile>> image_files;
163164

164-
MiscImage misc(instance);
165-
CF_EXPECT(misc.Generate());
165+
image_files.emplace_back(std::make_unique<MetadataImage>(instance));
166+
image_files.emplace_back(std::make_unique<MiscImage>(instance));
167+
168+
for (auto& image_file : image_files) {
169+
CF_EXPECT(image_file->Generate());
170+
}
166171

167172
DiskBuilder os_disk_builder = CF_EXPECT(OsCompositeDiskBuilder(
168-
config, instance, chrome_os_state, metadata, misc, system_image_dirs));
173+
config, instance, chrome_os_state, image_files, system_image_dirs));
169174
const auto os_built_composite =
170175
CF_EXPECT(os_disk_builder.BuildCompositeDiskIfNecessary());
171176

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@ cf_cc_library(
2222
hdrs = ["android_composite_disk_config.h"],
2323
deps = [
2424
"//cuttlefish/common/libs/utils:files",
25-
"//cuttlefish/host/commands/assemble_cvd/disk:metadata_image",
26-
"//cuttlefish/host/commands/assemble_cvd/disk:misc_image",
25+
"//cuttlefish/host/commands/assemble_cvd/disk:image_file",
2726
"//cuttlefish/host/commands/assemble_cvd/flags:system_image_dir",
2827
"//cuttlefish/host/libs/config:cuttlefish_config",
2928
"//cuttlefish/host/libs/image_aggregator",
@@ -40,8 +39,7 @@ cf_cc_library(
4039
deps = [
4140
"//cuttlefish/common/libs/utils:files",
4241
"//cuttlefish/host/commands/assemble_cvd/disk:android_composite_disk_config",
43-
"//cuttlefish/host/commands/assemble_cvd/disk:metadata_image",
44-
"//cuttlefish/host/commands/assemble_cvd/disk:misc_image",
42+
"//cuttlefish/host/commands/assemble_cvd/disk:image_file",
4543
"//cuttlefish/host/commands/assemble_cvd/flags:system_image_dir",
4644
"//cuttlefish/host/libs/config:cuttlefish_config",
4745
"//cuttlefish/host/libs/image_aggregator",
@@ -281,9 +279,8 @@ cf_cc_library(
281279
"//cuttlefish/host/commands/assemble_cvd/disk:chromeos_composite_disk",
282280
"//cuttlefish/host/commands/assemble_cvd/disk:chromeos_state",
283281
"//cuttlefish/host/commands/assemble_cvd/disk:fuchsia_composite_disk",
282+
"//cuttlefish/host/commands/assemble_cvd/disk:image_file",
284283
"//cuttlefish/host/commands/assemble_cvd/disk:linux_composite_disk",
285-
"//cuttlefish/host/commands/assemble_cvd/disk:metadata_image",
286-
"//cuttlefish/host/commands/assemble_cvd/disk:misc_image",
287284
"//cuttlefish/host/commands/assemble_cvd/flags:system_image_dir",
288285
"//cuttlefish/host/libs/config:boot_flow",
289286
"//cuttlefish/host/libs/config:cuttlefish_config",

base/cvd/cuttlefish/host/commands/assemble_cvd/disk/android_composite_disk_config.cc

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,17 @@
1818

1919
#include <sys/statvfs.h>
2020

21+
#include <functional>
22+
#include <map>
2123
#include <optional>
24+
#include <set>
2225
#include <string>
2326
#include <vector>
2427

2528
#include "absl/strings/str_cat.h"
2629
#include "android-base/strings.h"
2730

2831
#include "cuttlefish/common/libs/utils/files.h"
29-
#include "cuttlefish/host/commands/assemble_cvd/disk/metadata_image.h"
30-
#include "cuttlefish/host/commands/assemble_cvd/disk/misc_image.h"
3132
#include "cuttlefish/host/commands/assemble_cvd/flags/system_image_dir.h"
3233
#include "cuttlefish/host/libs/config/cuttlefish_config.h"
3334
#include "cuttlefish/host/libs/image_aggregator/image_aggregator.h"
@@ -69,7 +70,7 @@ std::optional<ImagePartition> HibernationImage(
6970

7071
Result<std::vector<ImagePartition>> AndroidCompositeDiskConfig(
7172
const CuttlefishConfig::InstanceSpecific& instance,
72-
const MetadataImage& metadata_image, const MiscImage& misc_image,
73+
const std::vector<std::unique_ptr<ImageFile>>& image_files,
7374
const SystemImageDirFlag& system_image_dir) {
7475
std::vector<ImagePartition> partitions;
7576

@@ -92,8 +93,8 @@ Result<std::vector<ImagePartition>> AndroidCompositeDiskConfig(
9293
const std::map<std::string_view, std::string> primary_paths = {
9394
{kPartitions.boot, instance.new_boot_image()},
9495
{kPartitions.init_boot, instance.init_boot_image()},
95-
{kPartitions.metadata, CF_EXPECT(metadata_image.Path())},
96-
{kPartitions.misc, CF_EXPECT(misc_image.Path())},
96+
{kPartitions.metadata, ""},
97+
{kPartitions.misc, ""},
9798
{kPartitions.super, instance.new_super_image()},
9899
{kPartitions.userdata, instance.new_data_image()},
99100
{kPartitions.vbmeta, instance.new_vbmeta_image()},
@@ -112,9 +113,18 @@ Result<std::vector<ImagePartition>> AndroidCompositeDiskConfig(
112113
{kPartitions.userdata, instance.data_image()},
113114
};
114115

116+
std::map<std::string, std::string, std::less<void>> dynamic_paths;
117+
for (const auto& image_file : image_files) {
118+
const auto& [it, inserted] = dynamic_paths.emplace(
119+
image_file->Name(), CF_EXPECT(image_file->Path()));
120+
CF_EXPECTF(!!inserted, "Duplicate images for '{}'", image_file->Name());
121+
}
122+
115123
for (const auto& [partition, path] : primary_paths) {
116124
std::string path_used;
117-
if (FileExists(path)) {
125+
if (auto it = dynamic_paths.find(partition); it != dynamic_paths.end()) {
126+
path_used = it->second;
127+
} else if (FileExists(path)) {
118128
path_used = path;
119129
} else if (auto it = fallback_paths.find(partition);
120130
it != fallback_paths.end() && FileExists(it->second)) {

base/cvd/cuttlefish/host/commands/assemble_cvd/disk/android_composite_disk_config.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@
1515
*/
1616
#pragma once
1717

18+
#include <memory>
1819
#include <vector>
1920

20-
#include "cuttlefish/host/commands/assemble_cvd/disk/metadata_image.h"
21-
#include "cuttlefish/host/commands/assemble_cvd/disk/misc_image.h"
21+
#include "cuttlefish/host/commands/assemble_cvd/disk/image_file.h"
2222
#include "cuttlefish/host/commands/assemble_cvd/flags/system_image_dir.h"
2323
#include "cuttlefish/host/libs/config/cuttlefish_config.h"
2424
#include "cuttlefish/host/libs/image_aggregator/image_aggregator.h"
@@ -27,7 +27,7 @@
2727
namespace cuttlefish {
2828

2929
Result<std::vector<ImagePartition>> AndroidCompositeDiskConfig(
30-
const CuttlefishConfig::InstanceSpecific& instance, const MetadataImage&,
31-
const MiscImage&, const SystemImageDirFlag&);
30+
const CuttlefishConfig::InstanceSpecific& instance,
31+
const std::vector<std::unique_ptr<ImageFile>>&, const SystemImageDirFlag&);
3232

3333
} // namespace cuttlefish

base/cvd/cuttlefish/host/commands/assemble_cvd/disk/android_efi_loader_composite_disk.cc

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,11 @@
1616

1717
#include "cuttlefish/host/commands/assemble_cvd/disk/android_efi_loader_composite_disk.h"
1818

19+
#include <memory>
1920
#include <vector>
2021

2122
#include "cuttlefish/common/libs/utils/files.h"
2223
#include "cuttlefish/host/commands/assemble_cvd/disk/android_composite_disk_config.h"
23-
#include "cuttlefish/host/commands/assemble_cvd/disk/metadata_image.h"
24-
#include "cuttlefish/host/commands/assemble_cvd/disk/misc_image.h"
2524
#include "cuttlefish/host/commands/assemble_cvd/flags/system_image_dir.h"
2625
#include "cuttlefish/host/libs/config/cuttlefish_config.h"
2726
#include "cuttlefish/host/libs/image_aggregator/gpt_type_guid.h"
@@ -32,10 +31,10 @@ namespace cuttlefish {
3231

3332
Result<std::vector<ImagePartition>> AndroidEfiLoaderCompositeDiskConfig(
3433
const CuttlefishConfig::InstanceSpecific& instance,
35-
const MetadataImage& metadata, const MiscImage& misc,
34+
const std::vector<std::unique_ptr<ImageFile>>& image_files,
3635
const SystemImageDirFlag& system_image_dir) {
3736
std::vector<ImagePartition> partitions = CF_EXPECT(
38-
AndroidCompositeDiskConfig(instance, metadata, misc, system_image_dir));
37+
AndroidCompositeDiskConfig(instance, image_files, system_image_dir));
3938
// Cuttlefish uboot EFI bootflow by default looks at the first partition
4039
// for EFI application. Thus we put "android_esp" at the beginning.
4140
partitions.insert(

base/cvd/cuttlefish/host/commands/assemble_cvd/disk/android_efi_loader_composite_disk.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@
1616

1717
#pragma once
1818

19+
#include <memory>
1920
#include <vector>
2021

21-
#include "cuttlefish/host/commands/assemble_cvd/disk/metadata_image.h"
22-
#include "cuttlefish/host/commands/assemble_cvd/disk/misc_image.h"
22+
#include "cuttlefish/host/commands/assemble_cvd/disk/image_file.h"
2323
#include "cuttlefish/host/commands/assemble_cvd/flags/system_image_dir.h"
2424
#include "cuttlefish/host/libs/config/cuttlefish_config.h"
2525
#include "cuttlefish/host/libs/image_aggregator/image_aggregator.h"
@@ -28,7 +28,7 @@
2828
namespace cuttlefish {
2929

3030
Result<std::vector<ImagePartition>> AndroidEfiLoaderCompositeDiskConfig(
31-
const CuttlefishConfig::InstanceSpecific& instance, const MetadataImage&,
32-
const MiscImage&, const SystemImageDirFlag&);
31+
const CuttlefishConfig::InstanceSpecific& instance,
32+
const std::vector<std::unique_ptr<ImageFile>>&, const SystemImageDirFlag&);
3333

3434
} // namespace cuttlefish

base/cvd/cuttlefish/host/commands/assemble_cvd/disk/os_composite_disk.cc

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
#include "cuttlefish/host/commands/assemble_cvd/disk/os_composite_disk.h"
1818

19+
#include <memory>
1920
#include <optional>
2021
#include <vector>
2122

@@ -27,9 +28,8 @@
2728
#include "cuttlefish/host/commands/assemble_cvd/disk/chromeos_composite_disk.h"
2829
#include "cuttlefish/host/commands/assemble_cvd/disk/chromeos_state.h"
2930
#include "cuttlefish/host/commands/assemble_cvd/disk/fuchsia_composite_disk.h"
31+
#include "cuttlefish/host/commands/assemble_cvd/disk/image_file.h"
3032
#include "cuttlefish/host/commands/assemble_cvd/disk/linux_composite_disk.h"
31-
#include "cuttlefish/host/commands/assemble_cvd/disk/metadata_image.h"
32-
#include "cuttlefish/host/commands/assemble_cvd/disk/misc_image.h"
3333
#include "cuttlefish/host/commands/assemble_cvd/disk_builder.h"
3434
#include "cuttlefish/host/commands/assemble_cvd/flags/system_image_dir.h"
3535
#include "cuttlefish/host/libs/config/boot_flow.h"
@@ -43,15 +43,15 @@ namespace {
4343
Result<std::vector<ImagePartition>> GetOsCompositeDiskConfig(
4444
const CuttlefishConfig::InstanceSpecific& instance,
4545
const std::optional<ChromeOsStateImage>& chrome_os_state,
46-
const MetadataImage& metadata, const MiscImage& misc,
46+
const std::vector<std::unique_ptr<ImageFile>>& image_files,
4747
const SystemImageDirFlag& system_image_dir) {
4848
switch (instance.boot_flow()) {
4949
case BootFlow::Android:
50-
return CF_EXPECT(AndroidCompositeDiskConfig(instance, metadata, misc,
51-
system_image_dir));
50+
return CF_EXPECT(
51+
AndroidCompositeDiskConfig(instance, image_files, system_image_dir));
5252
case BootFlow::AndroidEfiLoader:
5353
return CF_EXPECT(AndroidEfiLoaderCompositeDiskConfig(
54-
instance, metadata, misc, system_image_dir));
54+
instance, image_files, system_image_dir));
5555
case BootFlow::ChromeOs:
5656
CHECK(chrome_os_state.has_value());
5757
return ChromeOsCompositeDiskConfig(instance, *chrome_os_state);
@@ -70,7 +70,7 @@ Result<DiskBuilder> OsCompositeDiskBuilder(
7070
const CuttlefishConfig& config,
7171
const CuttlefishConfig::InstanceSpecific& instance,
7272
const std::optional<ChromeOsStateImage>& chrome_os_state,
73-
const MetadataImage& metadata, const MiscImage& misc,
73+
const std::vector<std::unique_ptr<ImageFile>>& image_files,
7474
const SystemImageDirFlag& system_image_dir) {
7575
auto builder =
7676
DiskBuilder()
@@ -85,7 +85,7 @@ Result<DiskBuilder> OsCompositeDiskBuilder(
8585
}
8686
return builder
8787
.Partitions(CF_EXPECT(GetOsCompositeDiskConfig(
88-
instance, chrome_os_state, metadata, misc, system_image_dir)))
88+
instance, chrome_os_state, image_files, system_image_dir)))
8989
.HeaderPath(instance.PerInstancePath("os_composite_gpt_header.img"))
9090
.FooterPath(instance.PerInstancePath("os_composite_gpt_footer.img"))
9191
.CompositeDiskPath(instance.os_composite_disk_path());

base/cvd/cuttlefish/host/commands/assemble_cvd/disk/os_composite_disk.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,12 @@
1616

1717
#pragma once
1818

19+
#include <memory>
1920
#include <optional>
21+
#include <vector>
2022

2123
#include "cuttlefish/host/commands/assemble_cvd/disk/chromeos_state.h"
22-
#include "cuttlefish/host/commands/assemble_cvd/disk/metadata_image.h"
23-
#include "cuttlefish/host/commands/assemble_cvd/disk/misc_image.h"
24+
#include "cuttlefish/host/commands/assemble_cvd/disk/image_file.h"
2425
#include "cuttlefish/host/commands/assemble_cvd/disk_builder.h"
2526
#include "cuttlefish/host/commands/assemble_cvd/flags/system_image_dir.h"
2627
#include "cuttlefish/host/libs/config/cuttlefish_config.h"
@@ -31,7 +32,7 @@ namespace cuttlefish {
3132
Result<DiskBuilder> OsCompositeDiskBuilder(
3233
const CuttlefishConfig& config,
3334
const CuttlefishConfig::InstanceSpecific& instance,
34-
const std::optional<ChromeOsStateImage>&, const MetadataImage&,
35-
const MiscImage&, const SystemImageDirFlag&);
35+
const std::optional<ChromeOsStateImage>&,
36+
const std::vector<std::unique_ptr<ImageFile>>&, const SystemImageDirFlag&);
3637

3738
} // namespace cuttlefish

0 commit comments

Comments
 (0)