From f27a2b7b04f549ab3ff336359a5098b1e8935706 Mon Sep 17 00:00:00 2001 From: Frank Li Date: Sat, 23 Jan 2010 18:36:18 +0800 Subject: [PATCH] Basic File diff dialog is okay to show prediff command Signed-off-by: Frank Li --- src/Git/GitRev.cpp | 30 ++++++++++ src/Git/GitRev.h | 4 ++ src/Resources/TortoiseProcENG.rc | Bin 453394 -> 453778 bytes src/TortoiseProc/Commands/DiffCommand.cpp | 2 +- src/TortoiseProc/Commands/PrevDiffCommand.cpp | 11 +++- src/TortoiseProc/FileDiffDlg.cpp | 78 +++++++++++++++++++++++--- src/TortoiseProc/FileDiffDlg.h | 18 +++++- src/TortoiseProc/resource.h | Bin 167840 -> 168208 bytes 8 files changed, 129 insertions(+), 14 deletions(-) diff --git a/src/Git/GitRev.cpp b/src/Git/GitRev.cpp index 2e48132..9088c7a 100644 --- a/src/Git/GitRev.cpp +++ b/src/Git/GitRev.cpp @@ -403,4 +403,34 @@ void GitRev::DbgPrint() TRACE(_T("Parent %i %s"),i, m_ParentHash[i].ToString()); } TRACE(_T("\n")); +} + +int GitRev::GetCommitFromHash(CGitHash &hash) +{ + g_Git.CheckAndInitDll(); + + GIT_COMMIT commit; + if(git_get_commit_from_hash( &commit, hash.m_hash)) + return -1; + + this->ParserFromCommit(&commit); + git_free_commit(&commit); + + this->m_CommitHash=hash; + + return 0; + +} + +int GitRev::GetCommit(CString &refname) +{ + g_Git.CheckAndInitDll(); + CStringA rev; + rev= CUnicodeUtils::GetUTF8(refname); + GIT_HASH sha; + + if(git_get_sha1(rev.GetBuffer(),sha)) + return -1; + + GetCommitFromHash(CGitHash((char*)sha)); } \ No newline at end of file diff --git a/src/Git/GitRev.h b/src/Git/GitRev.h index 64ff796..cc93f96 100644 --- a/src/Git/GitRev.h +++ b/src/Git/GitRev.h @@ -77,6 +77,10 @@ public: int ParserFromCommit(GIT_COMMIT *commit); int ParserParentFromCommit(GIT_COMMIT *commit); + + int GetCommitFromHash(CGitHash &hash); + int GetCommit(CString &Rev); + public: void DbgPrint(); private: diff --git a/src/Resources/TortoiseProcENG.rc b/src/Resources/TortoiseProcENG.rc index e3d5d6319e67ae052f211c71a713b8b4444215d7..e53f205bca10d315a48d6228f591cb9683b9f6b3 100644 GIT binary patch delta 489 zcmZXQF)Ra77{|Zwz0=f%l4@zvRHz6;N$;+AS7FqML{dbJQXPy4d!vhriC*GcSq!Gu zwYk+`6w;-M#A0AVSWG0|UBx0V-+RgX|MGwT|Esj3mHX&k9V1n1@m%UuAOS<5f@zg@ zwkTY4sRqQr|l7N&L6%=Z2;D~kAic?z8qEC#Qt8o;eZwlu!7^ka2a5uCqZz`y{kj*>8h$oudjx$^^efdp0`fTA`ers#1nK-$KHW<)v4caYeR}?^s&yy ztfRu3*Xp`~!ETq-e}kFMV*@j2eb#%q3I?4muo!(EGP#_0Pz-bO4)^I4zvD?ddEo^# aNO|HDbQ6-gNHB7F=9P<)oSD~-*7pz4fO&cV delta 343 zcmbPqQ+m=h>4q(g5*zr97)*gshe3hCh{24(Y`dd3BP-)}osEnUjJ!q+=0F(`HexWG zeld+vc`{#;#&nA4S%eK4oESnF z{J_dAfeL{}O?KQZJ$XTy5^Ewu9z)9Xj~f{kC!d?h!EOwewwTVS!el)?Ya648D9CgZ zR67{VrzdV~2u#J(A(~tpTw#np;Mbgs+wlL~UciYa$$8Eu20J0Hih~f6c?ToIB z!UjM#R0K#Hf;>N6(T_=XdQA@#SNnq7ud}#ForgCmdLinePath.IsDirectory()) { CChangedDlg dlg; dlg.m_pathList = CTGitPathList(cmdLinePath); diff --git a/src/TortoiseProc/Commands/PrevDiffCommand.cpp b/src/TortoiseProc/Commands/PrevDiffCommand.cpp index 3eb7ad53..87972e2 100644 --- a/src/TortoiseProc/Commands/PrevDiffCommand.cpp +++ b/src/TortoiseProc/Commands/PrevDiffCommand.cpp @@ -24,15 +24,20 @@ #include "ChangedDlg.h" #include "LogDlgHelper.h" #include "CommonResource.h" +#include "FileDiffDlg.h" bool PrevDiffCommand::Execute() { bool bRet = false; bool bAlternativeTool = !!parser.HasKey(_T("alternative")); - if (cmdLinePath.IsDirectory()) + if (this->orgCmdLinePath.IsDirectory()) { - CChangedDlg dlg; - dlg.m_pathList = CTGitPathList(cmdLinePath); + CFileDiffDlg dlg; + + dlg.m_strRev1 = _T("HEAD") ; + dlg.m_strRev2 = _T("HEAD~1"); + + //dlg.m_pathList = CTGitPathList(cmdLinePath); dlg.DoModal(); bRet = true; } diff --git a/src/TortoiseProc/FileDiffDlg.cpp b/src/TortoiseProc/FileDiffDlg.cpp index 24634b0..7a0ac48 100644 --- a/src/TortoiseProc/FileDiffDlg.cpp +++ b/src/TortoiseProc/FileDiffDlg.cpp @@ -65,6 +65,8 @@ void CFileDiffDlg::DoDataExchange(CDataExchange* pDX) DDX_Control(pDX, IDC_REV1BTN, m_cRev1Btn); DDX_Control(pDX, IDC_REV2BTN, m_cRev2Btn); DDX_Control(pDX, IDC_FILTER, m_cFilter); + DDX_Control(pDX, IDC_REV1EDIT, m_ctrRev1Edit); + DDX_Control(pDX, IDC_REV2EDIT, m_ctrRev2Edit); } @@ -83,6 +85,8 @@ BEGIN_MESSAGE_MAP(CFileDiffDlg, CResizableStandAloneDialog) ON_MESSAGE(WM_FILTEREDIT_CANCELCLICKED, OnClickedCancelFilter) ON_EN_CHANGE(IDC_FILTER, &CFileDiffDlg::OnEnChangeFilter) ON_WM_TIMER() + ON_EN_CHANGE(IDC_REV1EDIT, &CFileDiffDlg::OnEnChangeRev1edit) + ON_EN_CHANGE(IDC_REV2EDIT, &CFileDiffDlg::OnEnChangeRev2edit) END_MESSAGE_MAP() @@ -199,16 +203,40 @@ BOOL CFileDiffDlg::OnInitDialog() AddAnchor(IDC_SWITCHLEFTRIGHT, TOP_RIGHT); AddAnchor(IDC_FIRSTURL, TOP_LEFT, TOP_RIGHT); AddAnchor(IDC_REV1BTN, TOP_RIGHT); - AddAnchor(IDC_DIFFSTATIC2, TOP_LEFT, TOP_RIGHT); + //AddAnchor(IDC_DIFFSTATIC2, TOP_LEFT, TOP_RIGHT); AddAnchor(IDC_SECONDURL, TOP_LEFT, TOP_RIGHT); AddAnchor(IDC_REV2BTN, TOP_RIGHT); AddAnchor(IDC_FILTER, TOP_LEFT, TOP_RIGHT); AddAnchor(IDC_FILELIST, TOP_LEFT, BOTTOM_RIGHT); + AddAnchor(IDC_REV1GROUP,TOP_LEFT,TOP_RIGHT); + AddAnchor(IDC_REV2GROUP,TOP_LEFT,TOP_RIGHT); + AddAnchor(IDC_REV1EDIT,TOP_LEFT); + AddAnchor(IDC_REV2EDIT,TOP_LEFT); - SetURLLabels(); - EnableSaveRestore(_T("FileDiffDlg")); + if(this->m_strRev1.IsEmpty()) + this->m_ctrRev1Edit.SetWindowText(this->m_rev1.m_CommitHash.ToString()); + else + { + if(m_rev1.GetCommit(this->m_strRev1)) + this->m_FileListText+=this->m_strRev1 + _T(" is wrong"); + + this->m_ctrRev1Edit.SetWindowText(m_strRev1); + } + + if(this->m_strRev2.IsEmpty()) + this->m_ctrRev2Edit.SetWindowText(this->m_rev2.m_CommitHash.ToString()); + else + { + if(m_rev2.GetCommit(this->m_strRev2)) + this->m_FileListText+=this->m_strRev2 + _T(" is wrong"); + + this->m_ctrRev2Edit.SetWindowText(m_strRev2); + } + + SetURLLabels(); + InterlockedExchange(&m_bThreadRunning, TRUE); if (AfxBeginThread(DiffThreadEntry, this)==NULL) { @@ -216,6 +244,14 @@ BOOL CFileDiffDlg::OnInitDialog() CMessageBox::Show(NULL, IDS_ERR_THREADSTARTFAILED, IDS_APPNAME, MB_OK | MB_ICONERROR); } + this->m_cRev1Btn.AddEntry(_T("RefBrowse")); + this->m_cRev1Btn.AddEntry(_T("Log")); + this->m_cRev1Btn.AddEntry(_T("RefLog")); + + this->m_cRev2Btn.AddEntry(_T("RefBrowse")); + this->m_cRev2Btn.AddEntry(_T("Log")); + this->m_cRev2Btn.AddEntry(_T("RefLog")); + // Start with focus on file list GetDlgItem(IDC_FILELIST)->SetFocus(); @@ -876,6 +912,14 @@ void CFileDiffDlg::OnBnClickedSwitchleftright() GitRev rev = m_rev1; m_rev1 = m_rev2; m_rev2 = rev; + + CString str1,str2; + this->m_ctrRev1Edit.GetWindowText(str1); + this->m_ctrRev2Edit.GetWindowText(str2); + + this->m_ctrRev1Edit.SetWindowText(str2); + this->m_ctrRev2Edit.SetWindowText(str1); + SetURLLabels(); } @@ -883,11 +927,11 @@ void CFileDiffDlg::OnBnClickedSwitchleftright() void CFileDiffDlg::SetURLLabels() { - m_cRev1Btn.SetWindowText(m_rev1.m_CommitHash.ToString().Left(6)); - m_cRev2Btn.SetWindowText(m_rev2.m_CommitHash.ToString().Left(6)); +// m_cRev1Btn.SetWindowText(m_rev1.m_CommitHash.ToString().Left(6)); +// m_cRev2Btn.SetWindowText(m_rev2.m_CommitHash.ToString().Left(6)); - SetDlgItemText(IDC_FIRSTURL, m_rev1.m_Subject+CString(_T("\r\n"))+m_rev1.m_CommitHash); - SetDlgItemText(IDC_SECONDURL,m_rev2.m_Subject+CString(_T("\r\n"))+m_rev2.m_CommitHash); + SetDlgItemText(IDC_FIRSTURL, m_rev1.m_CommitHash.ToString().Left(8)+_T(": ")+m_rev1.m_Subject); + SetDlgItemText(IDC_SECONDURL,m_rev2.m_CommitHash.ToString().Left(8)+_T(": ")+m_rev2.m_Subject); m_tooltips.AddTool(IDC_FIRSTURL, CAppUtils::FormatDateAndTime( m_rev1.m_AuthorDate, DATE_SHORTDATE, false )+_T(" ")+m_rev1.m_AuthorName); @@ -1159,3 +1203,23 @@ void CFileDiffDlg::CopySelectionToClipboard() CStringUtils::WriteAsciiStringToClipboard(sTextForClipboard); } + +void CFileDiffDlg::OnEnChangeRev1edit() +{ + // TODO: If this is a RICHEDIT control, the control will not + // send this notification unless you override the CResizableStandAloneDialog::OnInitDialog() + // function and call CRichEditCtrl().SetEventMask() + // with the ENM_CHANGE flag ORed into the mask. + + // TODO: Add your control notification handler code here +} + +void CFileDiffDlg::OnEnChangeRev2edit() +{ + // TODO: If this is a RICHEDIT control, the control will not + // send this notification unless you override the CResizableStandAloneDialog::OnInitDialog() + // function and call CRichEditCtrl().SetEventMask() + // with the ENM_CHANGE flag ORed into the mask. + + // TODO: Add your control notification handler code here +} diff --git a/src/TortoiseProc/FileDiffDlg.h b/src/TortoiseProc/FileDiffDlg.h index 74496ab..1ceaca1 100644 --- a/src/TortoiseProc/FileDiffDlg.h +++ b/src/TortoiseProc/FileDiffDlg.h @@ -29,7 +29,7 @@ #include "FilterEdit.h" #include "Tooltip.h" #include "ProgressDlg.h" - +#include "MenuButton.h" #define IDT_FILTER 101 @@ -110,8 +110,8 @@ private: CToolTips m_tooltips; - CButton m_cRev1Btn; - CButton m_cRev2Btn; + CMenuButton m_cRev1Btn; + CMenuButton m_cRev2Btn; CFilterEdit m_cFilter; CXPImageButton m_SwitchButton; @@ -146,4 +146,16 @@ private: static BOOL m_bAscending; static int m_nSortedColumn; + + CEdit m_ctrRev1Edit; + CEdit m_ctrRev2Edit; + + CString m_FileListText; +public: + CString m_strRev1; + CString m_strRev2; + +public: + afx_msg void OnEnChangeRev1edit(); + afx_msg void OnEnChangeRev2edit(); }; diff --git a/src/TortoiseProc/resource.h b/src/TortoiseProc/resource.h index a5613d285fcc3200aa7757202d86d2a0fbcc8373..1d465ae1fd9917a22719f57b8aab7edc1eac740c 100644 GIT binary patch delta 151 zcmZ25pKHP*u7)j)QkLvt46Y183`UddBaEkCFk@7jED*!Sh{XL<$hTd?lJQ*Z1NXzE5JfVlVL(CbxbPL7ffT6 h+J0d=W7(|ji;S4+Vy1tX&L}p$rjJQvx>r9_7y#Y5G&BGJ delta 102 zcmbQRh-<-ou7)j)QkIkd6!L9EsPw~b!ISHp>l<$f1AOmfe_n1 pXC`CWtjP<+#HOpsG74?KXUw!IX8MQejAGN@^fQS}-!*|L3;-#NC?x;@ -- 2.11.0