OSDN Git Service

Fix Colin Law report clone crash at no git directory
[tortoisegit/TortoiseGitJp.git] / src / Git / TGitPath.cpp
index af6a4ab..b86b56b 100644 (file)
@@ -102,6 +102,9 @@ int CTGitPath::ParserAction(BYTE action)
                m_Action|= LOGACTIONS_DELETED;\r
        if(action == 'H')\r
                m_Action|= LOGACTIONS_CACHE;\r
+       if(action == 'C' )\r
+               m_Action|= LOGACTIONS_COPY;\r
+\r
        return m_Action;\r
 }\r
 void CTGitPath::SetFromGit(const char* pPath)\r
@@ -729,11 +732,28 @@ bool CTGitPath::HasAdminDir() const
                return m_bHasAdminDir;\r
 \r
        EnsureBackslashPathSet();\r
-       m_bHasAdminDir = g_GitAdminDir.HasAdminDir(m_sBackslashPath, IsDirectory());\r
+       m_bHasAdminDir = g_GitAdminDir.HasAdminDir(m_sBackslashPath, IsDirectory(), &m_sProjectRoot);\r
        m_bHasAdminDirKnown = true;\r
        return m_bHasAdminDir;\r
 }\r
 \r
+bool CTGitPath::HasAdminDir(CString *ProjectTopDir) const\r
+{\r
+       if (m_bHasAdminDirKnown)\r
+       {\r
+               if (ProjectTopDir)\r
+                       *ProjectTopDir = m_sProjectRoot;\r
+               return m_bHasAdminDir;\r
+       }\r
+\r
+       EnsureBackslashPathSet();\r
+       m_bHasAdminDir = g_GitAdminDir.HasAdminDir(m_sBackslashPath, IsDirectory(), &m_sProjectRoot);\r
+       m_bHasAdminDirKnown = true;\r
+       if (ProjectTopDir)\r
+               *ProjectTopDir = m_sProjectRoot;\r
+       return m_bHasAdminDir;\r
+}\r
+\r
 bool CTGitPath::IsAdminDir() const\r
 {\r
        if (m_bIsAdminDirKnown)\r
@@ -908,6 +928,7 @@ int CTGitPathList::FillUnRev(int action,CTGitPathList *list)
                CString one;\r
                while( pos>=0 && pos<out.size())\r
                {\r
+                       one.Empty();\r
                        g_Git.StringAppend(&one,&out[pos],CP_OEMCP);\r
                        if(!one.IsEmpty())\r
                        {\r
@@ -1034,6 +1055,7 @@ int CTGitPathList::ParserFromLog(BYTE_VECTOR &log)
                                        sec++;\r
                                        g_Git.StringAppend(&file1,&log[sec],CP_OEMCP);\r
                                }\r
+                               pos=sec;\r
 \r
                        }else\r
                        {\r
@@ -1856,6 +1878,9 @@ CString CTGitPath::GetActionName()
                return _T("Modified");\r
        if(m_Action  & CTGitPath::LOGACTIONS_REPLACED)\r
                return _T("Rename");\r
+       if(m_Action  & CTGitPath::LOGACTIONS_COPY)\r
+               return _T("Copy");\r
+\r
        return _T("Unknown");\r
 }\r
 \r