OSDN Git Service

Add Pull Push Fetch Clone Dialog
[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         bool b=PathIsDirectory(path);\r
92         return HasAdminDir(path, !!PathIsDirectory(path),ProjectTopDir);\r
93 }\r
94 \r
95 bool GitAdminDir::HasAdminDir(const CString& path, bool bDir,CString *ProjectTopDir) const\r
96 {\r
97         if (path.IsEmpty())\r
98                 return false;\r
99         bool bHasAdminDir = false;\r
100         CString sDirName = path;\r
101         if (!bDir)\r
102         {\r
103                 sDirName = path.Left(path.ReverseFind('\\'));\r
104         }\r
105         \r
106         do\r
107         {\r
108                 if(PathFileExists(sDirName + _T("\\.git")))\r
109                 {\r
110                         if(ProjectTopDir)\r
111                                 *ProjectTopDir=sDirName;\r
112                         return true;\r
113                 }\r
114                 sDirName = sDirName.Left(sDirName.ReverseFind('\\'));\r
115 \r
116         }while(sDirName.ReverseFind('\\')>0);\r
117 \r
118         return false;\r
119         \r
120 }\r
121 \r
122 bool GitAdminDir::IsAdminDirPath(const CString& path) const\r
123 {\r
124         if (path.IsEmpty())\r
125                 return false;\r
126         bool bIsAdminDir = false;\r
127         CString lowerpath = path;\r
128         lowerpath.MakeLower();\r
129         int ind = -1;\r
130         int ind1 = 0;\r
131         while ((ind1 = lowerpath.Find(_T("\\.git"), ind1))>=0)\r
132         {\r
133                 ind = ind1++;\r
134                 if (ind == (lowerpath.GetLength() - 5))\r
135                 {\r
136                         bIsAdminDir = true;\r
137                         break;\r
138                 }\r
139                 else if (lowerpath.Find(_T("\\.git\\"), ind)>=0)\r
140                 {\r
141                         bIsAdminDir = true;\r
142                         break;\r
143                 }\r
144         }\r
145 \r
146         return bIsAdminDir;\r
147 }\r
148 \r