OSDN Git Service

Add "SVN Rebase" and "SVN DCommit" command at shell contextmenu
authorFrank Li <lznuaa@gmail.com>
Sat, 27 Jun 2009 15:04:47 +0000 (23:04 +0800)
committerFrank Li <lznuaa@gmail.com>
Sat, 27 Jun 2009 15:04:47 +0000 (23:04 +0800)
src/Git/TGitPath.cpp
src/Git/TGitPath.h
src/TortoiseShell/ContextMenu.cpp
src/TortoiseShell/Globals.h
src/TortoiseShell/ShellExt.h
src/TortoiseShell/resource.h
src/TortoiseShell/resourceshell.rc

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