OSDN Git Service

Fixed issue #163: Conflict "theirs" and "mine" are reversed during a rebase
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / AppUtils.cpp
index 9f2b6c4..b79ee62 100644 (file)
@@ -78,6 +78,30 @@ int   CAppUtils::StashApply(CString ref)
        }\r
        return -1;\r
 }\r
+\r
+int     CAppUtils::StashPop()\r
+{\r
+       CString cmd,out;\r
+       cmd=_T("git.exe stash pop ");\r
+               \r
+       if(g_Git.Run(cmd,&out,CP_ACP))\r
+       {\r
+               CMessageBox::Show(NULL,CString(_T("<ct=0x0000FF>Stash POP Fail!!!</ct>\n"))+out,_T("TortoiseGit"),MB_OK|MB_ICONERROR);\r
+\r
+       }else\r
+       {\r
+               if(CMessageBox::Show(NULL,CString(_T("<ct=0xff0000>Stash POP Success</ct>\nDo you want to show change?"))\r
+                       ,_T("TortoiseGit"),MB_YESNO|MB_ICONINFORMATION) == IDYES)\r
+               {\r
+                       CChangedDlg dlg;\r
+                       dlg.m_pathList.AddPath(CTGitPath());\r
+                       dlg.DoModal();                  \r
+               }\r
+               return 0;\r
+       }\r
+       return -1;\r
+}\r
+\r
 bool CAppUtils::GetMimeType(const CTGitPath& file, CString& mimetype)\r
 {\r
 #if 0\r
@@ -585,7 +609,7 @@ bool CAppUtils::LaunchApplication(const CString& sCommandLine, UINT idErrMessage
 \r
        CString cleanCommandLine(sCommandLine);\r
 \r
-       if (CreateProcess(NULL, const_cast<TCHAR*>((LPCTSTR)cleanCommandLine), NULL, NULL, FALSE, 0, 0, sOrigCWD, &startup, &process)==0)\r
+       if (CreateProcess(NULL, const_cast<TCHAR*>((LPCTSTR)cleanCommandLine), NULL, NULL, FALSE, 0, 0, g_Git.m_CurrentDir, &startup, &process)==0)\r
        {\r
                if(idErrMessageFormat != 0)\r
                {\r
@@ -654,7 +678,7 @@ bool CAppUtils::LaunchRemoteSetting()
     proc += _T("TortoiseProc.exe /command:settings");\r
     proc += _T(" /path:\"");\r
     proc += g_Git.m_CurrentDir;\r
-    proc += _T("\" /page:remote");\r
+    proc += _T("\" /page:gitremote");\r
     return LaunchApplication(proc, IDS_ERR_EXTDIFFSTART, false);\r
 }\r
 /**\r
@@ -1344,7 +1368,7 @@ CString CAppUtils::GetMergeTempFile(CString type,CTGitPath &merge)
        return file;\r
 }\r
 \r
-bool CAppUtils::ConflictEdit(CTGitPath &path,bool bAlternativeTool)\r
+bool CAppUtils::ConflictEdit(CTGitPath &path,bool bAlternativeTool,bool revertTheirMy)\r
 {\r
        bool bRet = false;\r
 \r
@@ -1431,7 +1455,10 @@ bool CAppUtils::ConflictEdit(CTGitPath &path,bool bAlternativeTool)
        if(b_local && b_remote )\r
        {\r
                merge.SetFromWin(g_Git.m_CurrentDir+_T("\\")+merge.GetWinPathString());\r
-               bRet = !!CAppUtils::StartExtMerge(base, theirs, mine, merge,_T("BASE"),_T("REMOTE"),_T("LOCAL"));\r
+               if( revertTheirMy )\r
+                       bRet = !!CAppUtils::StartExtMerge(base,mine, theirs,  merge,_T("BASE"),_T("LOCAL"),_T("REMOTE"));\r
+               else\r
+                       bRet = !!CAppUtils::StartExtMerge(base, theirs, mine, merge,_T("BASE"),_T("REMOTE"),_T("LOCAL"));\r
        \r
        }else\r
        {\r
@@ -1449,9 +1476,9 @@ bool CAppUtils::ConflictEdit(CTGitPath &path,bool bAlternativeTool)
                        CString cmd,out;\r
                        if(dlg.m_bIsDelete)\r
                        {\r
-                               cmd.Format(_T("git.exe rm \"%s\""),merge.GetGitPathString());\r
+                               cmd.Format(_T("git.exe rm -- \"%s\""),merge.GetGitPathString());\r
                        }else\r
-                               cmd.Format(_T("git.exe add \"%s\""),merge.GetGitPathString());\r
+                               cmd.Format(_T("git.exe add -- \"%s\""),merge.GetGitPathString());\r
 \r
                        if(g_Git.Run(cmd,&out,CP_ACP))\r
                        {\r
@@ -1992,6 +2019,32 @@ bool CAppUtils::SendPatchMail(CTGitPathList &list,bool autoclose)
        }\r
        return false;\r
 }\r
+\r
+bool CAppUtils::SendPatchMail(CString &cmd,CString &formatpatchoutput,bool autoclose)\r
+{\r
+       CTGitPathList list;\r
+       CString log=formatpatchoutput;\r
+       int start=log.Find(cmd);\r
+       if(start >=0)\r
+               CString one=log.Tokenize(_T("\n"),start);\r
+       else\r
+               start = 0;\r
+\r
+       while(start>=0)\r
+       {\r
+               CString one=log.Tokenize(_T("\n"),start);\r
+               one=one.Trim();\r
+               if(one.IsEmpty())\r
+                       continue;\r
+               one.Replace(_T('/'),_T('\\'));\r
+               CTGitPath path;\r
+               path.SetFromWin(one);\r
+               list.AddPath(path);\r
+       }\r
+       return SendPatchMail(list,autoclose);\r
+}\r
+\r
+\r
 int CAppUtils::GetLogOutputEncode(CGit *pGit)\r
 {\r
        CString cmd,output;\r