OSDN Git Service

Add Show Whole Project Checkbox at commitdlg.
[tortoisegit/TortoiseGitJp.git] / src / Git / Git.cpp
index 5d62fb2..6208576 100644 (file)
@@ -218,6 +218,9 @@ void CGit::StringAppend(CString *str,BYTE *p,int code,int length)
 {\r
      //USES_CONVERSION;\r
         //str->Append(A2W_CP((LPCSTR)p,code));\r
+       if(str == NULL)\r
+               return ;\r
+\r
        WCHAR * buf;\r
 \r
        int len ;\r
@@ -388,14 +391,14 @@ int CGit::BuildOutputFormat(CString &format,bool IsFull)
        return 0;\r
 }\r
 \r
-int CGit::GetLog(BYTE_VECTOR& logOut, CString &hash,  CTGitPath *path ,int count,int mask)\r
+int CGit::GetLog(BYTE_VECTOR& logOut, CString &hash,  CTGitPath *path ,int count,int mask,CString *from,CString *to)\r
 {\r
        CGitCall_ByteVector gitCall(CString(),&logOut);\r
-       return GetLog(&gitCall,hash,path,count,mask);\r
+       return GetLog(&gitCall,hash,path,count,mask,from,to);\r
 }\r
 \r
 //int CGit::GetLog(CGitCall* pgitCall, CString &hash,  CTGitPath *path ,int count,int mask)\r
-int CGit::GetLog(CGitCall* pgitCall, CString &hash, CTGitPath *path, int count, int mask)\r
+int CGit::GetLog(CGitCall* pgitCall, CString &hash, CTGitPath *path, int count, int mask,CString *from,CString *to)\r
 {\r
 \r
        CString cmd;\r
@@ -442,6 +445,12 @@ int CGit::GetLog(CGitCall* pgitCall, CString &hash, CTGitPath *path, int count,
        if(mask& CGit::LOG_INFO_FOLLOW)\r
                param += _T(" --follow ");\r
 \r
+       if(from != NULL && to != NULL)\r
+       {\r
+               CString range;\r
+               range.Format(_T(" %s..%s "),*from,*to);\r
+               param += range;\r
+       }\r
        param+=hash;\r
 \r
        cmd.Format(_T("git.exe log %s -z --topo-order %s --parents --pretty=format:\""),\r
@@ -911,9 +920,9 @@ BOOL CGit::EnumFiles(const char *pszProjectPath, const char *pszSubPath, unsigne
        }\r
 \r
        if (pszSubPath)\r
-               cmd.Format(_T("igit.exe %s status %s %s"), CUnicodeUtils::GetUnicode(pszProjectPath), sMode, CUnicodeUtils::GetUnicode(pszSubPath));\r
+               cmd.Format(_T("igit.exe \"%s\" status %s \"%s\""), CUnicodeUtils::GetUnicode(pszProjectPath), sMode, CUnicodeUtils::GetUnicode(pszSubPath));\r
        else\r
-               cmd.Format(_T("igit.exe %s status %s"), CUnicodeUtils::GetUnicode(pszProjectPath), sMode);\r
+               cmd.Format(_T("igit.exe \"%s\" status %s"), CUnicodeUtils::GetUnicode(pszProjectPath), sMode);\r
 \r
        W_GitCall.SetCmd(cmd);\r
        // NOTE: should igit get added as a part of msysgit then use below line instead of the above one\r
@@ -924,3 +933,47 @@ BOOL CGit::EnumFiles(const char *pszProjectPath, const char *pszSubPath, unsigne
 \r
        return TRUE;\r
 }\r
+\r
+BOOL CGit::CheckCleanWorkTree()\r
+{\r
+       CString out;\r
+       CString cmd;\r
+       cmd=_T("git.exe rev-parse --verify HEAD");\r
+\r
+       if(g_Git.Run(cmd,&out,CP_UTF8))\r
+               return FALSE;\r
+\r
+       cmd=_T("git.exe update-index --ignore-submodules --refresh");\r
+       if(g_Git.Run(cmd,&out,CP_UTF8))\r
+               return FALSE;\r
+\r
+       cmd=_T("git.exe diff-files --quiet --ignore-submodules");\r
+       if(g_Git.Run(cmd,&out,CP_UTF8))\r
+               return FALSE;\r
+\r
+       cmd=_T("git diff-index --cached --quiet HEAD --ignore-submodules");\r
+       if(g_Git.Run(cmd,&out,CP_UTF8))\r
+               return FALSE;\r
+\r
+       return TRUE;\r
+}\r
+\r
+int CGit::ListConflictFile(CTGitPathList &list,CTGitPath *path)\r
+{\r
+       BYTE_VECTOR vector;\r
+\r
+       CString cmd;\r
+       if(path)\r
+               cmd.Format(_T("git.exe ls-files -u -t -z -- \"%s\""),path->GetGitPathString());\r
+       else\r
+               cmd=_T("git.exe ls-files -u -t -z");\r
+\r
+       if(g_Git.Run(cmd,&vector))\r
+       {\r
+               return -1;\r
+       }\r
+\r
+       list.ParserFromLsFile(vector);\r
+\r
+       return 0;\r
+}
\ No newline at end of file