From c7f5bc799e2e04cdf2b6fd60d20582310a866a66 Mon Sep 17 00:00:00 2001 From: Sven Strickroth Date: Mon, 28 May 2012 21:45:40 +0200 Subject: [PATCH] LogDialog: initial changes to follow renames Signed-off-by: Sven Strickroth --- src/Resources/TortoiseProcENG.rc | 5 +++-- src/TortoiseProc/GitLogListBase.cpp | 15 +++++++++++++- src/TortoiseProc/LogDlg.cpp | 39 +++++++++++++++++++++++++++++++++++-- src/TortoiseProc/LogDlg.h | 2 ++ src/TortoiseProc/resource.h | 1 + 5 files changed, 57 insertions(+), 5 deletions(-) diff --git a/src/Resources/TortoiseProcENG.rc b/src/Resources/TortoiseProcENG.rc index f9864e64f..3a6d45948 100644 --- a/src/Resources/TortoiseProcENG.rc +++ b/src/Resources/TortoiseProcENG.rc @@ -205,9 +205,10 @@ BEGIN EDITTEXT IDC_LOGINFO,7,248,407,16,ES_MULTILINE | ES_READONLY | NOT WS_BORDER CONTROL "H&ide Unrelated Changed Paths",IDC_HIDEPATHS,"Button",BS_AUTO3STATE | WS_TABSTOP,7,267,172,10 CONTROL "Show &Whole Project",IDC_SHOWWHOLEPROJECT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,195,267,161,10 - CONTROL "&All Branches",IDC_LOG_ALLBRANCH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,278,293,10 - PUSHBUTTON "S&tatistics",IDC_STATBUTTON,364,265,50,14,WS_DISABLED + CONTROL "&All Branches",IDC_LOG_ALLBRANCH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,278,171,10 + CONTROL "&Follow renames",IDC_LOG_FOLLOWRENAMES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,195,278,161,10 CONTROL "First Parent",IDC_LOG_FIRSTPARENT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,289,293,10 + PUSHBUTTON "S&tatistics",IDC_STATBUTTON,364,265,50,14,WS_DISABLED PUSHBUTTON "Help",IDHELP,364,283,50,14 CONTROL "",IDC_PROGRESS,"msctls_progress32",NOT WS_VISIBLE | WS_BORDER,7,300,349,9 PUSHBUTTON "Refresh",IDC_REFRESH,7,310,76,14 diff --git a/src/TortoiseProc/GitLogListBase.cpp b/src/TortoiseProc/GitLogListBase.cpp index a64bfd082..e02b4e82b 100644 --- a/src/TortoiseProc/GitLogListBase.cpp +++ b/src/TortoiseProc/GitLogListBase.cpp @@ -2149,6 +2149,13 @@ int CGitLogListBase::BeginFetchLog() data.m_IsRegex = m_bFilterWithRegex; #endif + // follow does not work for directories + if (!path || path->IsDirectory()) + mask &= ~CGit::LOG_INFO_FOLLOW; + // follow does not work with all branches 8at least in TGit) + if (mask & CGit::LOG_INFO_FOLLOW) + mask &= ~CGit::LOG_INFO_ALL_BRANCH; + CString cmd=g_Git.GetLogCmd(m_StartRef,path,-1,mask,pFrom,pTo,true,&data); //this->m_logEntries.ParserFromLog(); @@ -2324,12 +2331,18 @@ UINT CGitLogListBase::LogThread() while( ret== 0) { g_Git.m_critGitDllSec.Lock(); - ret = git_get_log_nextcommit(this->m_DllGitLog, &commit, 0); + ret = git_get_log_nextcommit(this->m_DllGitLog, &commit, m_ShowMask & CGit::LOG_INFO_FOLLOW); g_Git.m_critGitDllSec.Unlock(); if(ret) break; + if (commit.m_ignore == 1) + { + git_free_commit(&commit); + continue; + } + //printf("%s\r\n",commit.GetSubject()); if(m_bExitThread) break; diff --git a/src/TortoiseProc/LogDlg.cpp b/src/TortoiseProc/LogDlg.cpp index f9cfd16ff..818e71b4f 100644 --- a/src/TortoiseProc/LogDlg.cpp +++ b/src/TortoiseProc/LogDlg.cpp @@ -59,6 +59,7 @@ CLogDlg::CLogDlg(CWnd* pParent /*=NULL*/) , m_currentChangedArray(NULL) , m_nSortColumn(0) , m_bShowedAll(false) + , m_bFollowRenames(FALSE) , m_bSelect(false) , m_bSelectionMustBeContinuous(false) @@ -116,6 +117,7 @@ void CLogDlg::DoDataExchange(CDataExchange* pDX) DDX_Text(pDX, IDC_LOGINFO, m_sLogInfo); DDX_Check(pDX, IDC_LOG_FIRSTPARENT, m_bFirstParent); DDX_Check(pDX, IDC_LOG_ALLBRANCH,m_bAllBranch); + DDX_Check(pDX, IDC_LOG_FOLLOWRENAMES, m_bFollowRenames); DDX_Check(pDX, IDC_SHOWWHOLEPROJECT,m_bWholeProject); DDX_Control(pDX, IDC_SEARCHEDIT, m_cFilter); DDX_Control(pDX, IDC_STATIC_REF, m_staticRef); @@ -149,6 +151,7 @@ BEGIN_MESSAGE_MAP(CLogDlg, CResizableStandAloneDialog) ON_BN_CLICKED(IDC_HIDEPATHS, OnBnClickedHidepaths) ON_COMMAND(MSG_FETCHED_DIFF, OnBnClickedHidepaths) ON_BN_CLICKED(IDC_LOG_ALLBRANCH, OnBnClickedAllBranch) + ON_BN_CLICKED(IDC_LOG_FOLLOWRENAMES, OnBnClickedFollowRenames) ON_NOTIFY(DTN_DROPDOWN, IDC_DATEFROM, &CLogDlg::OnDtnDropdownDatefrom) ON_NOTIFY(DTN_DROPDOWN, IDC_DATETO, &CLogDlg::OnDtnDropdownDateto) @@ -272,6 +275,7 @@ BOOL CLogDlg::OnInitDialog() AdjustControlSize(IDC_LOG_FIRSTPARENT); AdjustControlSize(IDC_LOG_ALLBRANCH); AdjustControlSize(IDC_SHOWWHOLEPROJECT); + AdjustControlSize(IDC_LOG_FOLLOWRENAMES); GetClientRect(m_DlgOrigRect); m_LogList.GetClientRect(m_LogListOrigRect); @@ -303,6 +307,7 @@ BOOL CLogDlg::OnInitDialog() AddAnchor(IDC_LOGINFO, BOTTOM_LEFT, BOTTOM_RIGHT); AddAnchor(IDC_HIDEPATHS, BOTTOM_LEFT); AddAnchor(IDC_LOG_ALLBRANCH,BOTTOM_LEFT); + AddAnchor(IDC_LOG_FOLLOWRENAMES, BOTTOM_LEFT); AddAnchor(IDC_LOG_FIRSTPARENT, BOTTOM_LEFT); //AddAnchor(IDC_GETALL, BOTTOM_LEFT); AddAnchor(IDC_SHOWWHOLEPROJECT, BOTTOM_LEFT); @@ -390,6 +395,9 @@ BOOL CLogDlg::OnInitDialog() else m_LogList.m_lastSelectedHash = g_Git.GetHash(_T("HEAD")); + if (m_path.IsEmpty() || m_path.IsDirectory()) + DialogEnableWindow(IDC_LOG_FOLLOWRENAMES, FALSE); + m_LogList.FetchLogAsync(this); GetDlgItem(IDC_LOGLIST)->SetFocus(); @@ -439,8 +447,7 @@ LRESULT CLogDlg::OnLogListLoading(WPARAM wParam, LPARAM /*lParam*/) if (m_pTaskbarList) m_pTaskbarList->SetProgressState(m_hWnd, TBPF_NOPROGRESS); - //if (!m_bShowedAll) - DialogEnableWindow(IDC_SHOWWHOLEPROJECT, TRUE); + DialogEnableWindow(IDC_SHOWWHOLEPROJECT, !m_bFollowRenames); //DialogEnableWindow(IDC_GETALL, TRUE); DialogEnableWindow(IDC_STATBUTTON, !(m_LogList.m_arShownList.IsEmpty() || m_LogList.m_arShownList.GetCount() == 1 && m_LogList.m_bShowWC)); @@ -3256,6 +3263,32 @@ void CLogDlg::OnBnClickedAllBranch() FillLogMessageCtrl(false); } +void CLogDlg::OnBnClickedFollowRenames() +{ + this->UpdateData(); + + if(m_bFollowRenames) + { + m_LogList.m_ShowMask |= CGit::LOG_INFO_FOLLOW; + if (m_bAllBranch) + { + + m_bAllBranch = FALSE; + m_LogList.m_ShowMask &=~ CGit::LOG_INFO_ALL_BRANCH; + } + + } + else + m_LogList.m_ShowMask &= ~CGit::LOG_INFO_FOLLOW; + + DialogEnableWindow(IDC_LOG_ALLBRANCH, !m_bFollowRenames); + DialogEnableWindow(IDC_SHOWWHOLEPROJECT, !m_bFollowRenames); + + OnRefresh(); + + FillLogMessageCtrl(false); +} + void CLogDlg::OnBnClickedBrowseRef() { CString newRef = CBrowseRefsDlg::PickRef(false,m_LogList.GetStartRef()); @@ -3336,10 +3369,12 @@ void CLogDlg::OnBnClickShowWholeProject() { m_LogList.m_Path.Reset(); SetDlgTitle(); + DialogEnableWindow(IDC_LOG_FOLLOWRENAMES, FALSE); } else { m_LogList.m_Path=m_path; + DialogEnableWindow(IDC_LOG_FOLLOWRENAMES, !(m_path.IsEmpty() || m_path.IsDirectory())); } SetDlgTitle(); diff --git a/src/TortoiseProc/LogDlg.h b/src/TortoiseProc/LogDlg.h index 49fd28aa3..9aae2e08c 100644 --- a/src/TortoiseProc/LogDlg.h +++ b/src/TortoiseProc/LogDlg.h @@ -154,6 +154,7 @@ protected: afx_msg void OnBnClickShowWholeProject(); afx_msg void OnBnClickedHidepaths(); afx_msg void OnBnClickedAllBranch(); + afx_msg void OnBnClickedFollowRenames(); afx_msg void OnBnClickedBrowseRef(); afx_msg void OnBnClickedCheckStoponcopy(); @@ -261,6 +262,7 @@ private: BOOL m_bFirstParent; BOOL m_bAllBranch; BOOL m_bWholeProject; + BOOL m_bFollowRenames; git_revnum_t m_lowestRev; CTGitPathList * m_currentChangedArray; diff --git a/src/TortoiseProc/resource.h b/src/TortoiseProc/resource.h index 5046cdc3a..07bd9e5b9 100644 --- a/src/TortoiseProc/resource.h +++ b/src/TortoiseProc/resource.h @@ -1076,6 +1076,7 @@ #define IDC_STATIC_MERGE_MESSAGE 1635 #define IDC_PATCH 1636 #define IDC_VIEW_PATCH 1637 +#define IDC_LOG_FOLLOWRENAMES 1638 #define IDC_BUTTON_SUBMODULE 1639 #define IDC_RADIO_EXCLUDE 1640 #define IDC_RADIO_GITIGNORE 1641 -- 2.11.4.GIT