From 2fc0c3c4c5a52a9fcb78a77fe79703896720c009 Mon Sep 17 00:00:00 2001 From: Paul Cristian Sarbu Date: Thu, 5 Jun 2025 10:31:45 +0200 Subject: GitRepo: Fix wrong handling of fatal logging ...in creating Git tree from filesystem directory. (cherry-picked from 6b31a88acbe6a6556e36f838b914a82879949811) --- src/buildtool/file_system/git_repo.cpp | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) (limited to 'src/buildtool/file_system/git_repo.cpp') diff --git a/src/buildtool/file_system/git_repo.cpp b/src/buildtool/file_system/git_repo.cpp index 3383f1c2..0b59ba80 100644 --- a/src/buildtool/file_system/git_repo.cpp +++ b/src/buildtool/file_system/git_repo.cpp @@ -2065,12 +2065,9 @@ auto GitRepo::CreateShallowTree(tree_entries_t const& entries) noexcept for (auto const& entry : std::filesystem::directory_iterator{dir}) { if (auto type = FileSystemManager::Type(entry.path(), /*allow_upwards=*/true)) { - if (not read_and_store_entry(entry.path().filename(), *type)) { - std::invoke(*logger, - fmt::format("could not read and store to ODB " - "subdir entry {}", - entry.path().string()), - /*fatal=*/true); + if (not read_and_store_entry( + entry.path().filename(), *type, logger)) { + // logging with fatal already handled return false; } } @@ -2101,8 +2098,10 @@ auto GitRepo::CreateTreeFromDirectory(std::filesystem::path const& dir, return std::nullopt; #else tree_entries_t entries{}; - auto dir_read_and_store = [this, &entries, dir, logger](auto name, - auto type) { + StoreDirEntryFunc dir_read_and_store = + [this, &entries, dir](std::filesystem::path const& name, + ObjectType type, + anon_logger_ptr const& logger) -> bool { try { const auto full_name = dir / name; if (IsTreeObject(type)) { @@ -2113,10 +2112,7 @@ auto GitRepo::CreateTreeFromDirectory(std::filesystem::path const& dir, ObjectType::Tree); return true; } - std::invoke( - *logger, - fmt::format("failed creating tree {}", full_name.string()), - /*fatal=*/true); + // logging with fatal already handled return false; } // for non-tree entries, read content and write it as a blob to the @@ -2147,8 +2143,16 @@ auto GitRepo::CreateTreeFromDirectory(std::filesystem::path const& dir, }; if (ReadDirectory(dir, dir_read_and_store, logger)) { - return CreateTree(entries); + if (auto tree = CreateTree(entries)) { + return tree; + } + std::invoke( + *logger, + fmt::format("failed to create tree from entries of directory {}", + dir.string()), + /*fatal=*/true); } + // logging with fatal already handled return std::nullopt; #endif // BOOTSTRAP_BUILD_TOOL } -- cgit v1.2.3