#include "../wrapper/signature_wrapper.hpp"
#include
#include "../utils/git_exception.hpp"
#include "../wrapper/repository_wrapper.hpp"
signature_wrapper::~signature_wrapper()
{
if (m_ownership)
{
git_signature_free(p_resource);
}
p_resource = nullptr;
}
std::string_view signature_wrapper::name() const
{
return p_resource->name;
}
std::string_view signature_wrapper::email() const
{
return p_resource->email;
}
git_time signature_wrapper::when() const
{
return p_resource->when;
}
signature_wrapper::author_committer_signatures
signature_wrapper::get_default_signature_from_env(repository_wrapper& rw)
{
signature_wrapper author;
signature_wrapper committer;
throw_if_error(git_signature_default_from_env(&(author.p_resource), &(committer.p_resource), rw));
return {std::move(author), std::move(committer)};
}
signature_wrapper signature_wrapper::get_commit_author(const commit_wrapper& cw)
{
signature_wrapper author;
author.p_resource = const_cast(git_commit_author(cw));
author.m_ownership = false;
return author;
}
signature_wrapper signature_wrapper::get_commit_committer(const commit_wrapper& cw)
{
signature_wrapper committer;
committer.p_resource = const_cast(git_commit_committer(cw));
committer.m_ownership = false;
return committer;
}
signature_wrapper signature_wrapper::signature_now(std::string_view name, std::string_view email)
{
signature_wrapper sw;
git_signature* signature;
throw_if_error(git_signature_now(&signature, name.data(), email.data()));
sw.p_resource = signature;
sw.m_ownership = true;
return sw;
}
signature_wrapper::author_committer_signatures signature_wrapper::signature_now(
std::string_view author_name,
std::string_view author_email,
std::string_view committer_name,
std::string_view committer_email
)
{
signature_wrapper author_sig = signature_now(author_name.data(), author_email.data());
signature_wrapper cmt_sig = signature_now(committer_name.data(), committer_email.data());
// Deep copy of "when", which contains only copiable values, not pointers
cmt_sig.p_resource->when = author_sig.p_resource->when;
return std::pair(std::move(author_sig), std::move(cmt_sig));
}