Don't store spdlog loggers

In case the stored smart pointer gets replaced by another logger.
This commit is contained in:
Oliver Hamlet
2020-06-14 10:36:34 +01:00
parent b24f2856b7
commit 68f0e53d0b
2 changed files with 52 additions and 47 deletions
+52 -44
View File
@@ -40,8 +40,6 @@ using std::string;
namespace fs = std::filesystem;
namespace loot {
GitHelper::GitHelper() : logger_(getLogger()) {}
GitHelper::GitData::GitData() :
repo(nullptr),
remote(nullptr),
@@ -82,8 +80,9 @@ GitHelper::GitData::~GitData() {
void GitHelper::InitialiseOptions(const std::string& branch,
const std::string& filenameToCheckout) {
if (logger_) {
logger_->debug(
auto logger = getLogger();
if (logger) {
logger->debug(
"Setting up checkout options using branch {} and filename {}.",
branch,
filenameToCheckout);
@@ -106,8 +105,9 @@ void GitHelper::InitialiseOptions(const std::string& branch,
}
void GitHelper::Open(const std::filesystem::path& repoRoot) {
if (logger_) {
logger_->info("Attempting to open Git repository at: {}",
auto logger = getLogger();
if (logger) {
logger->info("Attempting to open Git repository at: {}",
repoRoot.u8string());
}
Call(git_repository_open(&data_.repo, repoRoot.u8string().c_str()));
@@ -120,8 +120,9 @@ void GitHelper::SetRemoteUrl(const std::string& remote,
"Cannot set remote URL for repository that has not been opened.");
}
if (logger_) {
logger_->info("Setting URL for remote {} to {}", remote, url);
auto logger = getLogger();
if (logger) {
logger->info("Setting URL for remote {} to {}", remote, url);
}
Call(git_remote_set_url(data_.repo, remote.c_str(), url.c_str()));
@@ -178,8 +179,9 @@ void GitHelper::Clone(const std::filesystem::path& path,
"Cannot clone repository that has already been opened.");
// Clone the remote repository.
if (logger_) {
logger_->info("Repository doesn't exist, cloning the remote repository at \"{}\".", url);
auto logger = getLogger();
if (logger) {
logger->info("Repository doesn't exist, cloning the remote repository at \"{}\".", url);
}
fs::create_directories(path.parent_path());
@@ -188,8 +190,8 @@ void GitHelper::Clone(const std::filesystem::path& path,
// directory.
fs::path repoPath;
if (fs::exists(path) && !fs::is_empty(path)) {
if (logger_) {
logger_->trace("Target repo path not empty, cloning into temporary directory.");
if (logger) {
logger->trace("Target repo path not empty, cloning into temporary directory.");
}
auto directory = "LOOT-" + path.filename().u8string() + "-" +
boost::lexical_cast<std::string>((boost::uuids::random_generator())());
@@ -214,8 +216,8 @@ void GitHelper::Clone(const std::filesystem::path& path,
git_repository_free(data_.repo);
data_.repo = nullptr;
if (logger_) {
logger_->trace(
if (logger) {
logger->trace(
"Target repo path not empty, moving cloned files in.");
}
@@ -242,8 +244,8 @@ void GitHelper::Clone(const std::filesystem::path& path,
try {
fs::remove_all(repoPath);
} catch (std::exception& e) {
if (logger_) {
logger_->error(
if (logger) {
logger->error(
"Could not delete temporary repository path \"{}\": {}",
repoPath.u8string(), e.what());
}
@@ -259,8 +261,9 @@ void GitHelper::Fetch(const std::string& remote) {
throw GitStateError(
"Cannot fetch updates for repository that has not been opened.");
if (logger_) {
logger_->trace("Fetching updates from remote.");
auto logger = getLogger();
if (logger) {
logger->trace("Fetching updates from remote.");
}
// Get the origin remote.
@@ -272,8 +275,8 @@ void GitHelper::Fetch(const std::string& remote) {
// Log some stats on what was fetched either during update or clone.
const git_transfer_progress* stats = git_remote_stats(data_.remote);
if (logger_) {
logger_->trace("Received {} of {} objects in {} bytes.",
if (logger) {
logger->trace("Received {} of {} objects in {} bytes.",
stats->indexed_objects,
stats->total_objects,
stats->received_bytes);
@@ -298,38 +301,39 @@ void GitHelper::CheckoutNewBranch(const std::string& remote,
throw GitStateError(
"Cannot fetch repository updates, reference memory already allocated.");
if (logger_) {
logger_->trace("Looking up commit referred to by the remote branch \"{}\".",
auto logger = getLogger();
if (logger) {
logger->trace("Looking up commit referred to by the remote branch \"{}\".",
branch);
}
Call(git_revparse_single(
&data_.object, data_.repo, (remote + "/" + branch).c_str()));
const git_oid* commit_id = git_object_id(data_.object);
if (logger_) {
logger_->trace("Creating the new branch.");
if (logger) {
logger->trace("Creating the new branch.");
}
Call(git_commit_lookup(&data_.commit, data_.repo, commit_id));
Call(git_branch_create(
&data_.reference, data_.repo, branch.c_str(), data_.commit, 1));
if (logger_) {
logger_->trace("Setting the upstream for the new branch.");
if (logger) {
logger->trace("Setting the upstream for the new branch.");
}
Call(git_branch_set_upstream(data_.reference,
(remote + "/" + branch).c_str()));
// Check if HEAD points to the desired branch and set it to if not.
if (!git_branch_is_head(data_.reference)) {
if (logger_) {
logger_->trace("Setting HEAD to follow branch: {}", branch);
if (logger) {
logger->trace("Setting HEAD to follow branch: {}", branch);
}
Call(git_repository_set_head(data_.repo,
(string("refs/heads/") + branch).c_str()));
}
if (logger_) {
logger_->trace("Performing a Git checkout of HEAD.");
if (logger) {
logger->trace("Performing a Git checkout of HEAD.");
}
Call(git_checkout_head(data_.repo, &data_.checkout_options));
@@ -359,8 +363,9 @@ void GitHelper::CheckoutRevision(const std::string& revision) {
Call(git_repository_set_head_detached(data_.repo, oid));
// Checkout the new HEAD.
if (logger_) {
logger_->trace("Performing a Git checkout of HEAD.");
auto logger = getLogger();
if (logger) {
logger->trace("Performing a Git checkout of HEAD.");
}
Call(git_checkout_head(data_.repo, &data_.checkout_options));
@@ -380,18 +385,19 @@ void GitHelper::DeleteBranch(const std::string& branch) {
Call(git_branch_lookup(
&data_.reference, data_.repo, branch.c_str(), GIT_BRANCH_LOCAL));
auto logger = getLogger();
int ret = git_branch_is_head(data_.reference);
if (ret == 1) {
if (logger_) {
logger_->debug("Detaching HEAD before deleting branch.");
if (logger) {
logger->debug("Detaching HEAD before deleting branch.");
}
git_repository_detach_head(data_.repo);
} else {
Call(ret);
}
if (logger_) {
logger_->debug("Deleting branch.");
if (logger) {
logger->debug("Deleting branch.");
}
Call(git_branch_delete(data_.reference));
@@ -515,8 +521,9 @@ std::string GitHelper::GetHeadCommitId(bool shortId) {
throw GitStateError(
"Cannot fetch repository updates, buffer memory already allocated.");
if (logger_) {
logger_->trace("Getting the Git object for HEAD.");
auto logger = getLogger();
if (logger) {
logger->trace("Getting the Git object for HEAD.");
}
Call(git_repository_head(&data_.reference, data_.repo));
@@ -524,8 +531,8 @@ std::string GitHelper::GetHeadCommitId(bool shortId) {
if (shortId) {
Call(git_reference_peel(&data_.object, data_.reference, GIT_OBJ_COMMIT));
if (logger_) {
logger_->trace("Generating hex string for Git object ID.");
if (logger) {
logger->trace("Generating hex string for Git object ID.");
}
Call(git_object_short_id(&data_.buffer, data_.object));
id = data_.buffer.ptr;
@@ -559,8 +566,9 @@ std::string GitHelper::GetHeadCommitDate() {
"Cannot get HEAD commit date, reference memory already allocated.");
}
if (logger_) {
logger_->trace("Getting the Git reference for HEAD.");
auto logger = getLogger();
if (logger) {
logger->trace("Getting the Git reference for HEAD.");
}
Call(git_repository_head(&data_.reference, data_.repo));
@@ -569,8 +577,8 @@ std::string GitHelper::GetHeadCommitDate() {
git_reference_free(data_.reference);
data_.reference = nullptr;
if (logger_) {
logger_->trace("Getting commit for ID.");
if (logger) {
logger->trace("Getting commit for ID.");
}
Call(git_commit_lookup(&data_.commit, data_.repo, commit_id));
-3
View File
@@ -34,8 +34,6 @@
namespace loot {
class GitHelper {
public:
explicit GitHelper();
void InitialiseOptions(const std::string& branch,
const std::string& filenameToCheckout);
void Open(const std::filesystem::path& repoRoot);
@@ -101,7 +99,6 @@ private:
const git_oid* GetCommitId(git_reference* reference);
GitData data_;
std::shared_ptr<spdlog::logger> logger_;
};
}
#endif