OSDN Git Service

Merge branch 'master' of git://repo.or.cz/TortoiseGit
authorjackie <kjackie@gmail.com>
Sat, 28 Feb 2009 14:06:28 +0000 (22:06 +0800)
committerjackie <kjackie@gmail.com>
Sat, 28 Feb 2009 14:06:28 +0000 (22:06 +0800)
25 files changed:
doc/source/en/TortoiseGit/tsvn_preface.xml
ext/gitexe/igit.exe [new file with mode: 0644]
ext/gitexe/libiconv2.dll [new file with mode: 0644]
ext/igit.exe [deleted file]
src/Git/Git.cpp
src/Git/Git.h
src/Git/GitFolderStatus.cpp
src/Git/GitStatus.cpp
src/Git/GitStatusListCtrl.cpp
src/Git/TGitPath.cpp
src/Resources/TortoiseProcENG.rc
src/TGitCache/CachedDirectory.cpp
src/TortoiseGitSetup/StructureFragment.wxi
src/TortoiseGitSetup/VersionNumberInclude.wxi
src/TortoiseProc/AppUtils.cpp
src/TortoiseProc/AppUtils.h
src/TortoiseProc/CommitDlg.cpp
src/TortoiseProc/DeleteConflictDlg.cpp [new file with mode: 0644]
src/TortoiseProc/DeleteConflictDlg.h [new file with mode: 0644]
src/TortoiseProc/GitLogListAction.cpp
src/TortoiseProc/GitLogListBase.cpp
src/TortoiseProc/RebaseDlg.cpp
src/TortoiseProc/RebaseDlg.h
src/TortoiseProc/TortoiseProc.vcproj
src/TortoiseProc/resource.h

index 1b74e99..91c3090 100644 (file)
                <title>Acknowledgments</title>\r
                <variablelist>\r
                        <varlistentry>\r
-                               <term>Frank Li</term>\r
+                               <term>Frank Li "lznuaa@gmail.com"</term>\r
                                <listitem>\r
                                        <para>\r
                                                for founding the TortoiseGit project\r
                                </listitem>\r
                        </varlistentry>\r
                        <varlistentry>\r
-                               <term>Colin Law</term>\r
+                               <term>myagi(Georg Fischer) "snowcoder@gmail.com"</term>\r
                                <listitem>\r
-                                       <para>                                          \r
+                                       <para>\r
+                                       \r
+                                       For hard work to get TortoiseGit Overlay work.\r
                                        </para>\r
                                </listitem>\r
                        </varlistentry>\r
                        <varlistentry>\r
-                               <term>myagi</term>\r
+                               <term>Colin Law</term>\r
                                <listitem>\r
                                        <para>                                          \r
                                        </para>\r
                                </listitem>\r
-                       </varlistentry>\r
+                       </varlistentry>                 \r
                        <varlistentry>\r
                                <term>Johan t Hart</term>\r
                                <listitem>\r
diff --git a/ext/gitexe/igit.exe b/ext/gitexe/igit.exe
new file mode 100644 (file)
index 0000000..73fce70
Binary files /dev/null and b/ext/gitexe/igit.exe differ
diff --git a/ext/gitexe/libiconv2.dll b/ext/gitexe/libiconv2.dll
new file mode 100644 (file)
index 0000000..17da219
Binary files /dev/null and b/ext/gitexe/libiconv2.dll differ
diff --git a/ext/igit.exe b/ext/igit.exe
deleted file mode 100644 (file)
index 0bb56e3..0000000
Binary files a/ext/igit.exe and /dev/null differ
index 3508193..2d00110 100644 (file)
@@ -808,7 +808,7 @@ BOOL CGit::CheckMsysGitDir()
 class CGitCall_EnumFiles : public CGitCall\r
 {\r
 public:\r
-       CGitCall_EnumFiles(const char *pszProjectPath, const char *pszSubPath, unsigned int nFlags, WGENUMFILECB *pEnumCb, void *pUserData)\r
+       CGitCall_EnumFiles(const TCHAR *pszProjectPath, const TCHAR *pszSubPath, unsigned int nFlags, WGENUMFILECB *pEnumCb, void *pUserData)\r
        :       m_pszProjectPath(pszProjectPath),\r
                m_pszSubPath(pszSubPath),\r
                m_nFlags(nFlags),\r
@@ -819,8 +819,8 @@ public:
 \r
        typedef std::map<CStringA,char> TStrCharMap;\r
 \r
-       const char *    m_pszProjectPath;\r
-       const char *    m_pszSubPath;\r
+       const TCHAR *   m_pszProjectPath;\r
+       const TCHAR *   m_pszSubPath;\r
        unsigned int    m_nFlags;\r
        WGENUMFILECB *  m_pEnumCb;\r
        void *                  m_pUserData;\r
@@ -926,7 +926,7 @@ public:
        }\r
 };\r
 \r
-BOOL CGit::EnumFiles(const char *pszProjectPath, const char *pszSubPath, unsigned int nFlags, WGENUMFILECB *pEnumCb, void *pUserData)\r
+BOOL CGit::EnumFiles(const TCHAR *pszProjectPath, const TCHAR *pszSubPath, unsigned int nFlags, WGENUMFILECB *pEnumCb, void *pUserData)\r
 {\r
        if(!pszProjectPath || *pszProjectPath=='\0')\r
                return FALSE;\r
@@ -942,7 +942,7 @@ BOOL CGit::EnumFiles(const char *pszProjectPath, const char *pszSubPath, unsigne
        SetCurrentDirectoryA(W_szToDir);\r
        GetCurrentDirectoryA(sizeof(W_szToDir)-1,W_szToDir);\r
 */\r
-       SetCurrentDir(CUnicodeUtils::GetUnicode(pszProjectPath));\r
+       SetCurrentDir(pszProjectPath);\r
 \r
        CString sMode;\r
        if (nFlags)\r
@@ -960,9 +960,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\""), pszProjectPath, sMode, 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"), 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
index 487c854..232ac02 100644 (file)
@@ -94,7 +94,7 @@ public:
        int GetLog(BYTE_VECTOR& logOut,CString &hash, CTGitPath *path = NULL,int count=-1,int InfoMask=LOG_INFO_STAT|LOG_INFO_FILESTATE|LOG_INFO_BOUNDARY|LOG_INFO_DETECT_COPYRENAME,\r
                                                                CString *from=NULL,CString *to=NULL);\r
 \r
-       BOOL EnumFiles(const char *pszProjectPath, const char *pszSubPath, unsigned int nFlags, WGENUMFILECB *pEnumCb, void *pUserData);\r
+       BOOL EnumFiles(const TCHAR *pszProjectPath, const TCHAR *pszSubPath, unsigned int nFlags, WGENUMFILECB *pEnumCb, void *pUserData);\r
 \r
        git_revnum_t GetHash(CString &friendname);\r
 \r
@@ -112,4 +112,4 @@ extern CString GetTempFile();
 \r
 extern CGit g_Git;\r
 \r
-inline static BOOL wgEnumFiles(const char *pszProjectPath, const char *pszSubPath, unsigned int nFlags, WGENUMFILECB *pEnumCb, void *pUserData) { return g_Git.EnumFiles(pszProjectPath, pszSubPath, nFlags, pEnumCb, pUserData); }\r
+inline static BOOL wgEnumFiles(const TCHAR *pszProjectPath, const TCHAR *pszSubPath, unsigned int nFlags, WGENUMFILECB *pEnumCb, void *pUserData) { return g_Git.EnumFiles(pszProjectPath, pszSubPath, nFlags, pEnumCb, pUserData); }\r
index 16bde65..b9a4342 100644 (file)
@@ -251,18 +251,18 @@ const FileStatusCacheEntry * GitFolderStatus::BuildCache(const CTGitPath& filepa
                {\r
                        // extract the sub-path (relative to project root)\r
 //MessageBox(NULL, filepath.GetDirectory().GetWinPathString(), sProjectRoot, MB_OK);\r
-                       LPCSTR lpszSubPath = NULL;\r
-                       CStringA sSubPath;\r
+                       LPCTSTR lpszSubPath = NULL;\r
+                       CString sSubPath;\r
                        CString s = filepath.GetDirectory().GetWinPathString();\r
                        if (s.GetLength() > sProjectRoot.GetLength())\r
                        {\r
-                               sSubPath = CStringA(s.Right(s.GetLength() - sProjectRoot.GetLength() - 1/*otherwise it gets initial slash*/));\r
+                               sSubPath = s.Right(s.GetLength() - sProjectRoot.GetLength() - 1/*otherwise it gets initial slash*/);\r
                                lpszSubPath = sSubPath;\r
                        }\r
 \r
 //if (lpszSubPath) MessageBoxA(NULL, lpszSubPath, "BuildCache", MB_OK);\r
 //MessageBoxA(NULL, CStringA(sProjectRoot), sSubPath, MB_OK);\r
-                       err = !wgEnumFiles(CStringA(sProjectRoot), lpszSubPath, WGEFF_NoRecurse|WGEFF_FullPath|WGEFF_DirStatusAll, &fillstatusmap, this);\r
+                       err = !wgEnumFiles(sProjectRoot, lpszSubPath, WGEFF_NoRecurse|WGEFF_FullPath|WGEFF_DirStatusAll, &fillstatusmap, this);\r
 \r
                        /*err = svn_client_status4 (&youngest,\r
                                filepath.GetDirectory().GetSVNApiPath(pool),\r
index c2032a8..ff344e8 100644 (file)
@@ -241,12 +241,12 @@ git_wc_status_kind GitStatus::GetAllStatus(const CTGitPath& path, git_depth_t de
        }\r
        else\r
        {\r
-               LPCSTR lpszSubPath = NULL;\r
-               CStringA sSubPath;\r
+               LPCTSTR lpszSubPath = NULL;\r
+               CString sSubPath;\r
                CString s = path.GetWinPathString();\r
                if (s.GetLength() > sProjectRoot.GetLength())\r
                {\r
-                       sSubPath = CStringA(s.Right(s.GetLength() - sProjectRoot.GetLength() - 1/*otherwise it gets initial slash*/));\r
+                       sSubPath = s.Right(s.GetLength() - sProjectRoot.GetLength() - 1/*otherwise it gets initial slash*/);\r
                        lpszSubPath = sSubPath;\r
                }\r
 \r
@@ -265,7 +265,7 @@ git_wc_status_kind GitStatus::GetAllStatus(const CTGitPath& path, git_depth_t de
                        nFlags |= WGEFF_NoRecurse;\r
 #endif\r
 \r
-               err = !wgEnumFiles(CStringA(sProjectRoot), lpszSubPath, nFlags, &getallstatus, &statuskind);\r
+               err = !wgEnumFiles(sProjectRoot, lpszSubPath, nFlags, &getallstatus, &statuskind);\r
 \r
                /*err = git_client_status4 (&youngest,\r
                                                        path.GetSVNApiPath(pool),\r
@@ -392,12 +392,12 @@ git_revnum_t GitStatus::GetStatus(const CTGitPath& path, bool update /* = false
        }\r
        else\r
        {\r
-               LPCSTR lpszSubPath = NULL;\r
-               CStringA sSubPath;\r
+               LPCTSTR lpszSubPath = NULL;\r
+               CString sSubPath;\r
                CString s = path.GetWinPathString();\r
                if (s.GetLength() > sProjectRoot.GetLength())\r
                {\r
-                       sSubPath = CStringA(s.Right(s.GetLength() - sProjectRoot.GetLength() - 1/*otherwise it gets initial slash*/));\r
+                       sSubPath = s.Right(s.GetLength() - sProjectRoot.GetLength() - 1/*otherwise it gets initial slash*/);\r
                        lpszSubPath = sSubPath;\r
                }\r
 \r
