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 : // Default: hybrid (ADR-0029). Override with ESYSREPO_GIT_BACKEND= 49 : // libgit2 | gitcmdline | cmdline | hybrid. 50 1 : const char *env = std::getenv("ESYSREPO_GIT_BACKEND"); 51 1 : if (env != nullptr && env[0] != '\0') 52 : { 53 0 : const std::string v(env); 54 0 : if (v == "libgit2") 55 0 : m_new_ptr_fct = libgit2::Git::new_ptr; 56 0 : else if (v == "gitcmdline" || v == "cmdline") 57 0 : m_new_ptr_fct = gitcmdline::Git::new_ptr; 58 : else 59 0 : m_new_ptr_fct = hybrid::Git::new_ptr; 60 0 : } 61 : else 62 : { 63 1 : m_new_ptr_fct = hybrid::Git::new_ptr; 64 : } 65 : } 66 : 67 145 : return m_new_ptr_fct; 68 : } 69 : 70 145 : std::shared_ptr<GitBase> GitMngr::new_ptr() 71 : { 72 145 : return (*get_new_ptr())(); 73 : } 74 : 75 : } // namespace esys::repo