From 9632b383e2f0b5550223d7fceaaeba35d5b2e371 Mon Sep 17 00:00:00 2001 From: Sup Yut Sum Date: Tue, 22 Jan 2013 22:40:56 +0800 Subject: [PATCH] Show checkboxes in file list when resolving conflicts in Rebase Dialog Only files are automatically selected, submodules are not automatically selected Signed-off-by: Sup Yut Sum Signed-off-by: Sven Strickroth --- src/TortoiseProc/CommitDlg.cpp | 4 +++ src/TortoiseProc/RebaseDlg.cpp | 67 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 70 insertions(+), 1 deletion(-) diff --git a/src/TortoiseProc/CommitDlg.cpp b/src/TortoiseProc/CommitDlg.cpp index bd501e5e4..244aaf0bc 100644 --- a/src/TortoiseProc/CommitDlg.cpp +++ b/src/TortoiseProc/CommitDlg.cpp @@ -573,6 +573,10 @@ void CCommitDlg::OnOK() CBlockCacheForPath cacheBlock(g_Git.m_CurrentDir); DWORD currentTicks = GetTickCount(); + // *************************************************** + // ATTENTION: Similar code in RebaseDlg.cpp!!! + // *************************************************** + for (int j = 0; j < nListItems; ++j) { CTGitPath *entry = (CTGitPath*)m_ListCtrl.GetItemData(j); diff --git a/src/TortoiseProc/RebaseDlg.cpp b/src/TortoiseProc/RebaseDlg.cpp index b9ffb37d2..2746bf752 100644 --- a/src/TortoiseProc/RebaseDlg.cpp +++ b/src/TortoiseProc/RebaseDlg.cpp @@ -33,6 +33,7 @@ #include "SmartHandle.h" #include "../TGitCache/CacheInterface.h" #include "Settings\Settings.h" +#include "MassiveGitTask.h" // CRebaseDlg dialog @@ -1006,6 +1007,7 @@ void CRebaseDlg::OnBnClickedContinue() return ; m_RebaseStage = REBASE_START; m_FileListCtrl.Clear(); + m_FileListCtrl.SetHasCheckboxes(false); m_FileListCtrl.m_CurrentVersion = L""; m_ctrlTabCtrl.SetTabLabel(REBASE_TAB_CONFLICT, CString(MAKEINTRESOURCE(IDS_PROC_CONFLICTFILES))); m_ctrlTabCtrl.AddTab(&m_wndOutputRebase, CString(MAKEINTRESOURCE(IDS_LOG)), 2); @@ -1044,10 +1046,63 @@ void CRebaseDlg::OnBnClickedContinue() return; GitRev *curRev=(GitRev*)m_CommitList.m_arShownList[m_CurrentRebaseIndex]; + // *************************************************** + // ATTENTION: Similar code in CommitDlg.cpp!!! + // *************************************************** + CMassiveGitTask mgtReAddAfterCommit(_T("add --ignore-errors -f")); + for (int i = 0; i < m_FileListCtrl.GetItemCount(); i++) + { + CString cmd, out; + CTGitPath *entry = (CTGitPath *)m_FileListCtrl.GetItemData(i); + if (entry->m_Checked) + { + if (entry->m_Action & CTGitPath::LOGACTIONS_UNVER) + cmd.Format(_T("git.exe add -f -- \"%s\""), entry->GetGitPathString()); + else if (entry->m_Action & CTGitPath::LOGACTIONS_DELETED) + cmd.Format(_T("git.exe update-index --force-remove -- \"%s\""), entry->GetGitPathString()); + else + cmd.Format(_T("git.exe update-index -- \"%s\""), entry->GetGitPathString()); + + if (g_Git.Run(cmd, &out, CP_UTF8)) + { + CMessageBox::Show(NULL, out, _T("TortoiseGit"), MB_OK | MB_ICONERROR); + return; + } + + if (entry->m_Action & CTGitPath::LOGACTIONS_REPLACED) + cmd.Format(_T("git.exe rm -- \"%s\""), entry->GetGitOldPathString()); + + g_Git.Run(cmd, &out, CP_UTF8); + } + else + { + if (entry->m_Action & CTGitPath::LOGACTIONS_ADDED || entry->m_Action & CTGitPath::LOGACTIONS_REPLACED) + { + cmd.Format(_T("git.exe rm -f --cache -- \"%s\""), entry->GetGitPathString()); + if (g_Git.Run(cmd, &out, CP_UTF8)) + { + CMessageBox::Show(NULL, out, _T("TortoiseGit"), MB_OK| MB_ICONERROR); + return; + } + mgtReAddAfterCommit.AddFile(*entry); + + if (entry->m_Action & CTGitPath::LOGACTIONS_REPLACED && !entry->GetGitOldPathString().IsEmpty()) + { + cmd.Format(_T("git.exe reset -- \"%s\""), entry->GetGitOldPathString()); + g_Git.Run(cmd, &out, CP_UTF8); + } + } + else if(!(entry->m_Action & CTGitPath::LOGACTIONS_UNVER)) + { + cmd.Format(_T("git.exe reset -- \"%s\""), entry->GetGitPathString()); + g_Git.Run(cmd, &out, CP_UTF8); + } + } + } CString out =_T(""); CString cmd; - cmd.Format(_T("git.exe commit -a -C %s"), curRev->m_CommitHash.ToString()); + cmd.Format(_T("git.exe commit -C %s"), curRev->m_CommitHash.ToString()); AddLogString(cmd); @@ -1062,6 +1117,13 @@ void CRebaseDlg::OnBnClickedContinue() } AddLogString(out); + + if (((DWORD)CRegStdDWORD(_T("Software\\TortoiseGit\\ReaddUnselectedAddedFilesAfterCommit"), TRUE)) == TRUE) + { + BOOL cancel; + mgtReAddAfterCommit.Execute(cancel); + } + this->m_ctrlTabCtrl.SetActiveTab(REBASE_TAB_LOG); if( curRev->GetAction(&m_CommitList) & CTGitPath::LOGACTIONS_REBASE_EDIT) { @@ -1567,6 +1629,7 @@ int CRebaseDlg::RebaseThread() void CRebaseDlg::ListConflictFile() { this->m_FileListCtrl.Clear(); + m_FileListCtrl.SetHasCheckboxes(true); CTGitPathList list; CTGitPath path; list.AddPath(path); @@ -1576,6 +1639,8 @@ void CRebaseDlg::ListConflictFile() this->m_FileListCtrl.GetStatus(&list,true); this->m_FileListCtrl.Show(CTGitPath::LOGACTIONS_UNMERGED|CTGitPath::LOGACTIONS_MODIFIED|CTGitPath::LOGACTIONS_ADDED|CTGitPath::LOGACTIONS_DELETED, CTGitPath::LOGACTIONS_UNMERGED); + + m_FileListCtrl.Check(GITSLC_SHOWFILES); } LRESULT CRebaseDlg::OnRebaseUpdateUI(WPARAM,LPARAM) -- 2.11.4.GIT