@@ -410,7 +410,7 @@ git_revnum_t GitStatus::GetStatus(const CTGitPath& path, bool update /* = false
                m_status.prop_status = m_status.text_status = git_wc_status_none;\r
 \r
                // NOTE: currently wgEnumFiles will not enumerate file if it isn't versioned (so status will be git_wc_status_none)\r
-               m_err = !wgEnumFiles(CStringA(sProjectRoot), lpszSubPath, nFlags, &getstatus, &m_status);\r
+               m_err = !wgEnumFiles(sProjectRoot, lpszSubPath, nFlags, &getstatus, &m_status);\r
 \r
                /*m_err = git_client_status4 (&youngest,\r
                                                        path.GetGitApiPath(m_pool),\r
index 0884469..a8e4e56 100644 (file)
@@ -5409,14 +5409,14 @@ int CGitStatusListCtrl::UpdateFileList(git_revnum_t hash,CTGitPathList *list)
        this->m_bBusy=TRUE;\r
        m_CurrentVersion=hash;\r
 \r
+       int count = 0;\r
+       if(list == NULL)\r
+               count = 1;\r
+       else\r
+               count = list->GetCount();\r
+\r
        if(hash == GIT_REV_ZERO)\r
        {\r
-               int count = 0;\r
-               if(list == NULL)\r
-                       count = 1;\r
-               else\r
-                       count = list->GetCount();\r
-\r
                for(int i=0;i<count;i++)\r
                {       \r
                        BYTE_VECTOR cmdout;\r
@@ -5477,7 +5477,31 @@ int CGitStatusListCtrl::UpdateFileList(git_revnum_t hash,CTGitPathList *list)
                else\r
                        this->m_StatusFileList.ParserFromLog(out);\r
 \r
-               \r
+               //handle delete conflict case, when remote : modified, local : deleted. \r
+               for(int i=0;i<count;i++)\r
+               {       \r
+                       BYTE_VECTOR cmdout;\r
+                       CString cmd;\r
+\r
+                       if(list == NULL)\r
+                               cmd=_T("git.exe ls-files -u -t -z");\r
+                       else\r
+                               cmd.Format(_T("git.exe ls-files -u -t -z -- \"%s\""),(*list)[i].GetGitPathString());\r
+\r
+                       g_Git.Run(cmd,&cmdout);\r
+\r
+                       CTGitPathList conflictlist;\r
+                       conflictlist.ParserFromLog(cmdout);\r
+                       for(int i=0;i<conflictlist.GetCount();i++)\r
+                       {\r
+                               CTGitPath *p=m_StatusFileList.LookForGitPath(conflictlist[i].GetGitPathString());\r
+                               if(p)\r
+                                       p->m_Action|=CTGitPath::LOGACTIONS_UNMERGED;\r
+                               else\r
+                                       m_StatusFileList.AddPath(conflictlist[i]);\r
+                       }       \r
+               }\r
+\r
        }else\r
        {\r
                int count = 0;\r
@@ -5502,12 +5526,14 @@ int CGitStatusListCtrl::UpdateFileList(git_revnum_t hash,CTGitPathList *list)
                this->m_StatusFileList.ParserFromLog(out);\r
 \r
        }\r
+       \r
        for(int i=0;i<m_StatusFileList.GetCount();i++)\r
        {\r
                CTGitPath * gitpatch=(CTGitPath*)&m_StatusFileList[i];\r
                gitpatch->m_Checked = TRUE;\r
                m_arStatusArray.push_back((CTGitPath*)&m_StatusFileList[i]);\r
        }\r
+\r
        this->m_bBusy=FALSE;\r
        return 0;\r
 }\r
@@ -5715,4 +5741,4 @@ HRESULT STDMETHODCALLTYPE CSVNStatusListCtrlDropTarget::DragOver(DWORD grfKeySta
        return S_OK;\r
 }f\r
 \r
-#endif
\ No newline at end of file
+#endif\r
index 93787c0..7c7e43c 100644 (file)
@@ -1879,12 +1879,12 @@ CTGitPath * CTGitPathList::LookForGitPath(CString path)
 }\r
 CString CTGitPath::GetActionName(int action)\r
 {\r
+       if(action  & CTGitPath::LOGACTIONS_UNMERGED)\r
+               return _T("Conflict");\r
        if(action  & CTGitPath::LOGACTIONS_ADDED)\r
                return _T("Added");\r
        if(action  & CTGitPath::LOGACTIONS_DELETED)\r
                return _T("Deleted");\r
-       if(action  & CTGitPath::LOGACTIONS_UNMERGED)\r
-               return _T("Conflict");\r
        if(action  & CTGitPath::LOGACTIONS_MODIFIED)\r
                return _T("Modified");\r
        if(action  & CTGitPath::LOGACTIONS_REPLACED)\r
index 7088bc5..55422d7 100644 (file)
Binary files a/src/Resources/TortoiseProcENG.rc and b/src/Resources/TortoiseProcENG.rc differ
index ed81ef3..6460789 100644 (file)
@@ -404,17 +404,17 @@ CStatusCacheEntry CCachedDirectory::GetStatusForMember(const CTGitPath& path, bo
                        m_directoryPath.HasAdminDir(&sProjectRoot);\r
                        ATLASSERT( !m_directoryPath.IsEmpty() );\r
 \r
-                       LPCSTR lpszSubPath = NULL;\r
-                       CStringA sSubPath;\r
+                       LPCTSTR lpszSubPath = NULL;\r
+                       CString sSubPath;\r
                        CString s = m_directoryPath.GetDirectory().GetWinPathString();\r
                        if (s.GetLength() > sProjectRoot.GetLength())\r
                        {\r
-                               sSubPath = CStringA(s.Right(s.GetLength() - sProjectRoot.GetLength() - 1/*otherwise it gets initial slash*/));\r
+                               sSubPath = s.Right(s.GetLength() - sProjectRoot.GetLength() - 1/*otherwise it gets initial slash*/);\r
                                lpszSubPath = sSubPath;\r
                        }\r
 //MessageBoxA(NULL, CStringA(sProjectRoot), sSubPath, MB_OK);\r
 //OutputDebugStringA("###");OutputDebugStringW(sProjectRoot);OutputDebugStringA(" - ");OutputDebugStringA(sSubPath);OutputDebugStringA("\r\n");\r
-                       BOOL pErr = !wgEnumFiles(CStringA(sProjectRoot), lpszSubPath, WGEFF_NoRecurse|WGEFF_FullPath, &GetStatusCallback, this);\r
+                       BOOL pErr = !wgEnumFiles(sProjectRoot, lpszSubPath, WGEFF_NoRecurse|WGEFF_FullPath, &GetStatusCallback, this);\r
 \r
                        /*git_error_t* pErr = svn_client_status4 (\r
                                NULL,\r
@@ -853,11 +853,13 @@ git_wc_status_kind CCachedDirectory::CalculateRecursiveStatus()
        // Combine our OWN folder status with the most important of our *FILES'* status.\r
        git_wc_status_kind retVal = GitStatus::GetMoreImportant(m_mostImportantFileStatus, m_ownStatus.GetEffectiveStatus());\r
 \r
-       if ((retVal != git_wc_status_modified)&&(retVal != m_ownStatus.GetEffectiveStatus()))\r
+       // NOTE: TSVN marks dir as modified if it contains added/deleted/missing files, but we prefer the most important\r
+       //       status to propagate upward in its original state\r
+       /*if ((retVal != git_wc_status_modified)&&(retVal != m_ownStatus.GetEffectiveStatus()))\r
        {\r
                if ((retVal == git_wc_status_added)||(retVal == git_wc_status_deleted)||(retVal == git_wc_status_missing))\r
                        retVal = git_wc_status_modified;\r
-       }\r
+       }*/\r
 \r
        // Now combine all our child-directorie's status\r
        \r
@@ -866,11 +868,11 @@ git_wc_status_kind CCachedDirectory::CalculateRecursiveStatus()
        for(it = m_childDirectories.begin(); it != m_childDirectories.end(); ++it)\r
        {\r
                retVal = GitStatus::GetMoreImportant(retVal, it->second);\r
-               if ((retVal != git_wc_status_modified)&&(retVal != m_ownStatus.GetEffectiveStatus()))\r
+               /*if ((retVal != git_wc_status_modified)&&(retVal != m_ownStatus.GetEffectiveStatus()))\r
                {\r
                        if ((retVal == git_wc_status_added)||(retVal == git_wc_status_deleted)||(retVal == git_wc_status_missing))\r
                                retVal = git_wc_status_modified;\r
-               }\r
+               }*/\r
        }\r
        \r
        return retVal;\r
index 3a173e6..2b8e3d0 100644 (file)
@@ -231,7 +231,8 @@ out everything for now, leaving these enabled as they are would make the install
             </Component>\r
 \r
             <Component Id="C__wingit" Guid="$(var.GuidGitLib)" Win64="$(var.Win64YesNo)">\r
