From 8a9eb27fb3415e28a610e8f0afdbdb8c084fdbb0 Mon Sep 17 00:00:00 2001 From: Frank Li Date: Sat, 27 Jun 2009 23:04:47 +0800 Subject: [PATCH] Add "SVN Rebase" and "SVN DCommit" command at shell contextmenu --- src/Git/TGitPath.cpp | 12 ++++++++++++ src/Git/TGitPath.h | 1 + src/TortoiseShell/ContextMenu.cpp | 29 ++++++++++++++++++++++++++++- src/TortoiseShell/Globals.h | 5 +++-- src/TortoiseShell/ShellExt.h | 2 ++ src/TortoiseShell/resource.h | 8 ++++++-- src/TortoiseShell/resourceshell.rc | 12 ++++++++++-- 7 files changed, 62 insertions(+), 7 deletions(-) diff --git a/src/Git/TGitPath.cpp b/src/Git/TGitPath.cpp index 9bdbed4..065f350 100644 --- a/src/Git/TGitPath.cpp +++ b/src/Git/TGitPath.cpp @@ -765,6 +765,18 @@ bool CTGitPath::HasSubmodules() const return !g_GitAdminDir.GetSuperProjectRoot(GetWinPathString()).IsEmpty(); } +bool CTGitPath::HasGitSVNDir() const +{ + CString topdir; + if(!g_GitAdminDir.HasAdminDir(GetWinPathString(),&topdir)) + { + return false; + } + topdir+=_T("\\"); + topdir+=g_GitAdminDir.GetAdminDirName(); + topdir+=_T("\\svn"); + return PathFileExists(topdir); +} bool CTGitPath::HasAdminDir(CString *ProjectTopDir) const { if (m_bHasAdminDirKnown) diff --git a/src/Git/TGitPath.h b/src/Git/TGitPath.h index 875ffdb..6235338 100644 --- a/src/Git/TGitPath.h +++ b/src/Git/TGitPath.h @@ -218,6 +218,7 @@ public: bool HasAdminDir() const; bool HasAdminDir(CString *ProjectTopDir) const; bool HasSubmodules() const; + bool HasGitSVNDir() const; /** * Checks if the path point to or below a Subversion admin directory (.Git). diff --git a/src/TortoiseShell/ContextMenu.cpp b/src/TortoiseShell/ContextMenu.cpp index 1889ebf..9ae7b16 100644 --- a/src/TortoiseShell/ContextMenu.cpp +++ b/src/TortoiseShell/ContextMenu.cpp @@ -41,7 +41,7 @@ CShellExt::MenuInfo CShellExt::menuInfo[] = { ShellMenuFetch, MENUFETCH, IDI_PULL, IDS_MENUFETCH, IDS_MENUFETCH, ITEMIS_INSVN, 0, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 }, - { ShellMenuPush, MENUPUSH, IDI_PUSH, IDS_MENUPUSH, IDS_MENUPULL, + { ShellMenuPush, MENUPUSH, IDI_PUSH, IDS_MENUPUSH, IDS_MENUPUSH, ITEMIS_INSVN, 0, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 }, // { ShellMenuCheckout, MENUCHECKOUT, IDI_CHECKOUT, IDS_MENUCHECKOUT, IDS_MENUDESCCHECKOUT, @@ -50,10 +50,17 @@ CShellExt::MenuInfo CShellExt::menuInfo[] = // { ShellMenuUpdate, MENUSUBUPDATE, IDI_UPDATE, IDS_MENUUPDATE, IDS_MENUDESCUPDATE, // ITEMIS_INSVN, 0, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 }, + { ShellSeparator, ITEMIS_GITSVN, 0, 0, 0, 0, 0, 0, 0}, { ShellMenuCommit, MENUCOMMIT, IDI_COMMIT, IDS_MENUCOMMIT, IDS_MENUDESCCOMMIT, ITEMIS_INSVN, 0, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 }, + { ShellMenuGitSVNDCommit, MENUSVNDCOMMIT, IDI_COMMIT, IDS_MENUSVNDCOMMIT, IDS_MENUSVNDCOMMIT_DESC, + ITEMIS_INSVN|ITEMIS_GITSVN, 0, ITEMIS_FOLDERINSVN|ITEMIS_GITSVN, 0, 0, 0, 0, 0 }, + + { ShellMenuGitSVNRebase, MENUSVNREBASE, IDI_REBASE, IDS_MENUSVNREBASE, IDS_MENUSVNREBASE_DESC, + ITEMIS_INSVN|ITEMIS_ONLYONE|ITEMIS_GITSVN, 0, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE|ITEMIS_GITSVN, 0, 0, 0, 0, 0}, + { ShellSeparator, 0, 0, 0, 0, 0, 0, 0, 0}, { ShellMenuDiff, MENUDIFF, IDI_DIFF, IDS_MENUDIFF, IDS_MENUDESCDIFF, @@ -628,6 +635,10 @@ STDMETHODIMP CShellExt::Initialize(LPCITEMIDLIST pIDFolder, { itemStatesFolder |= ITEMIS_SUBMODULE; } + if (askedpath.HasGitSVNDir()) + { + itemStatesFolder |= ITEMIS_GITSVN; + } if (status == git_wc_status_ignored) itemStatesFolder |= ITEMIS_IGNORED; itemStatesFolder |= ITEMIS_FOLDER; @@ -1823,6 +1834,22 @@ STDMETHODIMP CShellExt::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi) svnCmd += folder_; svnCmd += _T("\""); break; + case ShellMenuGitSVNRebase: + svnCmd += _T("svnrebase /path:\""); + if (files_.size() > 0) + svnCmd += files_.front(); + else + svnCmd += folder_; + svnCmd += _T("\""); + break; + case ShellMenuGitSVNDCommit: + svnCmd += _T("svndcommit /path:\""); + if (files_.size() > 0) + svnCmd += files_.front(); + else + svnCmd += folder_; + svnCmd += _T("\""); + break; case ShellMenuRebase: svnCmd += _T("rebase /path:\""); if (files_.size() > 0) diff --git a/src/TortoiseShell/Globals.h b/src/TortoiseShell/Globals.h index fca182b..34acb3b 100644 --- a/src/TortoiseShell/Globals.h +++ b/src/TortoiseShell/Globals.h @@ -45,8 +45,8 @@ #define MENUCREATEPATCH 0x0000000001000000 #define MENUAPPLYPATCH 0x0000000002000000 //#define MENUREVISIONGRAPH 0x0000000004000000 -//#define MENULOCK 0x0000000008000000 -//#define MENUUNLOCK 0x0000000010000000 +#define MENUSVNREBASE 0x0000000008000000 +#define MENUSVNDCOMMIT 0x0000000010000000 #define MENUPROPERTIES 0x0000000020000000 //#define MENUURLDIFF 0x0000000040000000 #define MENUDELUNVERSIONED 0x0000000080000000 @@ -114,4 +114,5 @@ enum FileState #define ITEMIS_PATHINCLIPBOARD 0x00010000 #define ITEMIS_TWO 0x00020000 #define ITEMIS_SUBMODULE 0x00040000 +#define ITEMIS_GITSVN 0x00080000 diff --git a/src/TortoiseShell/ShellExt.h b/src/TortoiseShell/ShellExt.h index e17bd74..b09863e 100644 --- a/src/TortoiseShell/ShellExt.h +++ b/src/TortoiseShell/ShellExt.h @@ -164,6 +164,8 @@ protected: ShellMenuSubAdd, ShellMenuSubSync, ShellMenuSendMail, + ShellMenuGitSVNRebase, + ShellMenuGitSVNDCommit, ShellMenuLastEntry // used to mark the menu array end }; diff --git a/src/TortoiseShell/resource.h b/src/TortoiseShell/resource.h index 9beed4e..4918d56 100644 --- a/src/TortoiseShell/resource.h +++ b/src/TortoiseShell/resource.h @@ -195,8 +195,12 @@ #define IDI_MENUSYNC 321 #define IDS_MENUSENDMAIL 321 #define IDS_MENUDESSENDMAIL 322 -#define IDS_MENUREFBROWSE 333 -#define IDS_MENUDESCREFBROWSE 334 +#define IDS_MENUREFBROWSE 333 +#define IDS_MENUDESCREFBROWSE 334 +#define IDS_MENUSVNREBASE 335 +#define IDS_MENUSVNREBASE_DESC 336 +#define IDS_MENUSVNDCOMMIT 337 +#define IDS_MENUSVNDCOMMIT_DESC 338 #define IDC_REVISION 1001 #define IDC_LOCKED 1002 #define IDC_REPOURL 1003 diff --git a/src/TortoiseShell/resourceshell.rc b/src/TortoiseShell/resourceshell.rc index 99eb891..0f9d01c 100644 --- a/src/TortoiseShell/resourceshell.rc +++ b/src/TortoiseShell/resourceshell.rc @@ -270,9 +270,7 @@ BEGIN IDS_MENUSUBADD "Submodule Add" IDS_MENUSUBSYNC "Submodule Sync" IDS_MENUREFLOG "Show &Reflog" - IDS_MENUREFBROWSE "Browse Reference" IDS_MENUDESCREFLOG "Shows reference log" - IDS_MENUDESCREFBROWSE "Browse reference" IDS_MENUSTASHLIST "Stash List" END @@ -281,6 +279,9 @@ BEGIN IDS_REFLOG_DEL "Delete Ref..." IDS_MENUSENDMAIL "Send Mail..." IDS_MENUDESSENDMAIL "Send Patch by Email" + IDS_MENUREFBROWSE "Browse Reference" + IDS_MENUDESCREFBROWSE "Browse reference" + IDS_MENUSVNREBASE "SVN Rebase..." END STRINGTABLE @@ -427,6 +428,13 @@ BEGIN IDS_git_DEPTH_EMPTY "Only this item" END +STRINGTABLE +BEGIN + IDS_MENUSVNREBASE_DESC "Git SVN Rebase" + IDS_MENUSVNDCOMMIT "SVN DCommit" + IDS_MENUSVNDCOMMIT_DESC "Git SVN DCommit" +END + #endif // English (U.S.) resources ///////////////////////////////////////////////////////////////////////////// -- 2.11.0