summaryrefslogtreecommitdiff
path: root/src/buildtool/file_system/git_repo.cpp
diff options
context:
space:
mode:
authorMaksim Denisov <denisov.maksim@huawei.com>2024-07-24 10:16:34 +0200
committerMaksim Denisov <denisov.maksim@huawei.com>2024-08-07 14:43:19 +0200
commit0afacdb938a9787151f338656fa943679b7ec68b (patch)
tree35a1c490d425e6f1fd9fd5ee6a2a4e75796373b5 /src/buildtool/file_system/git_repo.cpp
parent3b9db9cc3242524da98e17b77acc5c9559f3f40b (diff)
downloadjustbuild-0afacdb938a9787151f338656fa943679b7ec68b.tar.gz
Pass SymlinksCheckFunc to GitRepo as not_null
+ invoke it only if there are symlinks to check + remove the corresponding runtime check since it is replaced by a compile-time check
Diffstat (limited to 'src/buildtool/file_system/git_repo.cpp')
-rw-r--r--src/buildtool/file_system/git_repo.cpp19
1 files changed, 8 insertions, 11 deletions
diff --git a/src/buildtool/file_system/git_repo.cpp b/src/buildtool/file_system/git_repo.cpp
index f87f8e6b..346c1c13 100644
--- a/src/buildtool/file_system/git_repo.cpp
+++ b/src/buildtool/file_system/git_repo.cpp
@@ -1791,7 +1791,7 @@ auto GitRepo::IsRepoFake() const noexcept -> bool {
}
auto GitRepo::ReadTree(std::string const& id,
- SymlinksCheckFunc const& check_symlinks,
+ gsl::not_null<SymlinksCheckFunc> const& check_symlinks,
bool is_hex_id,
bool ignore_special) const noexcept
-> std::optional<tree_entries_t> {
@@ -1851,11 +1851,8 @@ auto GitRepo::ReadTree(std::string const& id,
}
}
// we check symlinks in bulk, optimized for network-backed repos
- if (not check_symlinks) {
- Logger::Log(LogLevel::Debug, "check_symlink callable is empty");
- return std::nullopt;
- }
- if (not check_symlinks(symlinks)) {
+ if (not symlinks.empty() and
+ not std::invoke(check_symlinks.get(), symlinks)) {
Logger::Log(LogLevel::Error,
"found upwards symlinks in Git tree {}",
is_hex_id ? std::string{id} : ToHexString(id));
@@ -1928,11 +1925,11 @@ auto GitRepo::CreateTree(tree_entries_t const& entries) const noexcept
#endif
}
-auto GitRepo::ReadTreeData(std::string const& data,
- std::string const& id,
- SymlinksCheckFunc const& check_symlinks,
- bool is_hex_id) noexcept
- -> std::optional<tree_entries_t> {
+auto GitRepo::ReadTreeData(
+ std::string const& data,
+ std::string const& id,
+ gsl::not_null<SymlinksCheckFunc> const& check_symlinks,
+ bool is_hex_id) noexcept -> std::optional<tree_entries_t> {
#ifndef BOOTSTRAP_BUILD_TOOL
try {
InMemoryODBBackend b{.parent = kInMemoryODBParent};