From 94d896246fea0bc952dd184a9e8cb2b4f3cdc2a4 Mon Sep 17 00:00:00 2001 From: Sup Yut Sum Date: Wed, 3 Oct 2012 23:59:58 +0800 Subject: [PATCH] Fixed issue #1424: Better Indicate submodule diff error Signed-off-by: Sup Yut Sum Signed-off-by: Sven Strickroth --- src/Changelog.txt | 3 +++ src/TortoiseProc/GitDiff.cpp | 11 ++++++----- src/TortoiseProc/SubmoduleDiffDlg.cpp | 26 +++++++++++++++++++++++++- src/TortoiseProc/SubmoduleDiffDlg.h | 5 ++++- 4 files changed, 38 insertions(+), 7 deletions(-) diff --git a/src/Changelog.txt b/src/Changelog.txt index 563ad78fb..80460a5ec 100644 --- a/src/Changelog.txt +++ b/src/Changelog.txt @@ -1,6 +1,9 @@ = Release 1.7.14.0 = Released: unreleased +== Features == + * Fixed issue #1424: Better Indicate submodule diff error + == Bug Fix == * Fixed issue #1426: Pull Dialog: Unknown option 'no-ff' when using no-tags * Fixed issue #1423: Update Dialog downloads the wrong language pack diff --git a/src/TortoiseProc/GitDiff.cpp b/src/TortoiseProc/GitDiff.cpp index a772c2bc2..f93a2e99d 100644 --- a/src/TortoiseProc/GitDiff.cpp +++ b/src/TortoiseProc/GitDiff.cpp @@ -67,10 +67,10 @@ int CGitDiff::SubmoduleDiffNull(CTGitPath *pPath, git_revnum_t &rev1) int encode=CAppUtils::GetLogOutputEncode(&subgit); cmd.Format(_T("git.exe log -n1 --pretty=format:\"%%s\" %s"),newhash); - subgit.Run(cmd,&newsub,encode); + bool toOK = !subgit.Run(cmd,&newsub,encode); CSubmoduleDiffDlg submoduleDiffDlg; - submoduleDiffDlg.SetDiff(pPath->GetWinPath(), false, oldhash, oldsub, newhash, newsub); + submoduleDiffDlg.SetDiff(pPath->GetWinPath(), false, oldhash, oldsub, true, newhash, newsub, toOK); submoduleDiffDlg.DoModal(); return 0; @@ -207,6 +207,7 @@ int CGitDiff::SubmoduleDiff(CTGitPath * pPath,CTGitPath * /*pPath2*/, git_revnum CString oldsub; CString newsub; + bool oldOK = false, newOK = false; CGit subgit; subgit.m_CurrentDir=g_Git.m_CurrentDir+_T("\\")+pPath->GetWinPathString(); @@ -218,17 +219,17 @@ int CGitDiff::SubmoduleDiff(CTGitPath * pPath,CTGitPath * /*pPath2*/, git_revnum if(oldhash != GIT_REV_ZERO) { cmd.Format(_T("git log -n1 --pretty=format:\"%%s\" %s"),oldhash); - subgit.Run(cmd,&oldsub,encode); + oldOK = !subgit.Run(cmd,&oldsub,encode); } if(newsub != GIT_REV_ZERO) { cmd.Format(_T("git log -n1 --pretty=format:\"%%s\" %s"),newhash); - subgit.Run(cmd,&newsub,encode); + newOK = !subgit.Run(cmd,&newsub,encode); } } CSubmoduleDiffDlg submoduleDiffDlg; - submoduleDiffDlg.SetDiff(pPath->GetWinPath(), isWorkingCopy, oldhash, oldsub, newhash, newsub); + submoduleDiffDlg.SetDiff(pPath->GetWinPath(), isWorkingCopy, oldhash, oldsub, oldOK, newhash, newsub, newOK); submoduleDiffDlg.DoModal(); return 0; diff --git a/src/TortoiseProc/SubmoduleDiffDlg.cpp b/src/TortoiseProc/SubmoduleDiffDlg.cpp index bee19e099..98ca645b6 100644 --- a/src/TortoiseProc/SubmoduleDiffDlg.cpp +++ b/src/TortoiseProc/SubmoduleDiffDlg.cpp @@ -24,6 +24,8 @@ IMPLEMENT_DYNAMIC(CSubmoduleDiffDlg, CHorizontalResizableStandAloneDialog) CSubmoduleDiffDlg::CSubmoduleDiffDlg(CWnd* pParent /*=NULL*/) : CHorizontalResizableStandAloneDialog(CSubmoduleDiffDlg::IDD, pParent) + , m_bFromOK(false) + , m_bToOK(false) { } @@ -43,6 +45,7 @@ void CSubmoduleDiffDlg::DoDataExchange(CDataExchange* pDX) BEGIN_MESSAGE_MAP(CSubmoduleDiffDlg, CHorizontalResizableStandAloneDialog) ON_BN_CLICKED(IDC_LOG, &CSubmoduleDiffDlg::OnBnClickedLog) ON_BN_CLICKED(IDC_LOG2, &CSubmoduleDiffDlg::OnBnClickedLog2) + ON_WM_CTLCOLOR() END_MESSAGE_MAP() BOOL CSubmoduleDiffDlg::OnInitDialog() @@ -88,7 +91,26 @@ BOOL CSubmoduleDiffDlg::OnInitDialog() return FALSE; } -void CSubmoduleDiffDlg::SetDiff(CString path, bool toIsWorkingCopy, CString fromHash, CString fromSubject, CString toHash, CString toSubject) +HBRUSH CSubmoduleDiffDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) +{ + if (pWnd->GetDlgCtrlID() == IDC_FROMSUBJECT && nCtlColor == CTLCOLOR_STATIC && !m_bFromOK) + { + pDC->SetBkColor(RGB(255, 0, 0)); + pDC->SetTextColor(RGB(255, 255, 255)); + return CreateSolidBrush(RGB(255, 0, 0)); + } + + if (pWnd->GetDlgCtrlID() == IDC_TOSUBJECT && nCtlColor == CTLCOLOR_STATIC && !m_bToOK) + { + pDC->SetBkColor(RGB(255, 0, 0)); + pDC->SetTextColor(RGB(255, 255, 255)); + return CreateSolidBrush(RGB(255, 0, 0)); + } + + return CHorizontalResizableStandAloneDialog::OnCtlColor(pDC, pWnd, nCtlColor); +} + +void CSubmoduleDiffDlg::SetDiff(CString path, bool toIsWorkingCopy, CString fromHash, CString fromSubject, bool fromOK, CString toHash, CString toSubject, bool toOK) { m_bToIsWorkingCopy = toIsWorkingCopy; @@ -96,8 +118,10 @@ void CSubmoduleDiffDlg::SetDiff(CString path, bool toIsWorkingCopy, CString from m_sFromHash = fromHash; m_sFromSubject = fromSubject; + m_bFromOK = fromOK; m_sToHash = toHash; m_sToSubject = toSubject; + m_bToOK = toOK; } void CSubmoduleDiffDlg::ShowLog(CString hash) diff --git a/src/TortoiseProc/SubmoduleDiffDlg.h b/src/TortoiseProc/SubmoduleDiffDlg.h index e188b9465..78f9a64e8 100644 --- a/src/TortoiseProc/SubmoduleDiffDlg.h +++ b/src/TortoiseProc/SubmoduleDiffDlg.h @@ -30,11 +30,12 @@ public: enum { IDD = IDD_DIFFSUBMODULE }; - void SetDiff(CString path, bool toIsWorkingCopy, CString fromHash, CString fromSubject, CString toHash, CString toSubject); + void SetDiff(CString path, bool toIsWorkingCopy, CString fromHash, CString fromSubject, bool fromOK, CString toHash, CString toSubject, bool toOK); protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support virtual BOOL OnInitDialog(); + virtual HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); afx_msg void OnBnClickedLog(); afx_msg void OnBnClickedLog2(); @@ -47,6 +48,8 @@ protected: CString m_sFromHash; CString m_sFromSubject; + bool m_bFromOK; CString m_sToHash; CString m_sToSubject; + bool m_bToOK; }; -- 2.11.4.GIT