OSDN Git Service

Basic File diff dialog is okay to show prediff command
authorFrank Li <lznuaa@gmail.com>
Sat, 23 Jan 2010 10:36:18 +0000 (18:36 +0800)
committerFrank Li <lznuaa@gmail.com>
Sat, 23 Jan 2010 10:36:18 +0000 (18:36 +0800)
Signed-off-by: Frank Li <lznuaa@gmail.com>
src/Git/GitRev.cpp
src/Git/GitRev.h
src/Resources/TortoiseProcENG.rc
src/TortoiseProc/Commands/DiffCommand.cpp
src/TortoiseProc/Commands/PrevDiffCommand.cpp
src/TortoiseProc/FileDiffDlg.cpp
src/TortoiseProc/FileDiffDlg.h
src/TortoiseProc/resource.h

index 2e48132..9088c7a 100644 (file)
@@ -403,4 +403,34 @@ void GitRev::DbgPrint()
                TRACE(_T("Parent %i %s"),i, m_ParentHash[i].ToString());\r
        }\r
        TRACE(_T("\n"));\r
+}\r
+\r
+int GitRev::GetCommitFromHash(CGitHash &hash)\r
+{\r
+       g_Git.CheckAndInitDll();\r
+\r
+       GIT_COMMIT commit;\r
+       if(git_get_commit_from_hash( &commit, hash.m_hash))\r
+               return -1;\r
+\r
+       this->ParserFromCommit(&commit);\r
+       git_free_commit(&commit);\r
+\r
+       this->m_CommitHash=hash;\r
+\r
+       return 0;\r
+       \r
+}\r
+\r
+int GitRev::GetCommit(CString &refname)\r
+{\r
+       g_Git.CheckAndInitDll();\r
+       CStringA rev;\r
+       rev= CUnicodeUtils::GetUTF8(refname);\r
+       GIT_HASH sha;\r
+\r
+       if(git_get_sha1(rev.GetBuffer(),sha))\r
+               return -1;\r
+\r
+       GetCommitFromHash(CGitHash((char*)sha));\r
 }
\ No newline at end of file
index 64ff796..cc93f96 100644 (file)
@@ -77,6 +77,10 @@ public:
 \r
        int ParserFromCommit(GIT_COMMIT *commit);\r
        int ParserParentFromCommit(GIT_COMMIT *commit);\r
+\r
+       int GetCommitFromHash(CGitHash &hash);\r
+       int GetCommit(CString &Rev);\r
+\r
 public:\r
        void DbgPrint();\r
 private:\r
