Line data Source code
1 : /*! 2 : * \file esys/repo/gitmngr.cpp 3 : * \brief 4 : * 5 : * \cond 6 : * __legal_b__ 7 : * 8 : * Copyright (c) 2020-2021 Michel Gillet 9 : * Distributed under the MIT License. 10 : * (See accompanying file LICENSE.txt or 11 : * copy at https://opensource.org/licenses/MIT) 12 : * 13 : * __legal_e__ 14 : * \endcond 15 : * 16 : */ 17 : 18 : #include "esys/repo/esysrepo_prec.h" 19 : #include "esys/repo/gitmngr.h" 20 : #include "esys/repo/gitcmdline/git.h" 21 : #include "esys/repo/hybrid/git.h" 22 : #include "esys/repo/libgit2/git.h" 23 : 24 : #include <cstdlib> 25 : #include <string> 26 : 27 : namespace esys::repo 28 : { 29 : 30 : GitMngr::NewPtrFct GitMngr::m_new_ptr_fct = nullptr; 31 : 32 0 : GitMngr::GitMngr() 33 0 : : log::User() 34 : { 35 0 : } 36 : 37 0 : GitMngr::~GitMngr() = default; 38 : 39 0 : void GitMngr::set_new_ptr(NewPtrFct new_ptr_fct) 40 : { 41 0 : m_new_ptr_fct = new_ptr_fct; 42 0 : } 43 : 44 145 : GitMngr::NewPtrFct GitMngr::get_new_ptr() 45 : { 46 145 : if (m_new_ptr_fct == nullptr) 47 : { 48 1 : const char *env = std::getenv("ESYSREPO_GIT_BACKEND"); 49 1 : if (env != nullptr) 50 : { 51 0 : const std::string v(env); 52 0 : if (v == "hybrid") 53 0 : m_new_ptr_fct = hybrid::Git::new_ptr; 54 0 : else if (v == "gitcmdline" || v == "cmdline") 55 0 : m_new_ptr_fct = gitcmdline::Git::new_ptr; 56 : else 57 0 : m_new_ptr_fct = libgit2::Git::new_ptr; 58 0 : } 59 : else 60 : { 61 1 : m_new_ptr_fct = libgit2::Git::new_ptr; 62 : } 63 : } 64 : 65 145 : return m_new_ptr_fct; 66 : } 67 : 68 145 : std::shared_ptr<GitBase> GitMngr::new_ptr() 69 : { 70 145 : return (*get_new_ptr())(); 71 : } 72 : 73 : } // namespace esys::repo