File tree Expand file tree Collapse file tree 10 files changed +96
-43
lines changed Expand file tree Collapse file tree 10 files changed +96
-43
lines changed Original file line number Diff line number Diff line change @@ -49,6 +49,8 @@ set(GIT2CPP_SRC
4949    ${GIT2CPP_SOURCE_DIR} /utils/common.hpp
5050    ${GIT2CPP_SOURCE_DIR} /utils/git_exception.cpp
5151    ${GIT2CPP_SOURCE_DIR} /utils/git_exception.hpp
52+     ${GIT2CPP_SOURCE_DIR} /wrapper/commit_wrapper.cpp
53+     ${GIT2CPP_SOURCE_DIR} /wrapper/commit_wrapper.hpp
5254    ${GIT2CPP_SOURCE_DIR} /wrapper/index_wrapper.cpp
5355    ${GIT2CPP_SOURCE_DIR} /wrapper/index_wrapper.hpp
5456    ${GIT2CPP_SOURCE_DIR} /wrapper/refs_wrapper.cpp
@@ -57,6 +59,7 @@ set(GIT2CPP_SRC
5759    ${GIT2CPP_SOURCE_DIR} /wrapper/repository_wrapper.hpp
5860    ${GIT2CPP_SOURCE_DIR} /wrapper/status_wrapper.cpp
5961    ${GIT2CPP_SOURCE_DIR} /wrapper/status_wrapper.hpp
62+     ${GIT2CPP_SOURCE_DIR} /wrapper/wrapper_base.hpp
6063    ${GIT2CPP_SOURCE_DIR} /main.cpp
6164    ${GIT2CPP_SOURCE_DIR} /version .hpp
6265)
Original file line number Diff line number Diff line change @@ -19,38 +19,6 @@ class noncopyable_nonmovable
1919    ~noncopyable_nonmovable () = default ;
2020};
2121
22- template  <class  T >
23- class  wrapper_base 
24- {
25- public: 
26-     using  resource_type = T;
27- 
28-     wrapper_base (const  wrapper_base&) = delete ;
29-     wrapper_base& operator =(const  wrapper_base&) = delete ;
30- 
31-     wrapper_base (wrapper_base&& rhs)
32-         : p_resource(rhs.p_resource)
33-     {
34-         rhs.p_resource  = nullptr ;
35-     }
36-     wrapper_base& operator =(wrapper_base&& rhs)
37-     {
38-         std::swap (p_resource, rhs.p_resource );
39-         return  *this ;
40-     }
41- 
42-     operator  resource_type*() const  noexcept 
43-     {
44-         return  p_resource;
45-     }
46- 
47- protected: 
48-     //  Allocation and deletion of p_resource must be handled by inheriting class.
49-     wrapper_base () = default ;
50-     ~wrapper_base () = default ;
51-     resource_type* p_resource = nullptr ;
52- };
53- 
5422class  libgit2_object  : private  noncopyable_nonmovable 
5523{
5624public: 
Original file line number Diff line number Diff line change 1+ #include  " commit_wrapper.hpp" 
2+ #include  " ../utils/git_exception.hpp" 
3+ 
4+ commit_wrapper::~commit_wrapper ()
5+ {
6+     git_commit_free (p_resource);
7+     p_resource = nullptr ;
8+ }
9+ 
10+ 
11+ commit_wrapper commit_wrapper::last_commit (const  repository_wrapper& repo, const  std::string& ref_name)
12+ {
13+     git_oid oid_parent_commit;
14+     throwIfError (git_reference_name_to_id (&oid_parent_commit, repo, ref_name.c_str ()));
15+ 
16+     commit_wrapper cw;
17+     throwIfError (git_commit_lookup (&(cw.p_resource ), repo, &oid_parent_commit));
18+     return  cw;
19+ }
Original file line number Diff line number Diff line change 1+ #pragma  once
2+ 
3+ #include  < string> 
4+ 
5+ #include  < git2.h> 
6+ 
7+ #include  " ../wrapper/repository_wrapper.hpp" 
8+ #include  " ../wrapper/wrapper_base.hpp" 
9+ 
10+ class  commit_wrapper  : public  wrapper_base <git_commit>
11+ {
12+ public: 
13+ 
14+     ~commit_wrapper ();
15+ 
16+     commit_wrapper (commit_wrapper&&) noexcept  = default ;
17+     commit_wrapper& operator =(commit_wrapper&&) noexcept  = default ;
18+ 
19+     static  commit_wrapper
20+     last_commit (const  repository_wrapper& repo, const  std::string& ref_name = " HEAD" 
21+ 
22+ private: 
23+ 
24+     commit_wrapper () = default ;
25+ };
Original file line number Diff line number Diff line change 11#include  " index_wrapper.hpp" 
2+ #include  " ../utils/common.hpp" 
23#include  " ../utils/git_exception.hpp" 
34#include  " ../wrapper/repository_wrapper.hpp" 
45
Original file line number Diff line number Diff line change 55
66#include  < git2.h> 
77
8- #include  " ../utils/common .hpp" 
8+ #include  " ../wrapper/wrapper_base .hpp" 
99
1010class  repository_wrapper ;
1111
@@ -15,8 +15,8 @@ class index_wrapper : public wrapper_base<git_index>
1515
1616    ~index_wrapper ();
1717
18-     index_wrapper (index_wrapper&&) = default ;
19-     index_wrapper& operator =(index_wrapper&&) = default ;
18+     index_wrapper (index_wrapper&&) noexcept   = default ;
19+     index_wrapper& operator =(index_wrapper&&) noexcept   = default ;
2020
2121    static  index_wrapper init (repository_wrapper& rw);
2222
Original file line number Diff line number Diff line change 11#pragma  once
22
3- //  #include <string>
3+  #include  < string> 
44
55#include  < git2.h> 
66
77#include  " ../wrapper/repository_wrapper.hpp" 
8+ #include  " ../wrapper/wrapper_base.hpp" 
89
910class  reference_wrapper  : public  wrapper_base <git_reference>
1011{
1112public: 
1213
1314    ~reference_wrapper ();
1415
15-     reference_wrapper (reference_wrapper&&) = default ;
16-     reference_wrapper& operator =(reference_wrapper&&) = default ;
16+     reference_wrapper (reference_wrapper&&) noexcept   = default ;
17+     reference_wrapper& operator =(reference_wrapper&&) noexcept   = default ;
1718
1819    static  std::string get_ref_name (const  repository_wrapper& repo);
1920
Original file line number Diff line number Diff line change 44
55#include  < git2.h> 
66
7- #include  " ../utils/common.hpp" 
87#include  " ../wrapper/index_wrapper.hpp" 
8+ #include  " ../wrapper/wrapper_base.hpp" 
99
1010class  repository_wrapper  : public  wrapper_base <git_repository>
1111{
1212public: 
1313
1414    ~repository_wrapper ();
1515
16-     repository_wrapper (repository_wrapper&&) = default ;
17-     repository_wrapper& operator =(repository_wrapper&&) = default ;
16+     repository_wrapper (repository_wrapper&&) noexcept   = default ;
17+     repository_wrapper& operator =(repository_wrapper&&) noexcept   = default ;
1818
1919    static  repository_wrapper init (const  std::string& directory, bool  bare);
2020    static  repository_wrapper open (const  std::string& directory);
Original file line number Diff line number Diff line change 66#include  < git2.h> 
77
88#include  " ../wrapper/repository_wrapper.hpp" 
9+ #include  " ../wrapper/wrapper_base.hpp" 
910
1011class  status_list_wrapper  : public  wrapper_base <git_status_list>
1112{
@@ -14,8 +15,8 @@ class status_list_wrapper : public wrapper_base<git_status_list>
1415
1516    ~status_list_wrapper ();
1617
17-     status_list_wrapper (status_list_wrapper&&) = default ;
18-     status_list_wrapper& operator =(status_list_wrapper&&) = default ;
18+     status_list_wrapper (status_list_wrapper&&) noexcept   = default ;
19+     status_list_wrapper& operator =(status_list_wrapper&&) noexcept   = default ;
1920
2021    static  status_list_wrapper status_list (const  repository_wrapper& wrapper);
2122
Original file line number Diff line number Diff line change 1+ #pragma  once
2+ 
3+ 
4+ template  <class  T >
5+ class  wrapper_base 
6+ {
7+ public: 
8+     using  resource_type = T;
9+ 
10+     wrapper_base (const  wrapper_base&) = delete ;
11+     wrapper_base& operator =(const  wrapper_base&) = delete ;
12+ 
13+     wrapper_base (wrapper_base&& rhs) noexcept 
14+         : p_resource(rhs.p_resource)
15+     {
16+         rhs.p_resource  = nullptr ;
17+     }
18+     wrapper_base& operator =(wrapper_base&& rhs) noexcept 
19+     {
20+         std::swap (p_resource, rhs.p_resource );
21+         return  *this ;
22+     }
23+ 
24+     operator  resource_type*() const  noexcept 
25+     {
26+         return  p_resource;
27+     }
28+ 
29+ protected: 
30+     //  Allocation and deletion of p_resource must be handled by inheriting class.
31+     wrapper_base () = default ;
32+     ~wrapper_base () = default ;
33+ 
34+     resource_type* p_resource = nullptr ;
35+ };
 
 
   
 
     
   
   
          
    
    
     
    
      
     
     
    You can’t perform that action at this time.
  
 
    
  
    
      
        
     
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments