#endif\r
return name == ".git";\r
}\r
+CString GitAdminDir::GetGitTopDir(const CString& path) \r
+{\r
+ CString str;\r
+ str=_T("");\r
+ HasAdminDir(path,!!PathIsDirectory(path),&str);\r
+ return str;\r
+}\r
\r
bool GitAdminDir::HasAdminDir(const CString& path) const\r
{\r
return HasAdminDir(path, !!PathIsDirectory(path));\r
}\r
\r
-bool GitAdminDir::HasAdminDir(const CString& path, bool bDir) const\r
+bool GitAdminDir::HasAdminDir(const CString& path,CString *ProjectTopDir) const\r
+{\r
+ return HasAdminDir(path, !!PathIsDirectory(path),ProjectTopDir);\r
+}\r
+\r
+bool GitAdminDir::HasAdminDir(const CString& path, bool bDir,CString *ProjectTopDir) const\r
{\r
if (path.IsEmpty())\r
return false;\r
sDirName = path.Left(path.ReverseFind('\\'));\r
}\r
\r
+ // a .git dir or anything inside it should be left out, only interested in working copy files -- Myagi\r
+ {\r
+ int n = 0;\r
+ for (;;)\r
+ {\r
+ n = sDirName.Find(_T("\\.git"), n);\r
+ if (n < 0)\r
+ {\r
+ break;\r
+ }\r
+\r
+ // check for actual .git dir (and not .gitignore or something else), continue search if false match\r
+ n += 5;\r
+ if (sDirName[n] == _T('\\') || sDirName[n] == 0)\r
+ {\r
+ return false;\r
+ }\r
+ }\r
+ }\r
+\r
do\r
{\r
if(PathFileExists(sDirName + _T("\\.git")))\r
+ {\r
+ if(ProjectTopDir)\r
+ *ProjectTopDir=sDirName;\r
return true;\r
+ }\r
sDirName = sDirName.Left(sDirName.ReverseFind('\\'));\r
\r
}while(sDirName.ReverseFind('\\')>0);\r