OSDN Git Service

Share resource file between TortoiseGitBlame and TortoiseProc
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / FileDiffDlg.cpp
index dd328af..d987e40 100644 (file)
@@ -30,6 +30,8 @@
 #include "BrowseFolder.h"\r
 #include "RevisionDlg.h"\r
 #include ".\filediffdlg.h"\r
+#include "gitdiff.h"\r
+#include "CommonResource.h"\r
 \r
 #define ID_COMPARE 1\r
 #define ID_BLAME 2\r
@@ -95,19 +97,31 @@ void CFileDiffDlg::SetDiff(CTGitPath * path, GitRev rev1, GitRev rev2)
        m_rev2 = rev2;\r
        \r
 }\r
-\r
-#if 0\r
-void CFileDiffDlg::SetDiff(const CTGitPath& path1, GitRev rev1, const CTGitPath& path2, GitRev rev2, svn_depth_t depth, bool ignoreancestry)\r
+void CFileDiffDlg::SetDiff(CTGitPath * path, CString &hash1, CString &hash2)\r
+{\r
+       if(path!=NULL)\r
+       {\r
+               m_path1 = *path;\r
+               m_path2 = *path;\r
+       }\r
+       m_rev1.m_CommitHash = hash1;\r
+       m_rev2.m_CommitHash = hash2;\r
+}\r
+void CFileDiffDlg::SetDiff(CTGitPath * path, GitRev rev1)\r
 {\r
-       m_bDoPegDiff = false;\r
-       m_path1 = path1;\r
-       m_path2 = path2;\r
+       if(path!=NULL)\r
+       {\r
+               m_path1 = *path;\r
+               m_path2 = *path;\r
+       }\r
        m_rev1 = rev1;\r
-       m_rev2 = rev2;\r
-       m_depth = depth;\r
-       m_bIgnoreancestry = ignoreancestry;\r
+       m_rev2.m_CommitHash = _T("");\r
+       m_rev2.m_Subject = _T("Previou Version");\r
+\r
+       //this->GetDlgItem()->EnableWindow(FALSE);\r
+       \r
+       \r
 }\r
-#endif\r
 \r
 BOOL CFileDiffDlg::OnInitDialog()\r
 {\r
@@ -182,6 +196,9 @@ BOOL CFileDiffDlg::OnInitDialog()
 \r
        // Start with focus on file list\r
        GetDlgItem(IDC_FILELIST)->SetFocus();\r
+\r
+       if(m_rev2.m_CommitHash.IsEmpty())\r
+               m_SwitchButton.EnableWindow(FALSE);\r
        return FALSE;\r
 }\r
 \r
@@ -229,11 +246,18 @@ UINT CFileDiffDlg::DiffThread()
 #endif\r
        CString cmd;\r
        CString rev1=m_rev1.m_CommitHash;\r
-       if(this->m_rev1.m_CommitHash == GIT_REV_ZERO )\r
+       if(this->m_rev1.m_CommitHash == GIT_REV_ZERO || this->m_rev2.m_CommitHash == GIT_REV_ZERO)\r
        {\r
                rev1=+_T("");\r
+               if(this->m_rev1.m_CommitHash == GIT_REV_ZERO)\r
+                       cmd.Format(_T("git.exe diff -r --raw -C -M --numstat  %s"),m_rev2.m_CommitHash);\r
+               else\r
+                       cmd.Format(_T("git.exe diff -r -R --raw -C -M --numstat  %s"),m_rev1.m_CommitHash);\r
+       }else\r
+       {\r
+               cmd.Format(_T("git.exe diff-tree -r --raw -C -M --numstat %s %s"),rev1,m_rev2.m_CommitHash);\r
        }\r
-       cmd.Format(_T("git.cmd diff-tree -r --raw -C -M --numstat %s %s"),rev1,m_rev2.m_CommitHash);\r
+\r
        CString out;\r
        g_Git.Run(cmd,&out);\r
        this->m_arFileList.ParserFromLog(out);\r
