From 5ea604f00c568b6811f9b55b799c296dc06b7899 Mon Sep 17 00:00:00 2001 From: Sup Yut Sum Date: Sat, 12 Jan 2013 17:20:51 +0800 Subject: [PATCH] Log dialog can revert selected files to parent revision Signed-off-by: Sup Yut Sum --- Languages/Tortoise.pot | 4 +++ doc/images/en/LogContextMenu2.png | Bin 8840 -> 5327 bytes doc/source/en/TortoiseGit/tsvn_dug/dug_log.xml | 8 +++++ src/Changelog.txt | 8 ++++- src/Git/GitStatusListCtrl.cpp | 47 +++++++++++++++++++++---- src/Git/GitStatusListCtrl.h | 5 +-- src/Resources/LoglistCommonResource.h | 1 + src/Resources/TortoiseLoglistCommon.rc2 | 1 + 8 files changed, 64 insertions(+), 10 deletions(-) rewrite doc/images/en/LogContextMenu2.png (99%) diff --git a/Languages/Tortoise.pot b/Languages/Tortoise.pot index 42903a889..b284e8a1a 100644 --- a/Languages/Tortoise.pot +++ b/Languages/Tortoise.pot @@ -6750,6 +6750,10 @@ msgstr "" msgid "Revert commit %s" msgstr "" +#. Resource IDs: (1252) +msgid "Revert to parent revision" +msgstr "" + #. Resource IDs: (323) #, c-format msgid "Revert to revision %s" diff --git a/doc/images/en/LogContextMenu2.png b/doc/images/en/LogContextMenu2.png dissimilarity index 99% index 8793ee477fe0bed023c93b7d2bfe1e7200b3cd67..2841750faf4ee93e8411a178d34cc0af08b84d2d 100644 GIT binary patch literal 5327 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 + Revert changes to parent revision + + + Revert chosen files to parent revision. + + + + Show log diff --git a/src/Changelog.txt b/src/Changelog.txt index 477711793..77c0018bf 100644 --- a/src/Changelog.txt +++ b/src/Changelog.txt @@ -1,4 +1,10 @@ -= Release 1.7.16.0 = += Release 1.8.1.0 = +Released: unreleased + +== Features == + * Log dialog can revert selected files to parent revision + += Release 1.8.0.0 = Released: unreleased == Features == diff --git a/src/Git/GitStatusListCtrl.cpp b/src/Git/GitStatusListCtrl.cpp index 3b46dc8b9..61a1c6f2b 100644 --- a/src/Git/GitStatusListCtrl.cpp +++ b/src/Git/GitStatusListCtrl.cpp @@ -1,6 +1,6 @@ // TortoiseGit - a Windows shell extension for easy version control -// Copyright (C) 2008-2012 - TortoiseGit +// Copyright (C) 2008-2013 - TortoiseGit // Copyright (C) 2003-2008 - TortoiseSVN // Copyright (C) 2010-2012 Sven Strickroth @@ -1625,6 +1625,12 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point) { popup.AppendMenuIcon(IDGITLC_REVERTTOREV, IDS_LOG_POPUP_REVERTTOREV, IDI_REVERT); } + + if ((m_dwContextMenus & GetContextMenuBit(IDGITLC_REVERTTOPARENT)) && ( !this->m_CurrentVersion.IsEmpty() ) + && this->m_CurrentVersion != GIT_REV_ZERO && !(wcStatus & CTGitPath::LOGACTIONS_ADDED)) + { + popup.AppendMenuIcon(IDGITLC_REVERTTOPARENT, IDS_LOG_POPUP_REVERTTOPARENT, IDI_REVERT); + } } if ((GetSelectedCount() == 1)&&(!(wcStatus & CTGitPath::LOGACTIONS_UNVER)) @@ -2354,6 +2360,9 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point) case IDGITLC_REVERTTOREV: RevertSelectedItemToVersion(); break; + case IDGITLC_REVERTTOPARENT: + RevertSelectedItemToVersion(true); + break; #if 0 case IDSVNLC_COMMIT: { @@ -4161,7 +4170,7 @@ void CGitStatusListCtrl::FileSaveAs(CTGitPath *path) } -int CGitStatusListCtrl::RevertSelectedItemToVersion() +int CGitStatusListCtrl::RevertSelectedItemToVersion(bool parent) { if(this->m_CurrentVersion.IsEmpty()) return 0; @@ -4171,22 +4180,46 @@ int CGitStatusListCtrl::RevertSelectedItemToVersion() POSITION pos = GetFirstSelectedItemPosition(); int index; CString cmd,out; - int count =0; + std::map versionMap; while ((index = GetNextSelectedItem(pos)) >= 0) { CTGitPath *fentry=(CTGitPath*)GetItemData(index); - cmd.Format(_T("git.exe checkout %s -- \"%s\""),m_CurrentVersion,fentry->GetGitPathString()); + CString version; + if (parent) + { + int parentNo = fentry->m_ParentNo & PARENT_MASK; + CString ref; + ref.Format(_T("%s^%d"), m_CurrentVersion, parentNo + 1); + CGitHash hash; + if (g_Git.GetHash(hash, ref)) + { + MessageBox(g_Git.GetGitLastErr(_T("Could not get hash of ref \"") + ref + _T("\".")), _T("TortoiseGit"), MB_ICONERROR); + continue; + } + + version = hash.ToString(); + } + else + version = m_CurrentVersion; + + cmd.Format(_T("git.exe checkout %s -- \"%s\""), version, fentry->GetGitPathString()); out.Empty(); if (g_Git.Run(cmd, &out, CP_UTF8)) { if (MessageBox(out, _T("TortoiseGit"), MB_ICONEXCLAMATION | MB_OKCANCEL) == IDCANCEL) - break; + continue; } else - count++; + versionMap[version]++; } - out.Format(IDS_STATUSLIST_FILESREVERTED, count, m_CurrentVersion); + out.Empty(); + for (auto it = versionMap.begin(); it != versionMap.end(); ++it) + { + CString versionEntry; + versionEntry.Format(IDS_STATUSLIST_FILESREVERTED, it->second, it->first); + out += versionEntry + _T("\r\n"); + } CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK); return 0; } diff --git a/src/Git/GitStatusListCtrl.h b/src/Git/GitStatusListCtrl.h index 4d8ba1336..79d6d6cba 100644 --- a/src/Git/GitStatusListCtrl.h +++ b/src/Git/GitStatusListCtrl.h @@ -1,6 +1,6 @@ // TortoiseGit - a Windows shell extension for easy version control -// Copyright (C) 2008-2012 - TortoiseGit +// Copyright (C) 2008-2013 - TortoiseGit // Copyright (C) 2003-2008 - TortoiseSVN // Copyright (C) 2010-2012 Sven Strickroth @@ -494,6 +494,7 @@ public: IDGITLC_BLAME , IDGITLC_SAVEAS , IDGITLC_REVERTTOREV , + IDGITLC_REVERTTOPARENT , IDGITLC_VIEWREV , IDGITLC_FINDENTRY , IDGITLC_COMPARETWO , @@ -1046,7 +1047,7 @@ private: void FilesExport(); void FileSaveAs(CTGitPath *path); - int RevertSelectedItemToVersion(); + int RevertSelectedItemToVersion(bool parent = false); private: bool * m_pbCanceled; diff --git a/src/Resources/LoglistCommonResource.h b/src/Resources/LoglistCommonResource.h index 29de4901a..37094d6f6 100644 --- a/src/Resources/LoglistCommonResource.h +++ b/src/Resources/LoglistCommonResource.h @@ -131,3 +131,4 @@ #define IDS_PATHACTIONS_UNKNOWN 20114 #define IDS_LOG_POPUP_EXPORT 20115 +#define IDS_LOG_POPUP_REVERTTOPARENT 20116 diff --git a/src/Resources/TortoiseLoglistCommon.rc2 b/src/Resources/TortoiseLoglistCommon.rc2 index 538685a8c..c6ce5ef05 100644 --- a/src/Resources/TortoiseLoglistCommon.rc2 +++ b/src/Resources/TortoiseLoglistCommon.rc2 @@ -43,6 +43,7 @@ BEGIN IDS_LOG_POPUP_COPYTOCLIPBOARD "Copy to clipboard" IDS_LOG_POPUP_COPYTOCLIPBOARDMESSAGES "Copy log messages to clipboard" IDS_LOG_POPUP_REVERTTOREV "R&evert to this revision" + IDS_LOG_POPUP_REVERTTOPARENT "Revert to parent revision" IDS_LOG_POPUP_EXPORT "Export selection to..." IDS_LOG_POPUP_BLAMEREVS "&Blame revisions" IDS_LOG_POPUP_BLAMEDIFF "&Blame changes" -- 2.11.4.GIT