summaryrefslogtreecommitdiff
path: root/src/buildtool/file_system/git_repo.cpp
diff options
context:
space:
mode:
authorMaksim Denisov <denisov.maksim@huawei.com>2025-01-13 15:06:24 +0100
committerMaksim Denisov <denisov.maksim@huawei.com>2025-01-15 16:43:56 +0100
commitc7a103104b03f8a014755ee01f691f0c728ec0bb (patch)
tree74c335c07c71d64f7068bb49307cb316ba4f75b0 /src/buildtool/file_system/git_repo.cpp
parent5ee5f8f37bd9a1881db9801c428d0d108da93239 (diff)
downloadjustbuild-c7a103104b03f8a014755ee01f691f0c728ec0bb.tar.gz
Add to GitRepo common implementation IsTreeInRepo
Diffstat (limited to 'src/buildtool/file_system/git_repo.cpp')
-rw-r--r--src/buildtool/file_system/git_repo.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/buildtool/file_system/git_repo.cpp b/src/buildtool/file_system/git_repo.cpp
index 78ae1c86..2c27cda9 100644
--- a/src/buildtool/file_system/git_repo.cpp
+++ b/src/buildtool/file_system/git_repo.cpp
@@ -1744,6 +1744,35 @@ auto GitRepo::ImportToGit(
return *std::move(result_tree);
}
+auto GitRepo::IsTreeInRepo(std::filesystem::path const& repo,
+ std::string const& tree_id) noexcept
+ -> expected<bool, std::string> {
+ auto git_cas = GitCAS::Open(repo);
+ if (git_cas == nullptr) {
+ return unexpected(
+ fmt::format("Failed to open Git ODB at {}", repo.string()));
+ }
+ auto git_repo = GitRepo::Open(git_cas);
+ if (not git_repo.has_value()) {
+ return unexpected{
+ fmt::format("Failed to open Git repository at {}", repo.string())};
+ }
+
+ std::string err;
+ auto logger = std::make_shared<GitRepo::anon_logger_t>(
+ [&err](auto const& msg, bool fatal) {
+ if (fatal) {
+ err = msg;
+ }
+ });
+
+ auto result = git_repo->CheckTreeExists(tree_id, logger);
+ if (not result.has_value()) {
+ return unexpected{std::move(err)};
+ }
+ return *result;
+}
+
auto GitRepo::IsRepoFake() const noexcept -> bool {
return is_repo_fake_;
}