-              <File Id="F__wingit" ShortName="IGIT.EXE" Name="igit.exe" DiskId="1" Source="..\..\ext\igit.exe" KeyPath="yes" />\r
+              <File Id="F__wingit" ShortName="IGIT.EXE" Name="igit.exe" DiskId="1" Source="..\..\ext\gitexe\igit.exe" KeyPath="yes" />\r
+                         <File Id="F__libiconv2" ShortName="LIBICONV.DLL" Name="libiconv2.dll" DiskId="1" Source="..\..\ext\gitexe\libiconv2.dll" />\r
             </Component>\r
             \r
             <Component Id="C__TortoiseSVN" Guid="$(var.GuidTortoiseSVN)" Win64="$(var.Win64YesNo)">\r
index ff8e0b7..fac9f6e 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>\r
 <Include Id="VersionNumberInclude">\r
        <?define MajorVersion="0" ?>\r
-       <?define MinorVersion="3" ?>\r
-       <?define MicroVersion="3" ?>\r
+       <?define MinorVersion="4" ?>\r
+       <?define MicroVersion="0" ?>\r
        <?define BuildVersion="0" ?>\r
 </Include>\r
index 3c5c6e3..d1af68d 100644 (file)
@@ -41,6 +41,7 @@
 #include "CreateBranchTagDlg.h"\r
 #include "GitSwitchDlg.h"\r
 #include "ResetDlg.h"\r
+#include "DeleteConflictDlg.h"\r
 \r
 CAppUtils::CAppUtils(void)\r
 {\r
@@ -1244,6 +1245,22 @@ bool CAppUtils::GitReset(CString *CommitHash,int type)
        return FALSE;\r
 }\r
 \r
+void CAppUtils::DescribeFile(bool mode, bool base,CString &descript)\r
+{\r
+       if(mode == FALSE)\r
+       {\r
+               descript=_T("Deleted");\r
+               return;\r
+       }\r
+       if(base)\r
+       {\r
+               descript=_T("Modified");\r
+               return;\r
+       }\r
+       descript=_T("Created");\r
+       return;\r
+}\r
+\r
 bool CAppUtils::ConflictEdit(CTGitPath &path,bool bAlternativeTool)\r
 {\r
        bool bRet = false;\r
@@ -1307,6 +1324,7 @@ bool CAppUtils::ConflictEdit(CTGitPath &path,bool bAlternativeTool)
        tempfile.Open(base.GetWinPathString(),CFile::modeCreate|CFile::modeReadWrite);\r
        tempfile.Close();\r
 \r
+       bool b_base=false, b_local=false, b_remote=false;\r
 \r
        for(int i=0;i<list.GetCount();i++)\r
        {\r
@@ -1316,21 +1334,60 @@ bool CAppUtils::ConflictEdit(CTGitPath &path,bool bAlternativeTool)
                \r
                if( list[i].m_Stage == 1)\r
                {\r
+                       b_base = true;\r
                        outfile=base.GetWinPathString();\r
                }\r
                if( list[i].m_Stage == 2 )\r
                {\r
+                       b_local = true;\r
                        outfile=mine.GetWinPathString();\r
                }\r
                if( list[i].m_Stage == 3 )\r
                {\r
+                       b_remote = true;\r
                        outfile=theirs.GetWinPathString();\r
                }       \r
                g_Git.RunLogFile(cmd,outfile);\r
        }\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(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
+       \r
+       }else\r
+       {\r
+               CFile::Remove(mine.GetWinPathString());\r
+               CFile::Remove(theirs.GetWinPathString());\r
+               CFile::Remove(base.GetWinPathString());\r
+\r
+               CDeleteConflictDlg dlg;\r
+               DescribeFile(b_local, b_base,dlg.m_LocalStatus);\r
+               DescribeFile(b_remote,b_base,dlg.m_RemoteStatus);\r
+               dlg.m_bShowModifiedButton=b_base;\r
+               dlg.m_File=merge.GetGitPathString();\r
+               if(dlg.DoModal() == IDOK)\r
+               {\r
+                       CString cmd,out;\r
+                       if(dlg.m_bIsDelete)\r
+                       {\r
+                               cmd.Format(_T("git.exe rm \"%s\""),merge.GetGitPathString());\r
+                       }else\r
+                               cmd.Format(_T("git.exe add \"%s\""),merge.GetGitPathString());\r
+\r
+                       if(g_Git.Run(cmd,&out,CP_ACP))\r
+                       {\r
+                               CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK);\r
+                               return FALSE;\r
+                       }\r
+                       return TRUE;\r
+               }\r
+               else \r
+                       return FALSE;\r
+\r
+               \r
+\r
+       }\r
 \r
 #if 0\r
 \r
index 19e695d..5d31f72 100644 (file)
@@ -191,4 +191,6 @@ private:
         */\r
        static CString ToRelativeTimeString(COleDateTime time,COleDateTime RelativeTo);\r
        static CString ExpandRelativeTime( int count, UINT format_1, UINT format_n );\r
+\r
+       static void DescribeFile(bool mode, bool base,CString &descript);\r
 };\r
index 84220a7..ca21f27 100644 (file)
@@ -1235,9 +1235,9 @@ void CCommitDlg::InsertMenuItems(CMenu& mPopup, int& nCmd)
        mPopup.AppendMenu(MF_STRING | MF_ENABLED, m_nPopupPasteListCmd, sMenuItemText);\r
 }\r
 \r
-bool CCommitDlg::HandleMenuItemClick(int /*cmd*/, CSciEdit * /*pSciEdit*/)\r
+bool CCommitDlg::HandleMenuItemClick(int cmd, CSciEdit * pSciEdit)\r
 {\r
-#if 0\r
+\r
        if (m_bBlock)\r
                return false;\r
        if (cmd == m_nPopupPasteListCmd)\r
@@ -1247,27 +1247,27 @@ bool CCommitDlg::HandleMenuItemClick(int /*cmd*/, CSciEdit * /*pSciEdit*/)
                int nListItems = m_ListCtrl.GetItemCount();\r
                for (int i=0; i<nListItems; ++i)\r
                {\r
-                       CGitStatusListCtrl::FileEntry * entry = m_ListCtrl.GetListEntry(i);\r
-                       if (entry->IsChecked())\r
+                       CTGitPath * entry = (CTGitPath*)m_ListCtrl.GetItemData(i);\r
+                       if (entry&&entry->m_Checked)\r
                        {\r
                                CString line;\r
-                               Git_wc_status_kind status = entry->status;\r
-                               if (status == Git_wc_status_unversioned)\r
-                                       status = Git_wc_status_added;\r
-                               if (status == Git_wc_status_missing)\r
-                                       status = Git_wc_status_deleted;\r
+                               CString status = entry->GetActionName();\r
+                               if(entry->m_Action & CTGitPath::LOGACTIONS_UNVER)\r
+                                       status = _T("Add");\r
+\r
+                               //git_wc_status_kind status = entry->status;\r
                                WORD langID = (WORD)CRegStdWORD(_T("Software\\TortoiseGit\\LanguageID"), GetUserDefaultLangID());\r
                                if (m_ProjectProperties.bFileListInEnglish)\r
                                        langID = 1033;\r
-                               GitStatus::GetStatusString(AfxGetResourceHandle(), status, buf, sizeof(buf)/sizeof(TCHAR), langID);\r
-                               line.Format(_T("%-10s %s\r\n"), buf, (LPCTSTR)m_ListCtrl.GetItemText(i,0));\r
+                               \r
+                               line.Format(_T("%-10s %s\r\n"),status , (LPCTSTR)m_ListCtrl.GetItemText(i,0));\r
                                logmsg += line;\r
                        }\r
                }\r
                pSciEdit->InsertText(logmsg);\r
                return true;\r
        }\r
-#endif\r
+\r
        return false;\r
 }\r
 \r
diff --git a/src/TortoiseProc/DeleteConflictDlg.cpp b/src/TortoiseProc/DeleteConflictDlg.cpp
new file mode 100644 (file)
index 0000000..29a7d24
--- /dev/null
@@ -0,0 +1,74 @@
+// DeleteConflictDlg.cpp : implementation file\r
+//\r
+\r
+#include "stdafx.h"\r
+#include "resource.h"\r
+#include "DeleteConflictDlg.h"\r
+\r
+\r
+// CDeleteConflictDlg dialog\r
+\r
+IMPLEMENT_DYNAMIC(CDeleteConflictDlg, CResizableStandAloneDialog)\r
+\r
+CDeleteConflictDlg::CDeleteConflictDlg(CWnd* pParent /*=NULL*/)\r
+       : CResizableStandAloneDialog(CDeleteConflictDlg::IDD, pParent)\r
+\r
+       , m_LocalStatus(_T(""))\r
+       , m_RemoteStatus(_T(""))\r
+{\r
+       m_bIsDelete =FALSE;\r
+}\r
+\r
+CDeleteConflictDlg::~CDeleteConflictDlg()\r
+{\r
+}\r
+\r
+void CDeleteConflictDlg::DoDataExchange(CDataExchange* pDX)\r
+{\r
+       CDialog::DoDataExchange(pDX);\r
+\r
+       DDX_Text(pDX, IDC_LOCAL_STATUS, m_LocalStatus);\r
+       DDX_Text(pDX, IDC_REMOTE_STATUS, m_RemoteStatus);\r
+}\r
+\r
+\r
+BEGIN_MESSAGE_MAP(CDeleteConflictDlg, CResizableStandAloneDialog)\r
+       ON_BN_CLICKED(IDC_DELETE, &CDeleteConflictDlg::OnBnClickedDelete)\r
+       ON_BN_CLICKED(IDC_MODIFY, &CDeleteConflictDlg::OnBnClickedModify)\r
+END_MESSAGE_MAP()\r
+\r
+\r
+BOOL CDeleteConflictDlg::OnInitDialog()\r
+{\r
+       CResizableStandAloneDialog::OnInitDialog();\r
+       AddAnchor(IDC_DEL_GROUP, TOP_LEFT, BOTTOM_RIGHT);\r
+       AddAnchor(IDC_DELETE, BOTTOM_RIGHT);\r
+       AddAnchor(IDC_MODIFY, BOTTOM_RIGHT);\r
+       AddAnchor(IDCANCEL, BOTTOM_RIGHT);\r
+\r
+       if(this->m_bShowModifiedButton )\r
+               this->GetDlgItem(IDC_MODIFY)->SetWindowText(_T("Modified"));\r
+       else\r
+               this->GetDlgItem(IDC_MODIFY)->SetWindowText(_T("Created"));\r
+\r
+       CString title;\r
+       this->GetWindowText(title);\r
+       title +=_T(" - ") +this->m_File;\r
+       this->SetWindowText(title);\r
+       return TRUE;\r
+}\r
+// CDeleteConflictDlg message handlers\r
+\r
+void CDeleteConflictDlg::OnBnClickedDelete()\r
+{\r
+       // TODO: Add your control notification handler code here\r
+       m_bIsDelete = TRUE;\r
+       OnOK();\r
+}\r
+\r
+void CDeleteConflictDlg::OnBnClickedModify()\r
+{\r
+       // TODO: Add your control notification handler code here\r
+       m_bIsDelete = FALSE;\r
+       OnOK();\r
+}\r
diff --git a/src/TortoiseProc/DeleteConflictDlg.h b/src/TortoiseProc/DeleteConflictDlg.h
new file mode 100644 (file)
index 0000000..44b8b4d
--- /dev/null
@@ -0,0 +1,33 @@
+#pragma once\r
+\r
+#include "StandAloneDlg.h"\r
+// CDeleteConflictDlg dialog\r
+\r
+class CDeleteConflictDlg : public CResizableStandAloneDialog\r
+{\r
+       DECLARE_DYNAMIC(CDeleteConflictDlg)\r
+\r
+public:\r
+       CDeleteConflictDlg(CWnd* pParent = NULL);   // standard constructor\r
+       virtual ~CDeleteConflictDlg();\r
+\r
+// Dialog Data\r
+       enum { IDD = IDD_RESOLVE_CONFLICT };\r
+\r
+protected:\r
+       virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\r
+       BOOL OnInitDialog();\r
+       DECLARE_MESSAGE_MAP()\r
+\r
+public:\r
+       CString m_LocalStatus;\r
+public:\r
+       CString m_RemoteStatus;\r
+       BOOL    m_bShowModifiedButton;\r
+       CString m_File;\r
+       BOOL    m_bIsDelete;\r
+public:\r
+       afx_msg void OnBnClickedDelete();\r
+public:\r
+       afx_msg void OnBnClickedModify();\r
+};\r
index 06cadb3..e73a913 100644 (file)
@@ -392,7 +392,7 @@ void CGitLogList::ContextMenuAction(int cmd,int FirstSelect, int LastSelect)
                                        dlg.m_CommitList.m_logEntries.push_back(*(GitRev*)m_arShownList[indexNext]);\r
                                        dlg.m_CommitList.m_logEntries.at(dlg.m_CommitList.m_logEntries.size()-1).m_Action |= CTGitPath::LOGACTIONS_REBASE_PICK;\r
                                }\r
-\r
+       \r
                                if(dlg.DoModal() == IDOK)\r
                                {\r
                                        Refresh();\r
index c4425a8..58a3692 100644 (file)
@@ -1103,18 +1103,7 @@ void CGitLogListBase::OnContextMenu(CWnd* pWnd, CPoint point)
 \r
                        if(m_ContextMenuMask&GetContextMenuBit(ID_CREATE_TAG))\r
                                popup.AppendMenuIcon(ID_CREATE_TAG, _T("Create Tag at this version"), IDI_COPY);\r
-               }\r
-       \r
-               if ( GetSelectedCount() >0 )\r
-               {\r
-                       if(m_ContextMenuMask&GetContextMenuBit(ID_CHERRY_PICK))\r
-                               popup.AppendMenuIcon(ID_CHERRY_PICK, _T("Cherry Pick this version"), IDI_EXPORT);\r
-       \r
-               }\r
-\r
-               if (GetSelectedCount() == 1)\r
-               {\r
-                       CString str;\r
+                       \r
                        str.Format(_T("*Rebase %s to this"),g_Git.GetCurrentBranch());\r
 \r
                        if(pSelLogEntry->m_CommitHash != m_HeadHash)\r
@@ -1126,8 +1115,10 @@ void CGitLogListBase::OnContextMenu(CWnd* pWnd, CPoint point)
                        \r
 \r
                        popup.AppendMenu(MF_SEPARATOR, NULL);\r
+\r
                }\r
-               else if (GetSelectedCount() >= 2)\r
+       \r
+               if (GetSelectedCount() >= 2)\r
                {\r
                        bool bAddSeparator = false;\r
                        if (IsSelectionContinuous() || (GetSelectedCount() == 2))\r
@@ -1144,7 +1135,20 @@ void CGitLogListBase::OnContextMenu(CWnd* pWnd, CPoint point)
                                bAddSeparator = true;\r
                        }\r
 \r
-                       if ( IsSelectionContinuous() )\r
+                       if (m_hasWC)\r
+                       {\r
+                               //popup.AppendMenuIcon(ID_REVERTREV, IDS_LOG_POPUP_REVERTREVS, IDI_REVERT);\r
+//                             if (m_hasWC)\r
+//                                     popup.AppendMenuIcon(ID_MERGEREV, IDS_LOG_POPUP_MERGEREVS, IDI_MERGE);\r
+                               bAddSeparator = true;\r
+                       }\r
+                       if (bAddSeparator)\r
+                               popup.AppendMenu(MF_SEPARATOR, NULL);\r
+               }\r
+\r
+               if ( GetSelectedCount() >0 )\r
+               {\r
+                       if ( IsSelectionContinuous() && GetSelectedCount() >= 2 )\r
                        {\r
                                if(m_ContextMenuMask&GetContextMenuBit(ID_COMBINE_COMMIT))\r
                                {\r
@@ -1158,20 +1162,17 @@ void CGitLogListBase::OnContextMenu(CWnd* pWnd, CPoint point)
                                                hash=hash.Left(40);\r
                                                GitRev* pLastEntry = reinterpret_cast<GitRev*>(m_arShownList.GetAt(LastSelect));\r
                                                if(pLastEntry->m_CommitHash == hash)\r
-                                                       popup.AppendMenuIcon(ID_COMBINE_COMMIT,_T("*Combine to one commit"),IDI_MERGE);\r
+                                                       popup.AppendMenuIcon(ID_COMBINE_COMMIT,_T("*Combine to one commit"),IDI_COMBINE);\r
                                        }\r
                                }\r
                        }\r
-                       if (m_hasWC)\r
-                       {\r
-                               //popup.AppendMenuIcon(ID_REVERTREV, IDS_LOG_POPUP_REVERTREVS, IDI_REVERT);\r
-//                             if (m_hasWC)\r
-//                                     popup.AppendMenuIcon(ID_MERGEREV, IDS_LOG_POPUP_MERGEREVS, IDI_MERGE);\r
-                               bAddSeparator = true;\r
-                       }\r
-                       if (bAddSeparator)\r
-                               popup.AppendMenu(MF_SEPARATOR, NULL);\r
+                       if(m_ContextMenuMask&GetContextMenuBit(ID_CHERRY_PICK))\r
+                               popup.AppendMenuIcon(ID_CHERRY_PICK, _T("Cherry Pick this version"), IDI_EXPORT);\r
+                       popup.AppendMenu(MF_SEPARATOR, NULL);\r
+       \r
                }\r
+\r
+               \r
 #if 0\r
 //             if ((selEntries.size() > 0)&&(bAllFromTheSameAuthor))\r
 //             {\r
index aaf008a..b833dd0 100644 (file)
@@ -195,6 +195,12 @@ BOOL CRebaseDlg::OnInitDialog()
                                                                                m_CommitList.GetContextMenuBit(CGitLogListBase::ID_REVERTTOREV)|\r
                                                                                m_CommitList.GetContextMenuBit(CGitLogListBase::ID_COMBINE_COMMIT));\r
 \r
+       if(m_CommitList.m_IsOldFirst)\r
+               this->m_CurrentRebaseIndex = -1;\r
+       else\r
+               this->m_CurrentRebaseIndex = m_CommitList.m_logEntries.size();\r
+\r
+\r
        return TRUE;\r
 }\r
 // CRebaseDlg message handlers\r
@@ -453,18 +459,23 @@ int CRebaseDlg::CheckRebaseCondition()
                return -1;\r
 \r
        //Todo call pre_rebase_hook\r
+       return 0;\r
 }\r
 int CRebaseDlg::StartRebase()\r
 {\r
        CString cmd,out;\r
-       //Todo call comment_for_reflog\r
-       cmd.Format(_T("git.exe checkout %s"),this->m_BranchCtrl.GetString());\r
-       this->AddLogString(cmd);\r
 \r
-       if(g_Git.Run(cmd,&out,CP_UTF8))\r
-               return -1;\r
+       if(!this->m_IsCherryPick)\r
+       {\r
+               //Todo call comment_for_reflog\r
+               cmd.Format(_T("git.exe checkout %s"),this->m_BranchCtrl.GetString());\r
+               this->AddLogString(cmd);\r
 \r
-       this->AddLogString(out);\r
+               if(g_Git.Run(cmd,&out,CP_UTF8))\r
+                       return -1;\r
+\r
+               this->AddLogString(out);\r
+       }\r
 \r
        cmd=_T("git.exe rev-parse --verify HEAD");\r
        if(g_Git.Run(cmd,&out,CP_UTF8))\r
@@ -483,32 +494,39 @@ int CRebaseDlg::StartRebase()
                return -1;\r
        }\r
        \r
-       cmd.Format(_T("git.exe update-ref ORIG_HEAD HEAD"));\r
-\r
-       cmd.Format(_T("git.exe checkout %s"),this->m_UpstreamCtrl.GetString());\r
-       this->AddLogString(cmd);\r
-\r
-       out.Empty();\r
-       if(g_Git.Run(cmd,&out,CP_UTF8))\r
+       if( !this->m_IsCherryPick )\r
        {\r
-               return -1;\r
+               cmd.Format(_T("git.exe checkout %s"),this->m_UpstreamCtrl.GetString());\r
+               this->AddLogString(cmd);\r
+\r
+               out.Empty();\r
+               if(g_Git.Run(cmd,&out,CP_UTF8))\r
+               {\r
+                       return -1;\r
+               }\r
        }\r
        \r
-       cmd.Format(_T("git.exe rev-parse %s"),this->m_UpstreamCtrl.GetString());\r
-       if(g_Git.Run(cmd,&this->m_OrigUpstreamHash,CP_UTF8))\r
+       m_OrigUpstreamHash.Empty();\r
+       m_OrigUpstreamHash= g_Git.GetHash(this->m_UpstreamCtrl.GetString());\r
+       if(m_OrigUpstreamHash.IsEmpty())\r
        {\r
                this->AddLogString(m_OrigUpstreamHash);\r
                return -1;\r
        }\r
 \r
