OSDN Git Service

Fix TortoiseGitBlame commit is not in log list problem.
[tortoisegit/TortoiseGitJp.git] / src / Git / GitAdminDir.cpp
1 // TortoiseGit - a Windows shell extension for easy version control\r
2 \r
3 // Copyright (C) 2003-2008 - TortoiseGit\r
4 \r
5 // This program is free software; you can redistribute it and/or\r
6 // modify it under the terms of the GNU General Public License\r
7 // as published by the Free Software Foundation; either version 2\r
8 // of the License, or (at your option) any later version.\r
9 \r
10 // This program is distributed in the hope that it will be useful,\r
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13 // GNU General Public License for more details.\r
14 \r
15 // You should have received a copy of the GNU General Public License\r
16 // along with this program; if not, write to the Free Software Foundation,\r
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
18 #include "StdAfx.h"\r
19 #include "UnicodeUtils.h"\r
20 #include "GitAdminDir.h"\r
21 \r
22 GitAdminDir g_GitAdminDir;\r
23 \r
24 GitAdminDir::GitAdminDir()\r
25         : m_nInit(0)\r
26 //      , m_bVSNETHack(false)\r
27 //      , m_pool(NULL)\r
28 {\r
29 }\r
30 \r
31 GitAdminDir::~GitAdminDir()\r
32 {\r
33 //      if (m_nInit)\r
34 //               (m_pool);\r
35 }\r
36 \r
37 bool GitAdminDir::Init()\r
38 {\r
39         if (m_nInit==0)\r
40         {\r
41 #if 0   \r
42                 m_bVSNETHack = false;\r
43                 m_pool = svn_pool_create(NULL);\r
44                 size_t ret = 0;\r
45                 getenv_s(&ret, NULL, 0, "GIT_ASP_DOT_NET_HACK");\r
46                 if (ret)\r
47                 {\r
48                         svn_error_clear(svn_wc_set_adm_dir("_git", m_pool));\r
49                         m_bVSNETHack = true;\r
50                 }\r
51 #endif\r
52         }\r
53         m_nInit++;\r
54         return true;\r
55 }\r
56 \r
57 bool GitAdminDir::Close()\r
58 {\r
59         m_nInit--;\r
60         if (m_nInit>0)\r
61                 return false;\r
62 #if 0\r
63         svn_pool_destroy(m_pool);\r
64 #endif\r
65         return true;\r
66 }\r
67 \r
68 bool GitAdminDir::IsAdminDirName(const CString& name) const\r
69 {\r
70 #if 0\r
71         CStringA nameA = CUnicodeUtils::GetUTF8(name).MakeLower();\r
72         return !!svn_wc_is_adm_dir(nameA, m_pool);\r
73 #endif\r
74         return name == ".git";\r
75 }\r
76 CString GitAdminDir::GetGitTopDir(const CString& path) \r
77 {\r
78         CString str;\r
79         str=_T("");\r
80         HasAdminDir(path,!!PathIsDirectory(path),&str);\r
81         return str;\r
82 }\r
83 \r
84 bool GitAdminDir::HasAdminDir(const CString& path) const\r
85 {\r
86         return HasAdminDir(path, !!PathIsDirectory(path));\r
87 }\r
88 \r
89 bool GitAdminDir::HasAdminDir(const CString& path,CString *ProjectTopDir) const\r
90 {\r
91         return HasAdminDir(path, !!PathIsDirectory(path),ProjectTopDir);\r
92 }\r
93 \r
94 bool GitAdminDir::HasAdminDir(const CString& path, bool bDir,CString *ProjectTopDir) const\r
95 {\r
96         if (path.IsEmpty())\r
97                 return false;\r
98         bool bHasAdminDir = false;\r
99         CString sDirName = path;\r
100         if (!bDir)\r
101         {\r
102                 sDirName = path.Left(path.ReverseFind('\\'));\r
103         }\r
104         \r
105         do\r
106         {\r
107                 if(PathFileExists(sDirName + _T("\\.git")))\r
108                 {\r
109                         if(ProjectTopDir)\r
110                                 *ProjectTopDir=sDirName;\r
111                         return true;\r
112                 }\r
113                 sDirName = sDirName.Left(sDirName.ReverseFind('\\'));\r
114 \r
115         }while(sDirName.ReverseFind('\\')>0);\r
116 \r
117         return false;\r
118         \r
119 }\r
120 \r
121 bool GitAdminDir::IsAdminDirPath(const CString& path) const\r
122 {\r
123         if (path.IsEmpty())\r
124                 return false;\r
125         bool bIsAdminDir = false;\r
126         CString lowerpath = path;\r
127         lowerpath.MakeLower();\r
128         int ind = -1;\r
129         int ind1 = 0;\r
130         while ((ind1 = lowerpath.Find(_T("\\.git"), ind1))>=0)\r
131         {\r
132                 ind = ind1++;\r
133                 if (ind == (lowerpath.GetLength() - 5))\r
134                 {\r
135                         bIsAdminDir = true;\r
136                         break;\r
137                 }\r
138                 else if (lowerpath.Find(_T("\\.git\\"), ind)>=0)\r
139                 {\r
140                         bIsAdminDir = true;\r
141                         break;\r
142                 }\r
143         }\r
144 \r
145         return bIsAdminDir;\r
146 }\r
147 \r