OSDN Git Service

'Cherry-pick' commits after combined commits when combine is done
[tortoisegit/TortoiseGitJp.git] / src / Git / GitAdminDir.cpp
index 3ed2137..f05763b 100644 (file)
@@ -73,13 +73,25 @@ bool GitAdminDir::IsAdminDirName(const CString& name) const
 #endif\r
        return name == ".git";\r
 }\r
 #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
 \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
 {\r
        if (path.IsEmpty())\r
                return false;\r
@@ -90,10 +102,34 @@ bool GitAdminDir::HasAdminDir(const CString& path, bool bDir) const
                sDirName = path.Left(path.ReverseFind('\\'));\r
        }\r
        \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
        do\r
        {\r
                if(PathFileExists(sDirName + _T("\\.git")))\r
+               {\r
+                       if(ProjectTopDir)\r
+                               *ProjectTopDir=sDirName;\r
                        return true;\r
                        return true;\r
+               }\r
                sDirName = sDirName.Left(sDirName.ReverseFind('\\'));\r
 \r
        }while(sDirName.ReverseFind('\\')>0);\r
                sDirName = sDirName.Left(sDirName.ReverseFind('\\'));\r
 \r
        }while(sDirName.ReverseFind('\\')>0);\r