-       cmd.Format(_T("git.exe rev-parse %s"),this->m_BranchCtrl.GetString());\r
-       if(g_Git.Run(cmd,&this->m_OrigBranchHash,CP_UTF8))\r
+       if( !this->m_IsCherryPick )\r
        {\r
-               this->AddLogString(m_OrigBranchHash);\r
-               return -1;\r
-       }\r
+               cmd.Format(_T("git.exe rev-parse %s"),this->m_BranchCtrl.GetString());\r
+               if(g_Git.Run(cmd,&this->m_OrigBranchHash,CP_UTF8))\r
+               {\r
+                       this->AddLogString(m_OrigBranchHash);\r
+                       return -1;\r
+               }\r
+               this->AddLogString(_T("Start Rebase\r\n"));\r
 \r
-       this->AddLogString(_T("Start Rebase\r\n"));\r
+       }else\r
+               this->AddLogString(_T("Start Cherry-pick\r\n"));\r
+       \r
        return 0;\r
 }\r
 int  CRebaseDlg::VerifyNoConflict()\r
@@ -527,6 +545,34 @@ int  CRebaseDlg::VerifyNoConflict()
        return 0;\r
 \r
 }\r
+int CRebaseDlg::FinishRebase()\r
+{\r
+       if(this->m_IsCherryPick) //cherry pick mode no "branch", working at upstream branch\r
+               return 0;\r
+\r
+       CString cmd,out;\r
+       cmd.Format(_T("git.exe branch -f %s"),this->m_BranchCtrl.GetString());\r
+       if(g_Git.Run(cmd,&out,CP_UTF8))\r
+       {\r
+               AddLogString(out);\r
+               return -1;\r
+       }\r
+       out.Empty();\r
+       cmd.Format(_T("git.exe reset --hard %s"),this->m_OrigUpstreamHash);\r
+       if(g_Git.Run(cmd,&out,CP_UTF8))\r
+       {\r
+               AddLogString(out);\r
+               return -1;\r
+       }\r
+       out.Empty();\r
+       cmd.Format(_T("git.exe checkout -f %s"),this->m_BranchCtrl.GetString());\r
+       if(g_Git.Run(cmd,&out,CP_UTF8))\r
+       {\r
+               AddLogString(out);\r
+               return -1;\r
+       }\r
+       return 0;\r
+}\r
 void CRebaseDlg::OnBnClickedContinue()\r
 {\r
        if( m_RebaseStage == CHOOSE_BRANCH|| m_RebaseStage == CHOOSE_COMMIT_PICK_MODE )\r
@@ -536,21 +582,16 @@ void CRebaseDlg::OnBnClickedContinue()
                m_RebaseStage = REBASE_START;\r
        }\r
 \r
+       if( m_RebaseStage == REBASE_DONE)\r
+       {\r
+               OnOK();\r
+       }\r
+\r
        if( m_RebaseStage == REBASE_FINISH )\r
        {\r
-               CString cmd,out;\r
-               cmd.Format(_T("git branch -f %s"),this->m_BranchCtrl.GetString());\r
-               if(g_Git.Run(cmd,&out,CP_UTF8))\r
-               {\r
-                       AddLogString(out);\r
-                       return ;\r
-               }\r
-               cmd.Format(_T("git reset --hard %s"),this->m_OrigUpstreamHash);\r
-               if(g_Git.Run(cmd,&out,CP_UTF8))\r
-               {\r
-                       AddLogString(out);\r
+               if(FinishRebase())\r
                        return ;\r
-               }\r
+\r
                OnOK();\r
        }\r
 \r
@@ -676,6 +717,11 @@ int CRebaseDlg::CheckNextCommitIsSquash()
        GitRev *curRev;\r
        do\r
        {\r
+               if(index<0)\r
+                       return -1;\r
+               if(index>= m_CommitList.GetItemCount())\r
+                       return -1;\r
+\r
                curRev=(GitRev*)m_CommitList.m_arShownList[index];\r
                \r
                if( curRev->m_Action&CTGitPath::LOGACTIONS_REBASE_SQUASH )\r
@@ -687,12 +733,7 @@ int CRebaseDlg::CheckNextCommitIsSquash()
                        else\r
                                index--;\r
                }else\r
-                       return -1;\r
-\r
-               if(index<0)\r
-                       return -1;\r
-               if(index>= m_CommitList.GetItemCount())\r
-                       return -1;\r
+                       return -1;              \r
 \r
        }while(curRev->m_Action&CTGitPath::LOGACTIONS_REBASE_SKIP);\r
        \r
@@ -754,6 +795,10 @@ void CRebaseDlg::SetContinueButtonText()
        case REBASE_FINISH:\r
                Text = _T("Finish");\r
                break;\r
+\r
+       case REBASE_DONE:\r
+               Text = _T("Done");\r
+               break;\r
        }\r
        this->GetDlgItem(IDC_REBASE_CONTINUE)->SetWindowText(Text);\r
 }\r
@@ -787,6 +832,7 @@ void CRebaseDlg::SetControlEnable()
        case REBASE_CONFLICT:\r
        case REBASE_EDIT:\r
        case REBASE_SQUASH_CONFLICT:\r
+       case REBASE_DONE:\r
                this->GetDlgItem(IDC_PICK_ALL)->EnableWindow(FALSE);\r
                this->GetDlgItem(IDC_EDIT_ALL)->EnableWindow(FALSE);\r
                this->GetDlgItem(IDC_SQUASH_ALL)->EnableWindow(FALSE);\r
@@ -825,7 +871,7 @@ void CRebaseDlg::UpdateProgress()
        m_ProgressBar.SetRange(1,m_CommitList.GetItemCount());\r
        m_ProgressBar.SetPos(index);\r
 \r