@@ -291,6 +315,11 @@ int CFileDiffDlg::AddEntry(const CTGitPath * fd)
 \r
 void CFileDiffDlg::DoDiff(int selIndex, bool blame)\r
 {\r
+\r
+       CGitDiff diff;\r
+       CTGitPath* fd = m_arFilteredList[selIndex];\r
+       diff.Diff(fd, this->m_rev1.m_CommitHash, this->m_rev2.m_CommitHash, blame, FALSE);\r
+\r
 #if 0\r
        CFileDiffDlg::CTGitPath* fd = m_arFilteredList[selIndex];\r
 \r
@@ -514,15 +543,15 @@ void CFileDiffDlg::OnNMDblclkFilelist(NMHDR *pNMHDR, LRESULT *pResult)
 \r
 void CFileDiffDlg::OnLvnGetInfoTipFilelist(NMHDR *pNMHDR, LRESULT *pResult)\r
 {\r
-#if 0\r
+\r
        LPNMLVGETINFOTIP pGetInfoTip = reinterpret_cast<LPNMLVGETINFOTIP>(pNMHDR);\r
        if (pGetInfoTip->iItem >= (int)m_arFilteredList.size())\r
                return;\r
 \r
-       CString path = m_path1.GetGitPathString() + _T("/") + m_arFilteredList[pGetInfoTip->iItem].path.GetGitPathString();\r
+       CString path = m_path1.GetGitPathString() + _T("/") + m_arFilteredList[pGetInfoTip->iItem]->GetGitPathString();\r
        if (pGetInfoTip->cchTextMax > path.GetLength())\r
                        _tcsncpy_s(pGetInfoTip->pszText, pGetInfoTip->cchTextMax, path, pGetInfoTip->cchTextMax);\r
-#endif\r
+\r
        *pResult = 0;\r
 }\r
 \r
@@ -598,14 +627,14 @@ void CFileDiffDlg::OnContextMenu(CWnd* pWnd, CPoint point)
                temp.LoadString(IDS_LOG_POPUP_COMPARETWO);\r
                popup.AppendMenu(MF_STRING | MF_ENABLED, ID_COMPARE, temp);\r
                temp.LoadString(IDS_FILEDIFF_POPBLAME);\r
-               popup.AppendMenu(MF_STRING | MF_ENABLED, ID_BLAME, temp);\r
+               //popup.AppendMenu(MF_STRING | MF_ENABLED, ID_BLAME, temp);\r
                popup.AppendMenu(MF_SEPARATOR, NULL);\r
                temp.LoadString(IDS_FILEDIFF_POPSAVELIST);\r
                popup.AppendMenu(MF_STRING | MF_ENABLED, ID_SAVEAS, temp);\r
                temp.LoadString(IDS_FILEDIFF_POPCLIPBOARD);\r
                popup.AppendMenu(MF_STRING | MF_ENABLED, ID_CLIPBOARD, temp);\r
                temp.LoadString(IDS_FILEDIFF_POPEXPORT);\r
-               popup.AppendMenu(MF_STRING | MF_ENABLED, ID_EXPORT, temp);\r
+               //popup.AppendMenu(MF_STRING | MF_ENABLED, ID_EXPORT, temp);\r
                int cmd = popup.TrackPopupMenu(TPM_RETURNCMD | TPM_LEFTALIGN | TPM_NONOTIFY, point.x, point.y, this, 0);\r
                m_bCancelled = false;\r
                switch (cmd)\r
@@ -673,6 +702,7 @@ void CFileDiffDlg::OnContextMenu(CWnd* pWnd, CPoint point)
                        break;\r
                case ID_EXPORT:\r
                        {\r
+#if 0 //this funcation seem no useful\r
                                // export all changed files to a folder\r
                                CBrowseFolder browseFolder;\r
                                browseFolder.m_style = BIF_EDITBOX | BIF_NEWDIALOGSTYLE | BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;\r
@@ -694,8 +724,11 @@ void CFileDiffDlg::OnContextMenu(CWnd* pWnd, CPoint point)
                                                CMessageBox::Show(NULL, IDS_ERR_THREADSTARTFAILED, IDS_APPNAME, MB_OK | MB_ICONERROR);\r
                                        }\r
                                }\r
+#endif;                                \r
                        }\r
+\r
                        break;\r
+\r
                }\r
        }\r
 }\r
@@ -809,7 +842,7 @@ void CFileDiffDlg::OnEnSetfocusSecondurl()
 \r
 void CFileDiffDlg::OnBnClickedSwitchleftright()\r
 {\r
-#if 0\r
+\r
        if (m_bThreadRunning)\r
                return;\r
        CString sFilterString;\r
@@ -817,14 +850,14 @@ void CFileDiffDlg::OnBnClickedSwitchleftright()
 \r
        m_cFileList.SetRedraw(false);\r
        m_cFileList.DeleteAllItems();\r
-       for (int i=0; i<(int)m_arFileList.size(); ++i)\r
+       for (int i=0; i<(int)m_arFileList.GetCount(); ++i)\r
        {\r
                CTGitPath fd = m_arFileList[i];\r
-               if (fd.kind == svn_client_diff_summarize_kind_added)\r
-                       fd.kind = svn_client_diff_summarize_kind_deleted;\r
-               else if (fd.kind == svn_client_diff_summarize_kind_deleted)\r
-                       fd.kind = svn_client_diff_summarize_kind_added;\r
-               m_arFileList[i] = fd;\r
+               if (fd.m_Action == CTGitPath::LOGACTIONS_ADDED)\r
+                       fd.m_Action = CTGitPath::LOGACTIONS_DELETED;\r
+               else if (fd.m_Action == CTGitPath::LOGACTIONS_DELETED)\r
+                       fd.m_Action = CTGitPath::LOGACTIONS_ADDED;\r
+               ( CTGitPath)m_arFileList[i] = ( CTGitPath)fd;\r
        }\r
        Filter(sFilterString);\r
 \r
@@ -836,7 +869,7 @@ void CFileDiffDlg::OnBnClickedSwitchleftright()
        m_rev1 = m_rev2;\r
        m_rev2 = rev;\r
        SetURLLabels();\r
-#endif\r
+\r
 }\r
 \r
 void CFileDiffDlg::SetURLLabels()\r