diff options
Diffstat (limited to 'src/other_tools/git_operations/git_repo_remote.cpp')
-rw-r--r-- | src/other_tools/git_operations/git_repo_remote.cpp | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/src/other_tools/git_operations/git_repo_remote.cpp b/src/other_tools/git_operations/git_repo_remote.cpp index 2a434928..f3964e74 100644 --- a/src/other_tools/git_operations/git_repo_remote.cpp +++ b/src/other_tools/git_operations/git_repo_remote.cpp @@ -20,6 +20,7 @@ #include "src/buildtool/logging/logger.hpp" #include "src/buildtool/system/system_command.hpp" #include "src/other_tools/git_operations/git_config_settings.hpp" +#include "src/utils/cpp/tmp_dir.hpp" extern "C" { #include <git2.h> @@ -392,7 +393,6 @@ auto GitRepoRemote::FetchFromRemote(std::shared_ptr<git_config> cfg, } auto GitRepoRemote::UpdateCommitViaTmpRepo( - std::filesystem::path const& tmp_dir, std::string const& repo_url, std::string const& branch, std::vector<std::string> const& inherit_env, @@ -401,6 +401,13 @@ auto GitRepoRemote::UpdateCommitViaTmpRepo( anon_logger_ptr const& logger) const noexcept -> std::optional<std::string> { try { + auto tmp_dir = TmpDir::Create("update"); + if (not tmp_dir) { + (*logger)("Failed to create temp dir for running 'git ls-remote'", + /*fatal=*/true); + return std::nullopt; + } + auto const& tmp_path = tmp_dir->GetPath(); // check for internally supported protocols if (IsSupported(repo_url)) { // preferably with a "fake" repository! @@ -410,7 +417,7 @@ auto GitRepoRemote::UpdateCommitViaTmpRepo( } // create the temporary real repository auto tmp_repo = - GitRepoRemote::InitAndOpen(tmp_dir, /*is_bare=*/true); + GitRepoRemote::InitAndOpen(tmp_path / "git", /*is_bare=*/true); if (tmp_repo == std::nullopt) { return std::nullopt; } @@ -456,7 +463,7 @@ auto GitRepoRemote::UpdateCommitViaTmpRepo( system.Execute(cmdline, env, GetGitPath(), // which path is not actually relevant - tmp_dir); + tmp_path); if (not command_output) { (*logger)(fmt::format("exec() on command failed."), @@ -522,8 +529,7 @@ auto GitRepoRemote::UpdateCommitViaTmpRepo( } } -auto GitRepoRemote::FetchViaTmpRepo(std::filesystem::path const& tmp_dir, - std::string const& repo_url, +auto GitRepoRemote::FetchViaTmpRepo(std::string const& repo_url, std::optional<std::string> const& branch, std::vector<std::string> const& inherit_env, std::string const& git_bin, @@ -531,6 +537,13 @@ auto GitRepoRemote::FetchViaTmpRepo(std::filesystem::path const& tmp_dir, anon_logger_ptr const& logger) noexcept -> bool { try { + auto tmp_dir = TmpDir::Create("fetch"); + if (not tmp_dir) { + (*logger)("Failed to create temp dir for running 'git fetch'", + /*fatal=*/true); + return false; + } + auto const& tmp_path = tmp_dir->GetPath(); // check for internally supported protocols if (IsSupported(repo_url)) { // preferably with a "fake" repository! @@ -542,7 +555,7 @@ auto GitRepoRemote::FetchViaTmpRepo(std::filesystem::path const& tmp_dir, // it can be bare, as the refspecs for this fetch will be given // explicitly. auto tmp_repo = - GitRepoRemote::InitAndOpen(tmp_dir, /*is_bare=*/true); + GitRepoRemote::InitAndOpen(tmp_path / "git", /*is_bare=*/true); if (tmp_repo == std::nullopt) { return false; } @@ -606,7 +619,7 @@ auto GitRepoRemote::FetchViaTmpRepo(std::filesystem::path const& tmp_dir, // run command SystemCommand system{repo_url}; auto const command_output = - system.Execute(cmdline, env, GetGitPath(), tmp_dir); + system.Execute(cmdline, env, GetGitPath(), tmp_path); if (not command_output) { (*logger)(fmt::format("exec() on command failed."), |