index e3d5d63..e53f205 100644 (file)
Binary files a/src/Resources/TortoiseProcENG.rc and b/src/Resources/TortoiseProcENG.rc differ
index dd081f8..9cbc229 100644 (file)
@@ -32,7 +32,7 @@ bool DiffCommand::Execute()
 //     bool bBlame = !!parser.HasKey(_T("blame"));\r
        if (path2.IsEmpty())\r
        {\r
-               if (cmdLinePath.IsDirectory())\r
+               if (this->orgCmdLinePath.IsDirectory())\r
                {\r
                        CChangedDlg dlg;\r
                        dlg.m_pathList = CTGitPathList(cmdLinePath);\r
index 3eb7ad5..87972e2 100644 (file)
 #include "ChangedDlg.h"\r
 #include "LogDlgHelper.h"\r
 #include "CommonResource.h"\r
+#include "FileDiffDlg.h"\r
 \r
 bool PrevDiffCommand::Execute()\r
 {\r
        bool bRet = false;\r
        bool bAlternativeTool = !!parser.HasKey(_T("alternative"));\r
-       if (cmdLinePath.IsDirectory())\r
+       if (this->orgCmdLinePath.IsDirectory())\r
        {\r
-               CChangedDlg dlg;\r
-               dlg.m_pathList = CTGitPathList(cmdLinePath);\r
+               CFileDiffDlg dlg;\r
+               \r
+               dlg.m_strRev1 = _T("HEAD") ;\r
+               dlg.m_strRev2 = _T("HEAD~1");\r
+\r
+               //dlg.m_pathList = CTGitPathList(cmdLinePath);\r
                dlg.DoModal();\r
                bRet = true;\r
        }\r
index 24634b0..7a0ac48 100644 (file)
@@ -65,6 +65,8 @@ void CFileDiffDlg::DoDataExchange(CDataExchange* pDX)
        DDX_Control(pDX, IDC_REV1BTN, m_cRev1Btn);\r
        DDX_Control(pDX, IDC_REV2BTN, m_cRev2Btn);\r
        DDX_Control(pDX, IDC_FILTER, m_cFilter);\r
+       DDX_Control(pDX, IDC_REV1EDIT, m_ctrRev1Edit);\r
+       DDX_Control(pDX, IDC_REV2EDIT, m_ctrRev2Edit);\r
 }\r
 \r
 \r
@@ -83,6 +85,8 @@ BEGIN_MESSAGE_MAP(CFileDiffDlg, CResizableStandAloneDialog)
        ON_MESSAGE(WM_FILTEREDIT_CANCELCLICKED, OnClickedCancelFilter)\r
        ON_EN_CHANGE(IDC_FILTER, &CFileDiffDlg::OnEnChangeFilter)\r
        ON_WM_TIMER()\r
+       ON_EN_CHANGE(IDC_REV1EDIT, &CFileDiffDlg::OnEnChangeRev1edit)\r
+       ON_EN_CHANGE(IDC_REV2EDIT, &CFileDiffDlg::OnEnChangeRev2edit)\r
 END_MESSAGE_MAP()\r
 \r
 \r
@@ -199,16 +203,40 @@ BOOL CFileDiffDlg::OnInitDialog()
        AddAnchor(IDC_SWITCHLEFTRIGHT, TOP_RIGHT);\r
        AddAnchor(IDC_FIRSTURL, TOP_LEFT, TOP_RIGHT);\r
        AddAnchor(IDC_REV1BTN, TOP_RIGHT);\r
-       AddAnchor(IDC_DIFFSTATIC2, TOP_LEFT, TOP_RIGHT);\r
+       //AddAnchor(IDC_DIFFSTATIC2, TOP_LEFT, TOP_RIGHT);\r
        AddAnchor(IDC_SECONDURL, TOP_LEFT, TOP_RIGHT);\r
        AddAnchor(IDC_REV2BTN, TOP_RIGHT);\r
        AddAnchor(IDC_FILTER, TOP_LEFT, TOP_RIGHT);\r
        AddAnchor(IDC_FILELIST, TOP_LEFT, BOTTOM_RIGHT);\r
+       AddAnchor(IDC_REV1GROUP,TOP_LEFT,TOP_RIGHT);\r
+       AddAnchor(IDC_REV2GROUP,TOP_LEFT,TOP_RIGHT);\r
+       AddAnchor(IDC_REV1EDIT,TOP_LEFT);\r
+       AddAnchor(IDC_REV2EDIT,TOP_LEFT);\r
        \r
-       SetURLLabels();\r
-\r
        EnableSaveRestore(_T("FileDiffDlg"));\r
 \r
+       if(this->m_strRev1.IsEmpty())\r
+               this->m_ctrRev1Edit.SetWindowText(this->m_rev1.m_CommitHash.ToString());\r
+       else\r
+       {\r
+               if(m_rev1.GetCommit(this->m_strRev1))\r
+                       this->m_FileListText+=this->m_strRev1 + _T(" is wrong");\r
+\r
+               this->m_ctrRev1Edit.SetWindowText(m_strRev1);\r
+       }\r
+\r
+       if(this->m_strRev2.IsEmpty())\r
+               this->m_ctrRev2Edit.SetWindowText(this->m_rev2.m_CommitHash.ToString());\r
+       else\r
+       {\r
+               if(m_rev2.GetCommit(this->m_strRev2))\r
+                       this->m_FileListText+=this->m_strRev2 + _T(" is wrong");\r
+\r
+               this->m_ctrRev2Edit.SetWindowText(m_strRev2);\r
+       }\r
+\r
+       SetURLLabels();\r
+\r
        InterlockedExchange(&m_bThreadRunning, TRUE);\r
        if (AfxBeginThread(DiffThreadEntry, this)==NULL)\r
        {\r
@@ -216,6 +244,14 @@ BOOL CFileDiffDlg::OnInitDialog()
                CMessageBox::Show(NULL, IDS_ERR_THREADSTARTFAILED, IDS_APPNAME, MB_OK | MB_ICONERROR);\r
        }\r
 \r
+       this->m_cRev1Btn.AddEntry(_T("RefBrowse"));\r
+       this->m_cRev1Btn.AddEntry(_T("Log"));\r
+       this->m_cRev1Btn.AddEntry(_T("RefLog"));\r
+\r
+       this->m_cRev2Btn.AddEntry(_T("RefBrowse"));\r
+       this->m_cRev2Btn.AddEntry(_T("Log"));\r
+       this->m_cRev2Btn.AddEntry(_T("RefLog"));\r
+\r
        // Start with focus on file list\r
        GetDlgItem(IDC_FILELIST)->SetFocus();\r
 \r
@@ -876,6 +912,14 @@ void CFileDiffDlg::OnBnClickedSwitchleftright()
        GitRev rev = m_rev1;\r
        m_rev1 = m_rev2;\r
        m_rev2 = rev;\r
+\r
+       CString str1,str2;\r
+       this->m_ctrRev1Edit.GetWindowText(str1);\r
+       this->m_ctrRev2Edit.GetWindowText(str2);\r
+\r
+       this->m_ctrRev1Edit.SetWindowText(str2);\r
+       this->m_ctrRev2Edit.SetWindowText(str1);\r
+\r
        SetURLLabels();\r
 \r
 }\r
@@ -883,11 +927,11 @@ void CFileDiffDlg::OnBnClickedSwitchleftright()
 void CFileDiffDlg::SetURLLabels()\r
 {\r
 \r
-       m_cRev1Btn.SetWindowText(m_rev1.m_CommitHash.ToString().Left(6));\r
-       m_cRev2Btn.SetWindowText(m_rev2.m_CommitHash.ToString().Left(6));\r
+//     m_cRev1Btn.SetWindowText(m_rev1.m_CommitHash.ToString().Left(6));\r
+//     m_cRev2Btn.SetWindowText(m_rev2.m_CommitHash.ToString().Left(6));\r
 \r
-       SetDlgItemText(IDC_FIRSTURL, m_rev1.m_Subject+CString(_T("\r\n"))+m_rev1.m_CommitHash);\r
-       SetDlgItemText(IDC_SECONDURL,m_rev2.m_Subject+CString(_T("\r\n"))+m_rev2.m_CommitHash);\r
+       SetDlgItemText(IDC_FIRSTURL, m_rev1.m_CommitHash.ToString().Left(8)+_T(": ")+m_rev1.m_Subject);\r
+       SetDlgItemText(IDC_SECONDURL,m_rev2.m_CommitHash.ToString().Left(8)+_T(": ")+m_rev2.m_Subject);\r
 \r
        m_tooltips.AddTool(IDC_FIRSTURL,  \r
                CAppUtils::FormatDateAndTime( m_rev1.m_AuthorDate, DATE_SHORTDATE, false )+_T("  ")+m_rev1.m_AuthorName);\r
@@ -1159,3 +1203,23 @@ void CFileDiffDlg::CopySelectionToClipboard()
        CStringUtils::WriteAsciiStringToClipboard(sTextForClipboard);\r
 }\r
 \r
+\r
+void CFileDiffDlg::OnEnChangeRev1edit()\r
+{\r
+       // TODO:  If this is a RICHEDIT control, the control will not\r
+       // send this notification unless you override the CResizableStandAloneDialog::OnInitDialog()\r
+       // function and call CRichEditCtrl().SetEventMask()\r
+       // with the ENM_CHANGE flag ORed into the mask.\r
+\r
+       // TODO:  Add your control notification handler code here\r
+}\r
+\r
+void CFileDiffDlg::OnEnChangeRev2edit()\r
+{\r
+       // TODO:  If this is a RICHEDIT control, the control will not\r
+       // send this notification unless you override the CResizableStandAloneDialog::OnInitDialog()\r
+       // function and call CRichEditCtrl().SetEventMask()\r
+       // with the ENM_CHANGE flag ORed into the mask.\r
+\r
+       // TODO:  Add your control notification handler code here\r
+}\r
index 74496ab..1ceaca1 100644 (file)
@@ -29,7 +29,7 @@
 #include "FilterEdit.h"\r
 #include "Tooltip.h"\r
 #include "ProgressDlg.h"\r
-\r
+#include "MenuButton.h"\r
 \r
 #define IDT_FILTER             101\r
 \r
@@ -110,8 +110,8 @@ private:
 \r
        CToolTips                       m_tooltips;\r
 \r
-       CButton                         m_cRev1Btn;\r
-       CButton                         m_cRev2Btn;\r
+       CMenuButton                     m_cRev1Btn;\r
+       CMenuButton                     m_cRev2Btn;\r
        CFilterEdit                     m_cFilter;\r
 \r
        CXPImageButton          m_SwitchButton;\r
@@ -146,4 +146,16 @@ private:
 \r
        static BOOL                     m_bAscending;\r
        static int                      m_nSortedColumn;\r
+\r
+       CEdit                           m_ctrRev1Edit;\r
+       CEdit                           m_ctrRev2Edit;\r
+\r
+       CString                         m_FileListText;\r
+public:\r
+       CString                         m_strRev1;\r
+       CString                         m_strRev2;\r
+\r
+public:\r
+       afx_msg void OnEnChangeRev1edit();\r
+       afx_msg void OnEnChangeRev2edit();\r
 };\r
index a5613d2..1d465ae 100644 (file)
Binary files a/src/TortoiseProc/resource.h and b/src/TortoiseProc/resource.h differ