summaryrefslogtreecommitdiff
path: root/src/buildtool/file_system/git_repo.cpp
diff options
context:
space:
mode:
authorMaksim Denisov <denisov.maksim@huawei.com>2024-10-02 12:27:42 +0200
committerMaksim Denisov <denisov.maksim@huawei.com>2024-10-07 13:37:39 +0200
commitf56805ddde51ffcfdd6123300b6c049764a86980 (patch)
tree0b18734f5a60bddec7bb44c32b4027529de056e8 /src/buildtool/file_system/git_repo.cpp
parente2555394980ab4d1d8b938fec0ad8d246d7745b4 (diff)
downloadjustbuild-f56805ddde51ffcfdd6123300b6c049764a86980.tar.gz
Replace manual new allocations for git_strarray with std::vectors
...and remove unused code from git_utils
Diffstat (limited to 'src/buildtool/file_system/git_repo.cpp')
-rw-r--r--src/buildtool/file_system/git_repo.cpp30
1 files changed, 8 insertions, 22 deletions
diff --git a/src/buildtool/file_system/git_repo.cpp b/src/buildtool/file_system/git_repo.cpp
index f3769008..489d50a7 100644
--- a/src/buildtool/file_system/git_repo.cpp
+++ b/src/buildtool/file_system/git_repo.cpp
@@ -905,20 +905,16 @@ auto GitRepo::FetchFromPath(std::shared_ptr<git_config> cfg,
fetch_opts.update_fetchhead = 0;
// setup fetch refspecs array
- git_strarray refspecs_array_obj{};
+ GitStrArray refspecs_array_obj;
if (branch) {
// make sure we check for tags as well
- std::string tag = fmt::format("+refs/tags/{}", *branch);
- std::string head = fmt::format("+refs/heads/{}", *branch);
- PopulateStrarray(&refspecs_array_obj, {tag, head});
+ refspecs_array_obj.AddEntry(fmt::format("+refs/tags/{}", *branch));
+ refspecs_array_obj.AddEntry(fmt::format("+refs/heads/{}", *branch));
}
- auto refspecs_array =
- std::unique_ptr<git_strarray, decltype(&strarray_deleter)>(
- &refspecs_array_obj, strarray_deleter);
+ auto const refspecs_array = refspecs_array_obj.Get();
if (git_remote_fetch(
- remote.get(), refspecs_array.get(), &fetch_opts, nullptr) !=
- 0) {
+ remote.get(), &refspecs_array, &fetch_opts, nullptr) != 0) {
(*logger)(fmt::format(
"Fetching {} in local repository {} failed with:\n{}",
branch ? fmt::format("branch {}", *branch) : "all",
@@ -2106,17 +2102,7 @@ auto GitRepo::CreateTreeFromDirectory(std::filesystem::path const& dir,
#endif // BOOTSTRAP_BUILD_TOOL
}
-void GitRepo::PopulateStrarray(
- git_strarray* array,
- std::vector<std::string> const& string_list) noexcept {
- array->count = string_list.size();
- array->strings = gsl::owner<char**>(new char*[string_list.size()]);
- for (auto const& elem : string_list) {
- auto i =
- static_cast<std::size_t>(&elem - &string_list[0]); // get index
- // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic)
- array->strings[i] = gsl::owner<char*>(new char[elem.size() + 1]);
- // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic)
- strncpy(array->strings[i], elem.c_str(), elem.size() + 1);
- }
+auto GitRepo::GitStrArray::Get() & noexcept -> git_strarray {
+ return git_strarray{.strings = entry_pointers_.data(),
+ .count = entry_pointers_.size()};
}