-       if(m_CurrentRebaseIndex>0 && m_CurrentRebaseIndex< m_CommitList.GetItemCount())\r
+       if(m_CurrentRebaseIndex>=0 && m_CurrentRebaseIndex< m_CommitList.GetItemCount())\r
        {\r
                CString text;\r
                text.Format(_T("Rebasing...(%d/%d)"),index,m_CommitList.GetItemCount());\r
@@ -863,7 +909,7 @@ void CRebaseDlg::UpdateProgress()
 \r
 void CRebaseDlg::UpdateCurrentStatus()\r
 {\r
-       if( m_CurrentRebaseIndex < 0)\r
+       if( m_CurrentRebaseIndex < 0 && m_RebaseStage!= REBASE_DONE)\r
        {\r
                if(m_CommitList.m_IsOldFirst)\r
                        m_RebaseStage = CRebaseDlg::REBASE_START;\r
@@ -871,12 +917,12 @@ void CRebaseDlg::UpdateCurrentStatus()
                        m_RebaseStage = CRebaseDlg::REBASE_FINISH;\r
        }\r
 \r
-       if( m_CurrentRebaseIndex == m_CommitList.m_arShownList.GetSize())\r
+       if( m_CurrentRebaseIndex == m_CommitList.m_arShownList.GetSize() && m_RebaseStage!= REBASE_DONE)\r
        {\r
                if(m_CommitList.m_IsOldFirst)\r
-                       m_RebaseStage = CRebaseDlg::REBASE_FINISH;\r
+                       m_RebaseStage = CRebaseDlg::REBASE_DONE;\r
                else\r
-                       m_RebaseStage = CRebaseDlg::REBASE_START;\r
+                       m_RebaseStage = CRebaseDlg::REBASE_FINISH;\r
        }\r
 \r
        SetContinueButtonText();\r
@@ -958,8 +1004,10 @@ int CRebaseDlg::DoRebase()
                                return 0;\r
                        }\r
                        if(mode == CTGitPath::LOGACTIONS_REBASE_EDIT)\r
+                       {\r
+                               this->m_RebaseStage = REBASE_EDIT ;\r
                                return -1; // Edit return -1 to stop rebase. \r
-                       \r
+                       }\r
                        // Squash Case\r
                        if(CheckNextCommitIsSquash())\r
                        {   // no squash\r
@@ -983,7 +1031,10 @@ int CRebaseDlg::DoRebase()
                        return 0;\r
                }\r
                if(mode == CTGitPath::LOGACTIONS_REBASE_EDIT)\r
+               {\r
+                       this->m_RebaseStage = REBASE_EDIT ;\r
                        return -1; // Edit return -1 to stop rebase. \r
+               }\r
 \r
                // Squash Case\r
                if(CheckNextCommitIsSquash())\r
@@ -1027,18 +1078,27 @@ int CRebaseDlg::RebaseThread()
                        {\r
                                ret = 0;\r
                                m_RebaseStage = REBASE_FINISH;\r
-                               break;\r
-                       }\r
-\r
-                       ret = DoRebase();\r
+                               \r
+                       }else\r
+                       {\r
+                               ret = DoRebase();\r
 \r
-                       if( ret )\r
-                       {       \r
-                               break;\r
+                               if( ret )\r
+                               {       \r
+                                       break;\r
+                               }\r
                        }\r
 \r
+               }else if( m_RebaseStage == REBASE_FINISH )\r
+               {                       \r
+                       FinishRebase();\r
+                       m_RebaseStage = REBASE_DONE;\r
+                       break;\r
+                       \r
                }else\r
+               {\r
                        break;\r
+               }\r
                this->PostMessage(MSG_REBASE_UPDATE_UI);\r
                //this->UpdateCurrentStatus();\r
        }\r
@@ -1056,7 +1116,8 @@ void CRebaseDlg::ListConflictFile()
        list.AddPath(path);\r
 \r
        this->m_FileListCtrl.GetStatus(&list,true);\r
-       this->m_FileListCtrl.Show(CTGitPath::LOGACTIONS_UNMERGED|CTGitPath::LOGACTIONS_MODIFIED,CTGitPath::LOGACTIONS_UNMERGED);\r
+       this->m_FileListCtrl.Show(CTGitPath::LOGACTIONS_UNMERGED|CTGitPath::LOGACTIONS_MODIFIED|CTGitPath::LOGACTIONS_ADDED|CTGitPath::LOGACTIONS_DELETED,\r
+                                                          CTGitPath::LOGACTIONS_UNMERGED);\r
        if( this->m_FileListCtrl.GetItemCount() == 0 )\r
        {\r
                \r
@@ -1113,6 +1174,13 @@ void CRebaseDlg::OnBnClickedAbort()
        if(CMessageBox::Show(NULL,_T("Are you sure abort rebase"),_T("TortoiseGit"),MB_YESNO) != IDYES)\r
                return;\r
 \r
+       cmd.Format(_T("git.exe checkout -f %s"),this->m_UpstreamCtrl.GetString());\r
+       if(g_Git.Run(cmd,&out,CP_UTF8))\r
+       {\r
+               AddLogString(out);\r
+               return ;\r
+       }\r
+\r
        cmd.Format(_T("git.exe reset --hard  %s"),this->m_OrigUpstreamHash.Left(40));\r
        if(g_Git.Run(cmd,&out,CP_UTF8))\r
        {\r
@@ -1120,6 +1188,9 @@ void CRebaseDlg::OnBnClickedAbort()
                return ;\r
        }\r
        \r
+       if(this->m_IsCherryPick) //there are not "branch" at cherry pick mode\r
+               return;\r
+\r
        cmd.Format(_T("git checkout -f %s"),this->m_BranchCtrl.GetString());\r
        if(g_Git.Run(cmd,&out,CP_UTF8))\r
        {\r
@@ -1127,5 +1198,11 @@ void CRebaseDlg::OnBnClickedAbort()
                return ;\r
        }\r
        \r
+       cmd.Format(_T("git.exe reset --hard  %s"),this->m_OrigBranchHash.Left(40));\r
+       if(g_Git.Run(cmd,&out,CP_UTF8))\r
+       {\r
+               AddLogString(out);\r
+               return ;\r
+       }\r
        __super::OnCancel();\r
 }\r
index 05523c8..581d3ef 100644 (file)
@@ -40,6 +40,7 @@ public:
                REBASE_EDIT,\r
                REBASE_SQUASH_EDIT,\r
                REBASE_SQUASH_CONFLICT,\r
+               REBASE_DONE,\r
        };\r
 \r
 protected:\r
@@ -86,6 +87,7 @@ protected:
 \r
        int CheckNextCommitIsSquash();\r
        int GetCurrentCommitID();\r
+       int FinishRebase();\r
 \r
 public:\r
    \r
index 8d83425..f5e2282 100644 (file)
                                        RelativePath=".\AppUtils.cpp"\r
                                        >\r
                                </File>\r
+                               <File\r
+                                       RelativePath=".\DeleteConflictDlg.cpp"\r
+                                       >\r
+                               </File>\r
+                               <File\r
+                                       RelativePath=".\DeleteConflictDlg.h"\r
+                                       >\r
+                               </File>\r
                        </Filter>\r
                        <Filter\r
                                Name="UI"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\explorer.ico"\r
+                               RelativePath=".\explorer.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\explorer.ico"\r
+                               RelativePath="..\Resources\explorer.ico"\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\newfolder.ico"\r
+                               RelativePath=".\newfolder.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\newfolder.ico"\r
+                               RelativePath="..\Resources\newfolder.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\open.ico"\r
+                               RelativePath=".\open.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\open.ico"\r
+                               RelativePath="..\Resources\open.ico"\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\save.ico"\r
+                               RelativePath=".\save.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\save.ico"\r
+                               RelativePath="..\Resources\save.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\saveas.ico"\r
+                               RelativePath=".\saveas.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\saveas.ico"\r
+                               RelativePath="..\Resources\saveas.ico"\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\up.ico"\r
+                               RelativePath=".\up.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\up.ico"\r
+                               RelativePath="..\Resources\up.ico"\r
                                >\r
                        </File>\r
                        <File\r
index 82c5b0b..fc7d736 100644 (file)
Binary files a/src/TortoiseProc/resource.h and b/src/TortoiseProc/resource.h differ