This is an automated email from the ASF dual-hosted git repository.

gangwu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iceberg-cpp.git


The following commit(s) were added to refs/heads/main by this push:
     new 3691a5ca refactor: add a manifest dir to hold all manifest related 
files (#372)
3691a5ca is described below

commit 3691a5ca69118fabf70c73a40dc115382a5adeb0
Author: Junwang Zhao <[email protected]>
AuthorDate: Mon Dec 1 10:09:31 2025 +0800

    refactor: add a manifest dir to hold all manifest related files (#372)
    
    Improve code organization by collecting manifest-related files into a
    dedicate directory. Writer helpers are renamed with _internal.h suffix
    to prevent installation, keeping the public API clean.
---
 src/iceberg/CMakeLists.txt                         | 21 ++++++------
 src/iceberg/inheritable_metadata.cc                |  4 +--
 src/iceberg/manifest/CMakeLists.txt                | 18 ++++++++++
 src/iceberg/{ => manifest}/manifest_adapter.cc     |  7 ++--
 .../manifest_adapter_internal.h}                   |  2 +-
 src/iceberg/{ => manifest}/manifest_entry.cc       |  2 +-
 src/iceberg/{ => manifest}/manifest_entry.h        |  2 ++
 src/iceberg/{ => manifest}/manifest_list.cc        |  2 +-
 src/iceberg/{ => manifest}/manifest_list.h         |  2 +-
 src/iceberg/{ => manifest}/manifest_reader.cc      |  8 ++---
 src/iceberg/{ => manifest}/manifest_reader.h       |  2 +-
 .../{ => manifest}/manifest_reader_internal.cc     |  4 +--
 .../{ => manifest}/manifest_reader_internal.h      |  4 +--
 src/iceberg/{ => manifest}/manifest_writer.cc      | 39 +++++++++++++---------
 src/iceberg/{ => manifest}/manifest_writer.h       | 28 ++++++++--------
 src/iceberg/manifest/meson.build                   | 26 +++++++++++++++
 src/iceberg/{ => manifest}/v1_metadata.cc          |  7 ++--
 .../v1_metadata_internal.h}                        |  4 +--
 src/iceberg/{ => manifest}/v2_metadata.cc          |  7 ++--
 .../v2_metadata_internal.h}                        |  4 +--
 src/iceberg/{ => manifest}/v3_metadata.cc          |  7 ++--
 .../v3_metadata_internal.h}                        |  4 +--
 src/iceberg/meson.build                            | 27 ++++++---------
 src/iceberg/partition_summary.cc                   |  2 +-
 src/iceberg/row/manifest_wrapper.cc                |  2 +-
 src/iceberg/row/manifest_wrapper.h                 |  2 +-
 src/iceberg/table_scan.cc                          |  6 ++--
 src/iceberg/table_scan.h                           |  2 +-
 src/iceberg/test/file_scan_task_test.cc            |  2 +-
 .../test/manifest_list_reader_writer_test.cc       |  6 ++--
 src/iceberg/test/manifest_list_versions_test.cc    |  8 ++---
 src/iceberg/test/manifest_reader_writer_test.cc    |  8 ++---
 src/iceberg/test/manifest_writer_versions_test.cc  |  8 ++---
 src/iceberg/test/struct_like_test.cc               |  4 +--
 34 files changed, 164 insertions(+), 117 deletions(-)

diff --git a/src/iceberg/CMakeLists.txt b/src/iceberg/CMakeLists.txt
index fb0c6ad7..9b3e3b89 100644
--- a/src/iceberg/CMakeLists.txt
+++ b/src/iceberg/CMakeLists.txt
@@ -33,12 +33,15 @@ set(ICEBERG_SOURCES
     file_writer.cc
     inheritable_metadata.cc
     json_internal.cc
-    manifest_adapter.cc
-    manifest_entry.cc
-    manifest_list.cc
-    manifest_reader.cc
-    manifest_reader_internal.cc
-    manifest_writer.cc
+    manifest/manifest_adapter.cc
+    manifest/manifest_entry.cc
+    manifest/manifest_list.cc
+    manifest/manifest_reader.cc
+    manifest/manifest_reader_internal.cc
+    manifest/manifest_writer.cc
+    manifest/v1_metadata.cc
+    manifest/v2_metadata.cc
+    manifest/v3_metadata.cc
     metadata_columns.cc
     name_mapping.cc
     partition_field.cc
@@ -74,10 +77,7 @@ set(ICEBERG_SOURCES
     util/temporal_util.cc
     util/timepoint.cc
     util/truncate_util.cc
-    util/uuid.cc
-    v1_metadata.cc
-    v2_metadata.cc
-    v3_metadata.cc)
+    util/uuid.cc)
 
 set(ICEBERG_STATIC_BUILD_INTERFACE_LIBS)
 set(ICEBERG_SHARED_BUILD_INTERFACE_LIBS)
@@ -131,6 +131,7 @@ iceberg_install_all_headers(iceberg)
 
 add_subdirectory(catalog)
 add_subdirectory(expression)
