From 4e897ae2fcef50616879ce8d87adc53d4136be7a Mon Sep 17 00:00:00 2001 From: Johan Mabille Date: Tue, 23 Sep 2025 23:06:56 +0200 Subject: [PATCH 1/2] Implemented template metod peel --- src/wrapper/commit_wrapper.hpp | 1 + src/wrapper/object_wrapper.hpp | 1 + src/wrapper/refs_wrapper.hpp | 30 ++++++++++++++++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/src/wrapper/commit_wrapper.hpp b/src/wrapper/commit_wrapper.hpp index d7930d9..0560007 100644 --- a/src/wrapper/commit_wrapper.hpp +++ b/src/wrapper/commit_wrapper.hpp @@ -26,4 +26,5 @@ class commit_wrapper : public wrapper_base commit_wrapper(git_commit* commit); friend class repository_wrapper; + friend class reference_wrapper; }; diff --git a/src/wrapper/object_wrapper.hpp b/src/wrapper/object_wrapper.hpp index bceab14..d839ade 100644 --- a/src/wrapper/object_wrapper.hpp +++ b/src/wrapper/object_wrapper.hpp @@ -24,4 +24,5 @@ class object_wrapper : public wrapper_base object_wrapper(git_object* obj); friend class repository_wrapper; + friend class reference_wrapper; }; diff --git a/src/wrapper/refs_wrapper.hpp b/src/wrapper/refs_wrapper.hpp index 2ad4b21..c0ff534 100644 --- a/src/wrapper/refs_wrapper.hpp +++ b/src/wrapper/refs_wrapper.hpp @@ -1,5 +1,6 @@ #pragma once +#include #include #include @@ -20,9 +21,38 @@ class reference_wrapper : public wrapper_base std::string short_name() const; bool is_remote() const; + template + W peel() const; + private: reference_wrapper(git_reference* ref); friend class repository_wrapper; }; + +class commit_wrapper; +class object_wrapper; + +// TODO: add constraints on W +// For now it accepts commit_wrapper and object_wrapper only +template +W reference_wrapper::peel() const +{ + constexpr git_object_t obj_type = [] + { + if constexpr (std::same_as) + { + return GIT_OBJECT_COMMIT; + } + else // Default case + { + return GIT_OBJECT_ANY; + } + }(); + + using resource_type = typename W::resoure_type; + git_object* resource = nullptr; + throw_if_error(git_reference_peel(&resource, this->p_resource, obj_type)); + return W(reinterpret_cast(resource)); +} From ad3ad7cb95c9d7eb1d7c0ce984d09b6eb9b4adfc Mon Sep 17 00:00:00 2001 From: Johan Mabille Date: Wed, 15 Oct 2025 18:03:03 +0200 Subject: [PATCH 2/2] Typo negative --- src/wrapper/refs_wrapper.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wrapper/refs_wrapper.hpp b/src/wrapper/refs_wrapper.hpp index c0ff534..e7509c2 100644 --- a/src/wrapper/refs_wrapper.hpp +++ b/src/wrapper/refs_wrapper.hpp @@ -51,7 +51,7 @@ W reference_wrapper::peel() const } }(); - using resource_type = typename W::resoure_type; + using resource_type = typename W::resource_type; git_object* resource = nullptr; throw_if_error(git_reference_peel(&resource, this->p_resource, obj_type)); return W(reinterpret_cast(resource));