+add_subdirectory(manifest)
 add_subdirectory(row)
 add_subdirectory(util)
 
diff --git a/src/iceberg/inheritable_metadata.cc 
b/src/iceberg/inheritable_metadata.cc
index 58eb2834..081b90ac 100644
--- a/src/iceberg/inheritable_metadata.cc
+++ b/src/iceberg/inheritable_metadata.cc
@@ -23,8 +23,8 @@
 
 #include <iceberg/result.h>
 
-#include "iceberg/manifest_entry.h"
-#include "iceberg/manifest_list.h"
+#include "iceberg/manifest/manifest_entry.h"
+#include "iceberg/manifest/manifest_list.h"
 #include "iceberg/snapshot.h"
 
 namespace iceberg {
diff --git a/src/iceberg/manifest/CMakeLists.txt 
b/src/iceberg/manifest/CMakeLists.txt
new file mode 100644
index 00000000..cb77f73e
--- /dev/null
+++ b/src/iceberg/manifest/CMakeLists.txt
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+iceberg_install_all_headers(iceberg/manifest)
diff --git a/src/iceberg/manifest_adapter.cc 
b/src/iceberg/manifest/manifest_adapter.cc
similarity index 99%
rename from src/iceberg/manifest_adapter.cc
rename to src/iceberg/manifest/manifest_adapter.cc
index 94bedced..da75a468 100644
--- a/src/iceberg/manifest_adapter.cc
+++ b/src/iceberg/manifest/manifest_adapter.cc
@@ -17,16 +17,15 @@
  * under the License.
  */
 
-#include "iceberg/manifest_adapter.h"
-
 #include <memory>
 #include <utility>
 
 #include <nanoarrow/nanoarrow.h>
 
 #include "iceberg/arrow/nanoarrow_status_internal.h"
-#include "iceberg/manifest_entry.h"
-#include "iceberg/manifest_list.h"
+#include "iceberg/manifest/manifest_adapter_internal.h"
+#include "iceberg/manifest/manifest_entry.h"
+#include "iceberg/manifest/manifest_list.h"
 #include "iceberg/result.h"
 #include "iceberg/schema.h"
 #include "iceberg/util/checked_cast.h"
diff --git a/src/iceberg/manifest_adapter.h 
b/src/iceberg/manifest/manifest_adapter_internal.h
similarity index 98%
rename from src/iceberg/manifest_adapter.h
rename to src/iceberg/manifest/manifest_adapter_internal.h
index be76c284..3d8383a9 100644
--- a/src/iceberg/manifest_adapter.h
+++ b/src/iceberg/manifest/manifest_adapter_internal.h
@@ -19,7 +19,7 @@
 
 #pragma once
 
-/// \file iceberg/manifest_adapter.h
+/// \file iceberg/manifest/manifest_adapter_internal.h
 /// Base class for adapters handling v1/v2/v3/v4 manifest metadata.
 
 #include <memory>
diff --git a/src/iceberg/manifest_entry.cc 
b/src/iceberg/manifest/manifest_entry.cc
similarity index 98%
rename from src/iceberg/manifest_entry.cc
rename to src/iceberg/manifest/manifest_entry.cc
index cf8ec077..91fba88d 100644
--- a/src/iceberg/manifest_entry.cc
+++ b/src/iceberg/manifest/manifest_entry.cc
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-#include "iceberg/manifest_entry.h"
+#include "iceberg/manifest/manifest_entry.h"
 
 #include <memory>
 #include <vector>
diff --git a/src/iceberg/manifest_entry.h 
b/src/iceberg/manifest/manifest_entry.h
similarity index 99%
rename from src/iceberg/manifest_entry.h
rename to src/iceberg/manifest/manifest_entry.h
index 9702a487..8e3183a4 100644
--- a/src/iceberg/manifest_entry.h
+++ b/src/iceberg/manifest/manifest_entry.h
@@ -19,6 +19,8 @@
 
 #pragma once
 
+/// \file iceberg/manifest/manifest_entry.h
+
 #include <cstdint>
 #include <map>
 #include <memory>
diff --git a/src/iceberg/manifest_list.cc 
b/src/iceberg/manifest/manifest_list.cc
similarity index 97%
rename from src/iceberg/manifest_list.cc
rename to src/iceberg/manifest/manifest_list.cc
index 853a0182..4351081c 100644
--- a/src/iceberg/manifest_list.cc
+++ b/src/iceberg/manifest/manifest_list.cc
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-#include "iceberg/manifest_list.h"
+#include "iceberg/manifest/manifest_list.h"
 
 #include "iceberg/schema.h"
 
diff --git a/src/iceberg/manifest_list.h b/src/iceberg/manifest/manifest_list.h
similarity index 99%
rename from src/iceberg/manifest_list.h
rename to src/iceberg/manifest/manifest_list.h
index fe1b246c..85c0b89e 100644
--- a/src/iceberg/manifest_list.h
+++ b/src/iceberg/manifest/manifest_list.h
@@ -19,7 +19,7 @@
 
 #pragma once
 
-/// \file iceberg/manifest_list.h
+/// \file iceberg/manifest/manifest_list.h
 
 #include <cstdint>
 #include <optional>
diff --git a/src/iceberg/manifest_reader.cc 
b/src/iceberg/manifest/manifest_reader.cc
similarity index 95%
rename from src/iceberg/manifest_reader.cc
rename to src/iceberg/manifest/manifest_reader.cc
index 94532c67..1750151e 100644
--- a/src/iceberg/manifest_reader.cc
+++ b/src/iceberg/manifest/manifest_reader.cc
@@ -17,11 +17,11 @@
  * under the License.
  */
 
-#include "iceberg/manifest_reader.h"
+#include "iceberg/manifest/manifest_reader.h"
 
-#include "iceberg/manifest_entry.h"
-#include "iceberg/manifest_list.h"
-#include "iceberg/manifest_reader_internal.h"
+#include "iceberg/manifest/manifest_entry.h"
+#include "iceberg/manifest/manifest_list.h"
+#include "iceberg/manifest/manifest_reader_internal.h"
 #include "iceberg/schema.h"
 #include "iceberg/schema_internal.h"
 #include "iceberg/type.h"
diff --git a/src/iceberg/manifest_reader.h 
b/src/iceberg/manifest/manifest_reader.h
similarity index 98%
rename from src/iceberg/manifest_reader.h
rename to src/iceberg/manifest/manifest_reader.h
index e1628288..e7d6044d 100644
--- a/src/iceberg/manifest_reader.h
+++ b/src/iceberg/manifest/manifest_reader.h
@@ -19,7 +19,7 @@
 
 #pragma once
 
-/// \file iceberg/manifest_reader.h
+/// \file iceberg/manifest/manifest_reader.h
 /// Data reader interface for manifest files.
 
 #include <memory>
diff --git a/src/iceberg/manifest_reader_internal.cc 
b/src/iceberg/manifest/manifest_reader_internal.cc
similarity index 99%
rename from src/iceberg/manifest_reader_internal.cc
rename to src/iceberg/manifest/manifest_reader_internal.cc
index 9898e6c9..f7e8d428 100644
--- a/src/iceberg/manifest_reader_internal.cc
+++ b/src/iceberg/manifest/manifest_reader_internal.cc
@@ -24,8 +24,8 @@
 #include "iceberg/arrow/nanoarrow_status_internal.h"
 #include "iceberg/arrow_c_data_guard_internal.h"
 #include "iceberg/file_format.h"
-#include "iceberg/manifest_entry.h"
-#include "iceberg/manifest_list.h"
+#include "iceberg/manifest/manifest_entry.h"
+#include "iceberg/manifest/manifest_list.h"
 #include "iceberg/schema.h"
 #include "iceberg/type.h"
 #include "iceberg/util/checked_cast.h"
diff --git a/src/iceberg/manifest_reader_internal.h 
b/src/iceberg/manifest/manifest_reader_internal.h
similarity index 96%
rename from src/iceberg/manifest_reader_internal.h
rename to src/iceberg/manifest/manifest_reader_internal.h
index b65f4cd8..513f4050 100644
--- a/src/iceberg/manifest_reader_internal.h
+++ b/src/iceberg/manifest/manifest_reader_internal.h
@@ -19,12 +19,12 @@
 
 #pragma once
 
-/// \file iceberg/internal/manifest_reader_internal.h
+/// \file iceberg/manifest/manifest_reader_internal.h
 /// Reader implementation for manifest list files and manifest files.
 
 #include "iceberg/file_reader.h"
 #include "iceberg/inheritable_metadata.h"
-#include "iceberg/manifest_reader.h"
+#include "iceberg/manifest/manifest_reader.h"
 
 namespace iceberg {
 
diff --git a/src/iceberg/manifest_writer.cc 
b/src/iceberg/manifest/manifest_writer.cc
similarity index 92%
rename from src/iceberg/manifest_writer.cc
rename to src/iceberg/manifest/manifest_writer.cc
index 3209a0c4..8cd940d5 100644
--- a/src/iceberg/manifest_writer.cc
+++ b/src/iceberg/manifest/manifest_writer.cc
@@ -17,20 +17,20 @@
  * under the License.
  */
 
-#include "iceberg/manifest_writer.h"
+#include "iceberg/manifest/manifest_writer.h"
 
 #include <optional>
 
-#include "iceberg/manifest_entry.h"
-#include "iceberg/manifest_list.h"
+#include "iceberg/manifest/manifest_entry.h"
+#include "iceberg/manifest/manifest_list.h"
+#include "iceberg/manifest/v1_metadata_internal.h"
+#include "iceberg/manifest/v2_metadata_internal.h"
+#include "iceberg/manifest/v3_metadata_internal.h"
 #include "iceberg/partition_summary_internal.h"
 #include "iceberg/result.h"
 #include "iceberg/schema.h"
 #include "iceberg/table_metadata.h"
 #include "iceberg/util/macros.h"
-#include "iceberg/v1_metadata.h"
-#include "iceberg/v2_metadata.h"
-#include "iceberg/v3_metadata.h"
 
 namespace iceberg {
 
@@ -294,8 +294,8 @@ Result<std::unique_ptr<ManifestWriter>> 
ManifestWriter::MakeV1Writer(
       auto writer,
       OpenFileWriter(manifest_location, std::move(schema), std::move(file_io),
                      adapter->metadata(), "manifest_entry"));
-  return std::make_unique<ManifestWriter>(std::move(writer), 
std::move(adapter),
-                                          manifest_location, std::nullopt);
+  return std::unique_ptr<ManifestWriter>(new ManifestWriter(
+      std::move(writer), std::move(adapter), manifest_location, std::nullopt));
 }
 
 Result<std::unique_ptr<ManifestWriter>> ManifestWriter::MakeV2Writer(
@@ -324,8 +324,8 @@ Result<std::unique_ptr<ManifestWriter>> 
ManifestWriter::MakeV2Writer(
       auto writer,
       OpenFileWriter(manifest_location, std::move(schema), std::move(file_io),
                      adapter->metadata(), "manifest_entry"));
-  return std::make_unique<ManifestWriter>(std::move(writer), 
std::move(adapter),
-                                          manifest_location, std::nullopt);
+  return std::unique_ptr<ManifestWriter>(new ManifestWriter(
+      std::move(writer), std::move(adapter), manifest_location, std::nullopt));
 }
 
 Result<std::unique_ptr<ManifestWriter>> ManifestWriter::MakeV3Writer(
@@ -356,10 +356,16 @@ Result<std::unique_ptr<ManifestWriter>> 
ManifestWriter::MakeV3Writer(
       auto writer,
       OpenFileWriter(manifest_location, std::move(schema), std::move(file_io),
                      adapter->metadata(), "manifest_entry"));
-  return std::make_unique<ManifestWriter>(std::move(writer), 
std::move(adapter),
-                                          manifest_location, first_row_id);
+  return std::unique_ptr<ManifestWriter>(new ManifestWriter(
+      std::move(writer), std::move(adapter), manifest_location, first_row_id));
 }
 
+ManifestListWriter::ManifestListWriter(std::unique_ptr<Writer> writer,
+                                       std::unique_ptr<ManifestFileAdapter> 
adapter)
+    : writer_(std::move(writer)), adapter_(std::move(adapter)) {}
+
+ManifestListWriter::~ManifestListWriter() = default;
+
 Status ManifestListWriter::Add(const ManifestFile& file) {
   if (adapter_->size() >= kBatchSize) {
     ICEBERG_ASSIGN_OR_RAISE(auto array, adapter_->FinishAppending());
@@ -400,7 +406,8 @@ Result<std::unique_ptr<ManifestListWriter>> 
ManifestListWriter::MakeV1Writer(
       auto writer,
       OpenFileWriter(manifest_list_location, std::move(schema), 
std::move(file_io),
                      adapter->metadata(), "manifest_file"));
-  return std::make_unique<ManifestListWriter>(std::move(writer), 
std::move(adapter));
+  return std::unique_ptr<ManifestListWriter>(
+      new ManifestListWriter(std::move(writer), std::move(adapter)));
 }
 
 Result<std::unique_ptr<ManifestListWriter>> ManifestListWriter::MakeV2Writer(
@@ -418,7 +425,8 @@ Result<std::unique_ptr<ManifestListWriter>> 
ManifestListWriter::MakeV2Writer(
       OpenFileWriter(manifest_list_location, std::move(schema), 
std::move(file_io),
                      adapter->metadata(), "manifest_file"));
 
-  return std::make_unique<ManifestListWriter>(std::move(writer), 
std::move(adapter));
+  return std::unique_ptr<ManifestListWriter>(
+      new ManifestListWriter(std::move(writer), std::move(adapter)));
 }
 
 Result<std::unique_ptr<ManifestListWriter>> ManifestListWriter::MakeV3Writer(
@@ -435,7 +443,8 @@ Result<std::unique_ptr<ManifestListWriter>> 
ManifestListWriter::MakeV3Writer(
       auto writer,
       OpenFileWriter(manifest_list_location, std::move(schema), 
std::move(file_io),
                      adapter->metadata(), "manifest_file"));
-  return std::make_unique<ManifestListWriter>(std::move(writer), 
std::move(adapter));
+  return std::unique_ptr<ManifestListWriter>(
+      new ManifestListWriter(std::move(writer), std::move(adapter)));
 }
 
 }  // namespace iceberg
diff --git a/src/iceberg/manifest_writer.h 
b/src/iceberg/manifest/manifest_writer.h
similarity index 95%
rename from src/iceberg/manifest_writer.h
rename to src/iceberg/manifest/manifest_writer.h
index 8889ae28..a708e6e3 100644
--- a/src/iceberg/manifest_writer.h
+++ b/src/iceberg/manifest/manifest_writer.h
@@ -19,7 +19,7 @@
 
 #pragma once
 
-/// \file iceberg/manifest_writer.h
+/// \file iceberg/manifest/manifest_writer.h
 /// Data writer interface for manifest files and manifest list files.
 
 #include <memory>
@@ -28,7 +28,6 @@
 
 #include "iceberg/file_writer.h"
 #include "iceberg/iceberg_export.h"
-#include "iceberg/manifest_adapter.h"
 #include "iceberg/metrics.h"
 #include "iceberg/result.h"
 #include "iceberg/type_fwd.h"
@@ -38,10 +37,6 @@ namespace iceberg {
 /// \brief Write manifest entries to a manifest file.
 class ICEBERG_EXPORT ManifestWriter {
  public:
-  ManifestWriter(std::unique_ptr<Writer> writer,
-                 std::unique_ptr<ManifestEntryAdapter> adapter,
-                 std::string_view manifest_location, std::optional<int64_t> 
first_row_id);
-
   ~ManifestWriter();
 
   /// \brief Write the entry that all its fields are populated correctly.
@@ -160,11 +155,17 @@ class ICEBERG_EXPORT ManifestWriter {
       std::shared_ptr<Schema> current_schema, ManifestContent content);
 
  private:
+  // Private constructor for internal use only, use the static Make*Writer 
methods
+  // instead.
+  ManifestWriter(std::unique_ptr<Writer> writer,
+                 std::unique_ptr<class ManifestEntryAdapter> adapter,
+                 std::string_view manifest_location, std::optional<int64_t> 
first_row_id);
+
   Status CheckDataFile(const DataFile& file) const;
 
   static constexpr int64_t kBatchSize = 1024;
   std::unique_ptr<Writer> writer_;
-  std::unique_ptr<ManifestEntryAdapter> adapter_;
+  std::unique_ptr<class ManifestEntryAdapter> adapter_;
   bool closed_{false};
   std::string manifest_location_;
   std::optional<int64_t> first_row_id_;
@@ -182,11 +183,7 @@ class ICEBERG_EXPORT ManifestWriter {
 /// \brief Write manifest files to a manifest list file.
 class ICEBERG_EXPORT ManifestListWriter {
  public:
-  ManifestListWriter(std::unique_ptr<Writer> writer,
-                     std::unique_ptr<ManifestFileAdapter> adapter)
-      : writer_(std::move(writer)), adapter_(std::move(adapter)) {}
-
-  ~ManifestListWriter() = default;
+  ~ManifestListWriter();
 
   /// \brief Write manifest file to manifest list file.
   /// \param file Manifest file to write.
@@ -240,9 +237,14 @@ class ICEBERG_EXPORT ManifestListWriter {
       std::string_view manifest_list_location, std::shared_ptr<FileIO> 
file_io);
 
  private:
+  // Private constructor for internal use only, use the static Make*Writer 
methods
+  // instead.
+  ManifestListWriter(std::unique_ptr<Writer> writer,
+                     std::unique_ptr<class ManifestFileAdapter> adapter);
+
   static constexpr int64_t kBatchSize = 1024;
   std::unique_ptr<Writer> writer_;
-  std::unique_ptr<ManifestFileAdapter> adapter_;
+  std::unique_ptr<class ManifestFileAdapter> adapter_;
 };
 
 }  // namespace iceberg
diff --git a/src/iceberg/manifest/meson.build b/src/iceberg/manifest/meson.build
new file mode 100644
index 00000000..f49c5a5f
--- /dev/null
+++ b/src/iceberg/manifest/meson.build
@@ -0,0 +1,26 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+install_headers(
+    [
+        'manifest_entry.h',
+        'manifest_list.h',
+        'manifest_reader.h',
+        'manifest_writer.h',
+    ],
+    subdir: 'iceberg/manifest',
+)
diff --git a/src/iceberg/v1_metadata.cc b/src/iceberg/manifest/v1_metadata.cc
similarity index 97%
rename from src/iceberg/v1_metadata.cc
rename to src/iceberg/manifest/v1_metadata.cc
index 101ef479..f4960c20 100644
--- a/src/iceberg/v1_metadata.cc
+++ b/src/iceberg/manifest/v1_metadata.cc
@@ -17,13 +17,12 @@
  * under the License.
  */
 
-#include "iceberg/v1_metadata.h"
-
 #include <memory>
 
 #include "iceberg/json_internal.h"
-#include "iceberg/manifest_entry.h"
-#include "iceberg/manifest_list.h"
+#include "iceberg/manifest/manifest_entry.h"
+#include "iceberg/manifest/manifest_list.h"
+#include "iceberg/manifest/v1_metadata_internal.h"
 #include "iceberg/schema.h"
 #include "iceberg/schema_internal.h"
 #include "iceberg/type.h"
diff --git a/src/iceberg/v1_metadata.h 
b/src/iceberg/manifest/v1_metadata_internal.h
similarity index 95%
rename from src/iceberg/v1_metadata.h
rename to src/iceberg/manifest/v1_metadata_internal.h
index a6d7ab47..dc88f645 100644
--- a/src/iceberg/v1_metadata.h
+++ b/src/iceberg/manifest/v1_metadata_internal.h
@@ -19,9 +19,9 @@
 
 #pragma once
 
-#include "iceberg/manifest_adapter.h"
+/// \file iceberg/manifest/v1_metadata_internal.h
 
-/// \file iceberg/v1_metadata.h
+#include "iceberg/manifest/manifest_adapter_internal.h"
 
 namespace iceberg {
 
diff --git a/src/iceberg/v2_metadata.cc b/src/iceberg/manifest/v2_metadata.cc
similarity index 98%
rename from src/iceberg/v2_metadata.cc
rename to src/iceberg/manifest/v2_metadata.cc
index 486acb62..737fa62f 100644
--- a/src/iceberg/v2_metadata.cc
+++ b/src/iceberg/manifest/v2_metadata.cc
@@ -17,11 +17,10 @@
  * under the License.
  */
 
-#include "iceberg/v2_metadata.h"
-
 #include "iceberg/json_internal.h"
-#include "iceberg/manifest_entry.h"
-#include "iceberg/manifest_list.h"
+#include "iceberg/manifest/manifest_entry.h"
+#include "iceberg/manifest/manifest_list.h"
+#include "iceberg/manifest/v2_metadata_internal.h"
 #include "iceberg/schema.h"
 #include "iceberg/schema_internal.h"
 #include "iceberg/util/macros.h"
diff --git a/src/iceberg/v2_metadata.h 
b/src/iceberg/manifest/v2_metadata_internal.h
similarity index 96%
rename from src/iceberg/v2_metadata.h
rename to src/iceberg/manifest/v2_metadata_internal.h
index 3097085e..e23dca6c 100644
--- a/src/iceberg/v2_metadata.h
+++ b/src/iceberg/manifest/v2_metadata_internal.h
@@ -19,9 +19,9 @@
 
 #pragma once
 
-/// \file iceberg/v2_metadata.h
+/// \file iceberg/manifest/v2_metadata_internal.h
 
-#include "iceberg/manifest_adapter.h"
+#include "iceberg/manifest/manifest_adapter_internal.h"
 
 namespace iceberg {
 
diff --git a/src/iceberg/v3_metadata.cc b/src/iceberg/manifest/v3_metadata.cc
similarity index 98%
rename from src/iceberg/v3_metadata.cc
rename to src/iceberg/manifest/v3_metadata.cc
index ae309edc..87d4d77d 100644
--- a/src/iceberg/v3_metadata.cc
+++ b/src/iceberg/manifest/v3_metadata.cc
@@ -17,14 +17,13 @@
  * under the License.
  */
 
-#include "iceberg/v3_metadata.h"
-
 #include <memory>
 #include <optional>
 
 #include "iceberg/json_internal.h"
-#include "iceberg/manifest_entry.h"
-#include "iceberg/manifest_list.h"
+#include "iceberg/manifest/manifest_entry.h"
+#include "iceberg/manifest/manifest_list.h"
+#include "iceberg/manifest/v3_metadata_internal.h"
 #include "iceberg/result.h"
 #include "iceberg/schema.h"
 #include "iceberg/schema_internal.h"
diff --git a/src/iceberg/v3_metadata.h 
b/src/iceberg/manifest/v3_metadata_internal.h
similarity index 96%
rename from src/iceberg/v3_metadata.h
rename to src/iceberg/manifest/v3_metadata_internal.h
index 163f6edf..88f2a4f3 100644
--- a/src/iceberg/v3_metadata.h
+++ b/src/iceberg/manifest/v3_metadata_internal.h
@@ -19,9 +19,9 @@
 
 #pragma once
 
-/// \file iceberg/v3_metadata.h
+/// \file iceberg/manifest/v3_metadata_internal.h
 
-#include "iceberg/manifest_adapter.h"
+#include "iceberg/manifest/manifest_adapter_internal.h"
 #include "iceberg/result.h"
 
 namespace iceberg {
diff --git a/src/iceberg/meson.build b/src/iceberg/meson.build
index bdb5dbf3..16324c31 100644
--- a/src/iceberg/meson.build
+++ b/src/iceberg/meson.build
@@ -55,12 +55,15 @@ iceberg_sources = files(
     'file_writer.cc',
     'inheritable_metadata.cc',
     'json_internal.cc',
-    'manifest_adapter.cc',
-    'manifest_entry.cc',
-    'manifest_list.cc',
-    'manifest_reader.cc',
-    'manifest_reader_internal.cc',
-    'manifest_writer.cc',
+    'manifest/manifest_adapter.cc',
+    'manifest/manifest_entry.cc',
+    'manifest/manifest_list.cc',
+    'manifest/manifest_reader.cc',
+    'manifest/manifest_reader_internal.cc',
+    'manifest/manifest_writer.cc',
+    'manifest/v1_metadata.cc',
+    'manifest/v2_metadata.cc',
+    'manifest/v3_metadata.cc',
     'metadata_columns.cc',
     'name_mapping.cc',
     'partition_field.cc',
@@ -97,9 +100,6 @@ iceberg_sources = files(
     'util/timepoint.cc',
     'util/truncate_util.cc',
     'util/uuid.cc',
-    'v1_metadata.cc',
-    'v2_metadata.cc',
-    'v3_metadata.cc',
 )
 
 # CRoaring does not export symbols, so on Windows it must
@@ -161,11 +161,6 @@ install_headers(
         'iceberg_export.h',
         'inheritable_metadata.h',
         'location_provider.h',
-        'manifest_adapter.h',
-        'manifest_entry.h',
-        'manifest_list.h',
-        'manifest_reader.h',
-        'manifest_writer.h',
         'metadata_columns.h',
         'metrics.h',
         'name_mapping.h',
@@ -191,15 +186,13 @@ install_headers(
         'transform.h',
         'type_fwd.h',
         'type.h',
-        'v1_metadata.h',
-        'v2_metadata.h',
-        'v3_metadata.h',
     ],
     subdir: 'iceberg',
 )
 
 subdir('catalog')
 subdir('expression')
+subdir('manifest')
 subdir('row')
 subdir('util')
 
diff --git a/src/iceberg/partition_summary.cc b/src/iceberg/partition_summary.cc
index d0ed4a95..2937ae2d 100644
--- a/src/iceberg/partition_summary.cc
+++ b/src/iceberg/partition_summary.cc
@@ -20,7 +20,7 @@
 #include <memory>
 
 #include "iceberg/expression/literal.h"
-#include "iceberg/manifest_list.h"
+#include "iceberg/manifest/manifest_list.h"
 #include "iceberg/partition_summary_internal.h"
 #include "iceberg/result.h"
 #include "iceberg/row/partition_values.h"
diff --git a/src/iceberg/row/manifest_wrapper.cc 
b/src/iceberg/row/manifest_wrapper.cc
index 4c8708e4..851f9e72 100644
--- a/src/iceberg/row/manifest_wrapper.cc
+++ b/src/iceberg/row/manifest_wrapper.cc
@@ -19,7 +19,7 @@
 
 #include "iceberg/row/manifest_wrapper.h"
 
-#include "iceberg/manifest_reader_internal.h"
+#include "iceberg/manifest/manifest_reader_internal.h"
 #include "iceberg/util/macros.h"
 
 namespace iceberg {
diff --git a/src/iceberg/row/manifest_wrapper.h 
b/src/iceberg/row/manifest_wrapper.h
index 3271eac4..bc04c1e8 100644
--- a/src/iceberg/row/manifest_wrapper.h
+++ b/src/iceberg/row/manifest_wrapper.h
@@ -26,7 +26,7 @@
 #include <functional>
 
 #include "iceberg/iceberg_export.h"
-#include "iceberg/manifest_list.h"
+#include "iceberg/manifest/manifest_list.h"
 #include "iceberg/row/struct_like.h"
 
 namespace iceberg {
diff --git a/src/iceberg/table_scan.cc b/src/iceberg/table_scan.cc
index bc52a1fa..56c6ee2c 100644
--- a/src/iceberg/table_scan.cc
+++ b/src/iceberg/table_scan.cc
@@ -24,9 +24,9 @@
 
 #include "iceberg/arrow_c_data.h"
 #include "iceberg/file_reader.h"
-#include "iceberg/manifest_entry.h"
-#include "iceberg/manifest_list.h"
-#include "iceberg/manifest_reader.h"
+#include "iceberg/manifest/manifest_entry.h"
+#include "iceberg/manifest/manifest_list.h"
+#include "iceberg/manifest/manifest_reader.h"
 #include "iceberg/schema.h"
 #include "iceberg/schema_field.h"
 #include "iceberg/snapshot.h"
diff --git a/src/iceberg/table_scan.h b/src/iceberg/table_scan.h
index 9e7f313c..c3b1b28f 100644
--- a/src/iceberg/table_scan.h
+++ b/src/iceberg/table_scan.h
@@ -23,7 +23,7 @@
 #include <vector>
 
 #include "iceberg/arrow_c_data.h"
-#include "iceberg/manifest_entry.h"
+#include "iceberg/manifest/manifest_entry.h"
 #include "iceberg/type_fwd.h"
 
 namespace iceberg {
diff --git a/src/iceberg/test/file_scan_task_test.cc 
b/src/iceberg/test/file_scan_task_test.cc
index 51af7c0c..b7252850 100644
--- a/src/iceberg/test/file_scan_task_test.cc
+++ b/src/iceberg/test/file_scan_task_test.cc
@@ -29,7 +29,7 @@
 
 #include "iceberg/arrow/arrow_fs_file_io_internal.h"
 #include "iceberg/file_format.h"
-#include "iceberg/manifest_entry.h"
+#include "iceberg/manifest/manifest_entry.h"
 #include "iceberg/parquet/parquet_register.h"
 #include "iceberg/schema.h"
 #include "iceberg/table_scan.h"
diff --git a/src/iceberg/test/manifest_list_reader_writer_test.cc 
b/src/iceberg/test/manifest_list_reader_writer_test.cc
index a6985f76..ee6c7d9f 100644
--- a/src/iceberg/test/manifest_list_reader_writer_test.cc
+++ b/src/iceberg/test/manifest_list_reader_writer_test.cc
@@ -23,9 +23,9 @@
 #include "iceberg/arrow/arrow_fs_file_io_internal.h"
 #include "iceberg/avro/avro_register.h"
 #include "iceberg/expression/literal.h"
-#include "iceberg/manifest_list.h"
-#include "iceberg/manifest_reader.h"
-#include "iceberg/manifest_writer.h"
+#include "iceberg/manifest/manifest_list.h"
+#include "iceberg/manifest/manifest_reader.h"
+#include "iceberg/manifest/manifest_writer.h"
 #include "iceberg/test/matchers.h"
 #include "iceberg/test/temp_file_test_base.h"
 #include "iceberg/test/test_common.h"
diff --git a/src/iceberg/test/manifest_list_versions_test.cc 
b/src/iceberg/test/manifest_list_versions_test.cc
index bf83e8c5..9c32a59d 100644
--- a/src/iceberg/test/manifest_list_versions_test.cc
+++ b/src/iceberg/test/manifest_list_versions_test.cc
@@ -29,13 +29,13 @@
 #include "iceberg/avro/avro_register.h"
 #include "iceberg/file_reader.h"
 #include "iceberg/file_writer.h"
-#include "iceberg/manifest_list.h"
-#include "iceberg/manifest_reader.h"
-#include "iceberg/manifest_writer.h"
+#include "iceberg/manifest/manifest_list.h"
+#include "iceberg/manifest/manifest_reader.h"
+#include "iceberg/manifest/manifest_writer.h"
+#include "iceberg/manifest/v1_metadata_internal.h"
 #include "iceberg/schema.h"
 #include "iceberg/schema_internal.h"
 #include "iceberg/test/matchers.h"
-#include "iceberg/v1_metadata.h"
 
 namespace iceberg {
 
diff --git a/src/iceberg/test/manifest_reader_writer_test.cc 
b/src/iceberg/test/manifest_reader_writer_test.cc
index 82057696..b3daaf94 100644
--- a/src/iceberg/test/manifest_reader_writer_test.cc
+++ b/src/iceberg/test/manifest_reader_writer_test.cc
@@ -24,10 +24,10 @@
 
 #include "iceberg/arrow/arrow_fs_file_io_internal.h"
 #include "iceberg/avro/avro_register.h"
-#include "iceberg/manifest_entry.h"
-#include "iceberg/manifest_list.h"
-#include "iceberg/manifest_reader.h"
-#include "iceberg/manifest_writer.h"
+#include "iceberg/manifest/manifest_entry.h"
+#include "iceberg/manifest/manifest_list.h"
+#include "iceberg/manifest/manifest_reader.h"
+#include "iceberg/manifest/manifest_writer.h"
 #include "iceberg/partition_spec.h"
 #include "iceberg/schema.h"
 #include "iceberg/test/matchers.h"
diff --git a/src/iceberg/test/manifest_writer_versions_test.cc 
b/src/iceberg/test/manifest_writer_versions_test.cc
index 6e3dfde1..0bbdbcc5 100644
--- a/src/iceberg/test/manifest_writer_versions_test.cc
+++ b/src/iceberg/test/manifest_writer_versions_test.cc
@@ -28,10 +28,10 @@
 #include "iceberg/arrow/arrow_file_io.h"
 #include "iceberg/avro/avro_register.h"
 #include "iceberg/file_format.h"
-#include "iceberg/manifest_entry.h"
-#include "iceberg/manifest_list.h"
-#include "iceberg/manifest_reader.h"
-#include "iceberg/manifest_writer.h"
+#include "iceberg/manifest/manifest_entry.h"
+#include "iceberg/manifest/manifest_list.h"
+#include "iceberg/manifest/manifest_reader.h"
+#include "iceberg/manifest/manifest_writer.h"
 #include "iceberg/metrics.h"
 #include "iceberg/partition_spec.h"
 #include "iceberg/row/partition_values.h"
diff --git a/src/iceberg/test/struct_like_test.cc 
b/src/iceberg/test/struct_like_test.cc
index d64e219d..97df61b8 100644
--- a/src/iceberg/test/struct_like_test.cc
+++ b/src/iceberg/test/struct_like_test.cc
@@ -24,8 +24,8 @@
 #include <arrow/util/decimal.h>
 
 #include "iceberg/arrow_c_data_guard_internal.h"
-#include "iceberg/manifest_list.h"
-#include "iceberg/manifest_reader_internal.h"
+#include "iceberg/manifest/manifest_list.h"
+#include "iceberg/manifest/manifest_reader_internal.h"
 #include "iceberg/row/arrow_array_wrapper.h"
 #include "iceberg/row/manifest_wrapper.h"
 #include "iceberg/schema.h"

Reply via email to