X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=src%2FTortoiseShell%2FContextMenu.cpp;h=83ae0e24d6885530ee1182dd2416e3bd02a46c6b;hb=dfd154ab8a609121f942f2231fb05a808d21db06;hp=8f34bc4a5eee9ed9a013889e6549e95ec228790c;hpb=901ae9a3802d42f65d7d0d6d7bbc28220ef85abd;p=tortoisegit%2FTortoiseGitJp.git diff --git a/src/TortoiseShell/ContextMenu.cpp b/src/TortoiseShell/ContextMenu.cpp index 8f34bc4..83ae0e2 100644 --- a/src/TortoiseShell/ContextMenu.cpp +++ b/src/TortoiseShell/ContextMenu.cpp @@ -41,18 +41,30 @@ 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 }, + { ShellMenuSync, MENUSYNC, IDI_RELOCATE, IDS_MENUSYNC, IDS_MENUDESCSYNC, + ITEMIS_INSVN, 0, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 }, + + // { ShellMenuCheckout, MENUCHECKOUT, IDI_CHECKOUT, IDS_MENUCHECKOUT, IDS_MENUDESCCHECKOUT, // ITEMIS_FOLDER, ITEMIS_INSVN|ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0, 0 }, -// { ShellMenuUpdate, MENUUPDATE, IDI_UPDATE, IDS_MENUUPDATE, IDS_MENUDESCUPDATE, -// ITEMIS_INSVN, ITEMIS_ADDED, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 }, +// { 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_GITSVN, 0, ITEMIS_FOLDERINSVN|ITEMIS_GITSVN, 0, 0, 0, 0, 0}, + { ShellSeparator, 0, 0, 0, 0, 0, 0, 0, 0}, { ShellMenuDiff, MENUDIFF, IDI_DIFF, IDS_MENUDIFF, IDS_MENUDESCDIFF, @@ -67,6 +79,13 @@ CShellExt::MenuInfo CShellExt::menuInfo[] = { ShellMenuLog, MENULOG, IDI_LOG, IDS_MENULOG, IDS_MENUDESCLOG, ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, 0, 0 }, + { ShellMenuRefLog, MENUREFLOG, IDI_LOG, IDS_MENUREFLOG, IDS_MENUDESCREFLOG, + ITEMIS_INSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED, ITEMIS_ADDED, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED, ITEMIS_ADDED, ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED, ITEMIS_ADDED, 0, 0 }, + + { ShellMenuRefBrowse, MENUREFBROWSE, IDI_REPOBROWSE, IDS_MENUREFBROWSE, IDS_MENUDESCREFBROWSE, + ITEMIS_INSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED, ITEMIS_ADDED, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED, ITEMIS_ADDED, ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED, ITEMIS_ADDED, 0, 0 }, + + // { ShellMenuRepoBrowse, MENUREPOBROWSE, IDI_REPOBROWSE, IDS_MENUREPOBROWSE, IDS_MENUDESCREPOBROWSE, // ITEMIS_ONLYONE, 0, ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, 0, 0, 0, 0, 0 }, @@ -74,11 +93,21 @@ CShellExt::MenuInfo CShellExt::menuInfo[] = ITEMIS_INSVN|ITEMIS_ONLYONE, 0, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, 0, 0, 0, 0, 0}, { ShellMenuRebase, MENUREBASE, IDI_REBASE, IDS_MENUREBASE, IDS_MENUREBASE, - ITEMIS_INSVN|ITEMIS_ONLYONE, 0, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, 0, 0, 0, 0, 0}, + ITEMIS_INSVN, 0, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0}, // { ShellMenuRevisionGraph, MENUREVISIONGRAPH, IDI_REVISIONGRAPH, IDS_MENUREVISIONGRAPH, IDS_MENUDESCREVISIONGRAPH, // ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, 0, 0, 0, 0}, + { ShellMenuStashSave, MENUSTASHSAVE, IDI_COMMIT, IDS_MENUSTASHSAVE, IDS_MENUSTASHSAVE, + ITEMIS_INSVN, 0, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 }, + { ShellMenuStashApply, MENUSTASHAPPLY, IDI_RELOCATE, IDS_MENUSTASHAPPLY, IDS_MENUSTASHAPPLY, + ITEMIS_INSVN|ITEMIS_STASH, 0, ITEMIS_FOLDERINSVN|ITEMIS_STASH, 0, 0, 0, 0, 0 }, + { ShellMenuStashPop, MENUSTASHPOP, IDI_RELOCATE, IDS_MENUSTASHPOP, IDS_MENUSTASHPOP, + ITEMIS_INSVN|ITEMIS_STASH, 0, ITEMIS_FOLDERINSVN|ITEMIS_STASH, 0, 0, 0, 0, 0 }, + { ShellMenuStashList, MENUSTASHAPPLY, IDI_LOG, IDS_MENUSTASHLIST, IDS_MENUSTASHLIST, + ITEMIS_INSVN|ITEMIS_EXTENDED, 0, ITEMIS_FOLDERINSVN|ITEMIS_EXTENDED, 0, 0, 0, 0, 0 }, + + { ShellSeparator, 0, 0, 0, 0, 0, 0, 0, 0}, { ShellMenuConflictEditor, MENUCONFLICTEDITOR, IDI_CONFLICT, IDS_MENUCONFLICT, IDS_MENUDESCCONFLICT, @@ -87,8 +116,6 @@ CShellExt::MenuInfo CShellExt::menuInfo[] = { ShellMenuResolve, MENURESOLVE, IDI_RESOLVE, IDS_MENURESOLVE, IDS_MENUDESCRESOLVE, ITEMIS_INSVN|ITEMIS_CONFLICTED, 0, ITEMIS_INSVN|ITEMIS_FOLDER, 0, ITEMIS_FOLDERINSVN, 0, 0, 0 }, -// { ShellMenuUpdateExt, MENUUPDATEEXT, IDI_UPDATE, IDS_MENUUPDATEEXT, IDS_MENUDESCUPDATEEXT, -// ITEMIS_INSVN, ITEMIS_ADDED, ITEMIS_FOLDERINSVN, ITEMIS_ADDED, 0, 0, 0, 0 }, { ShellMenuRename, MENURENAME, IDI_RENAME, IDS_MENURENAME, IDS_MENUDESCRENAME, ITEMIS_INSVN|ITEMIS_ONLYONE|ITEMIS_INVERSIONEDFOLDER, 0, 0, 0, 0, 0, 0, 0 }, @@ -130,8 +157,8 @@ CShellExt::MenuInfo CShellExt::menuInfo[] = { ShellMenuMerge, MENUMERGE, IDI_MERGE, IDS_MENUMERGE, IDS_MENUDESCMERGE, ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, 0, 0, 0, 0, 0 }, - { ShellMenuMergeAll, MENUMERGEALL, IDI_MERGE, IDS_MENUMERGEALL, IDS_MENUDESCMERGEALL, - ITEMIS_INSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED, ITEMIS_ADDED, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED, 0, 0, 0, 0, 0 }, +// { ShellMenuMergeAll, MENUMERGEALL, IDI_MERGE, IDS_MENUMERGEALL, IDS_MENUDESCMERGEALL, +// ITEMIS_INSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED, ITEMIS_ADDED, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED, 0, 0, 0, 0, 0 }, { ShellMenuBranch, MENUCOPY, IDI_COPY, IDS_MENUBRANCH, IDS_MENUDESCCOPY, ITEMIS_INSVN, 0, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 }, @@ -164,13 +191,26 @@ CShellExt::MenuInfo CShellExt::menuInfo[] = // why was this changed, is this related to GitStatus? { ShellMenuIgnoreSub, MENUIGNORE, IDI_IGNORE, IDS_MENUIGNORE, IDS_MENUDESCIGNORE, - ITEMIS_INVERSIONEDFOLDER,C, 0, 0, 0, 0, 0, 0 }, + ITEMIS_INVERSIONEDFOLDER, ITEMIS_IGNORED|ITEMIS_INSVN, 0, 0, 0, 0, 0, 0 }, { ShellMenuUnIgnoreSub, MENUIGNORE, IDI_IGNORE, IDS_MENUUNIGNORE, IDS_MENUDESCUNIGNORE, ITEMIS_IGNORED, 0, 0, 0, 0, 0, 0, 0 }, { ShellSeparator, 0, 0, 0, 0, 0, 0, 0, 0}, + { ShellMenuSubAdd, MENUSUBADD, IDI_ADD, IDS_MENUSUBADD, IDS_MENUSUBADD, + ITEMIS_INSVN, 0, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 }, + + { ShellMenuUpdateExt, MENUUPDATEEXT, IDI_UPDATE, IDS_MENUUPDATEEXT, IDS_MENUDESCUPDATEEXT, + ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_SUBMODULE, 0, 0, 0, 0, 0, 0, 0 }, + + { ShellMenuSubSync, MENUSUBSYNC, IDI_MENUSYNC, IDS_MENUSUBSYNC, IDS_MENUSUBSYNC, + ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_SUBMODULE|ITEMIS_EXTENDED, 0, 0, 0, 0, 0, 0, 0 }, + + + + { ShellSeparator, 0, 0, 0, 0, 0, 0, 0, 0}, + // { ShellMenuCherryPick, MENUCHERRYPICK, IDI_CREATEPATCH, IDS_MENUCHERRYPICK, IDS_MENUDESCCREATEPATCH, // ITEMIS_INSVN, ITEMIS_NORMAL, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 }, @@ -178,21 +218,24 @@ CShellExt::MenuInfo CShellExt::menuInfo[] = ITEMIS_INSVN, ITEMIS_NORMAL, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 }, { ShellMenuImportPatch, MENUIMPORTPATCH, IDI_PATCH, IDS_MENUIMPORTPATCH, IDS_MENUDESCCREATEPATCH, - ITEMIS_INSVN, ITEMIS_NORMAL, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 }, + ITEMIS_INSVN, ITEMIS_NORMAL, ITEMIS_FOLDERINSVN, 0, ITEMIS_PATCHFILE, 0, 0, 0 }, { ShellMenuCreatePatch, MENUCREATEPATCH, IDI_CREATEPATCH, IDS_MENUCREATEPATCH, IDS_MENUDESCCREATEPATCH, - ITEMIS_INSVN, ITEMIS_NORMAL, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 }, + ITEMIS_INSVN|ITEMIS_EXTENDED, ITEMIS_NORMAL, ITEMIS_FOLDERINSVN|ITEMIS_EXTENDED, 0, 0, 0, 0, 0 }, { ShellMenuApplyPatch, MENUAPPLYPATCH, IDI_PATCH, IDS_MENUAPPLYPATCH, IDS_MENUDESCAPPLYPATCH, - ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_FOLDERINSVN, ITEMIS_ADDED, ITEMIS_ONLYONE|ITEMIS_PATCHFILE, 0, ITEMIS_FOLDERINSVN, ITEMIS_ADDED, 0, 0 }, + ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_EXTENDED, ITEMIS_ADDED, ITEMIS_ONLYONE|ITEMIS_PATCHFILE, 0, ITEMIS_FOLDERINSVN|ITEMIS_EXTENDED, ITEMIS_ADDED, 0, 0 }, - { ShellMenuProperties, MENUPROPERTIES, IDI_PROPERTIES, IDS_MENUPROPERTIES, IDS_MENUDESCPROPERTIES, - ITEMIS_INSVN, 0, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 }, + { ShellMenuSendMail, MENUSENDMAIL, IDI_MENUSENDMAIL, IDS_MENUSENDMAIL, IDS_MENUDESSENDMAIL, + ITEMIS_PATCHFILE, 0, 0, 0, 0, 0, 0, 0 }, + +// { ShellMenuProperties, MENUPROPERTIES, IDI_PROPERTIES, IDS_MENUPROPERTIES, IDS_MENUDESCPROPERTIES, +// ITEMIS_INSVN, 0, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 }, { ShellSeparator, 0, 0, 0, 0, 0, 0, 0, 0}, -// { ShellMenuClipPaste, MENUCLIPPASTE, IDI_CLIPPASTE, IDS_MENUCLIPPASTE, IDS_MENUDESCCLIPPASTE, -// ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_PATHINCLIPBOARD, 0, 0, 0, 0, 0, 0, 0 }, + { ShellMenuClipPaste, MENUCLIPPASTE, IDI_CLIPPASTE, IDS_MENUCLIPPASTE, IDS_MENUDESCCLIPPASTE, + ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_PATHINCLIPBOARD, 0, 0, 0, 0, 0, 0, 0 }, { ShellSeparator, 0, 0, 0, 0, 0, 0, 0, 0}, @@ -343,13 +386,11 @@ STDMETHODIMP CShellExt::Initialize(LPCITEMIDLIST pIDFolder, // TODO: should we really assume any sub-directory to be versioned // or only if it contains versioned files - if ( askedpath.IsDirectory() ) - { - if (askedpath.HasAdminDir()) - itemStates |= ITEMIS_INSVN; - } - if ((status != git_wc_status_unversioned)&&(status != git_wc_status_ignored)&&(status != git_wc_status_none)) - itemStates |= ITEMIS_INSVN; + itemStates |= askedpath.GetAdminDirMask(); + + if ((status == git_wc_status_unversioned) || (status == git_wc_status_ignored) || (status == git_wc_status_none)) + itemStates &= ~ITEMIS_INSVN; + if (status == git_wc_status_ignored) itemStates |= ITEMIS_IGNORED; if (status == git_wc_status_normal) @@ -450,15 +491,10 @@ STDMETHODIMP CShellExt::Initialize(LPCITEMIDLIST pIDFolder, } } - // TODO: should we really assume any sub-directory to be versioned - // or only if it contains versioned files - if ( strpath.IsDirectory() ) - { - if (strpath.HasAdminDir()) - itemStates |= ITEMIS_INSVN; - } - if ((status != git_wc_status_unversioned)&&(status != git_wc_status_ignored)&&(status != git_wc_status_none)) - itemStates |= ITEMIS_INSVN; + itemStates |= strpath.GetAdminDirMask(); + + if ((status == git_wc_status_unversioned)||(status == git_wc_status_ignored)||(status == git_wc_status_none)) + itemStates &= ~ITEMIS_INSVN; if (status == git_wc_status_ignored) { itemStates |= ITEMIS_IGNORED; @@ -478,6 +514,7 @@ STDMETHODIMP CShellExt::Initialize(LPCITEMIDLIST pIDFolder, // } // } } + if (status == git_wc_status_normal) itemStates |= ITEMIS_NORMAL; if (status == git_wc_status_conflicted) @@ -560,8 +597,8 @@ STDMETHODIMP CShellExt::Initialize(LPCITEMIDLIST pIDFolder, } //if ((status != git_wc_status_unversioned)&&(status != git_wc_status_ignored)&&(status != git_wc_status_none)) - if (askedpath.HasAdminDir()) - itemStatesFolder |= ITEMIS_INSVN; + itemStatesFolder |= askedpath.GetAdminDirMask(); + if (status == git_wc_status_normal) itemStatesFolder |= ITEMIS_NORMAL; if (status == git_wc_status_conflicted) @@ -582,10 +619,8 @@ STDMETHODIMP CShellExt::Initialize(LPCITEMIDLIST pIDFolder, status = fetchedstatus; } //if ((status != git_wc_status_unversioned)&&(status != git_wc_status_ignored)&&(status != git_wc_status_none)) - if (askedpath.HasAdminDir()) - { - itemStatesFolder |= ITEMIS_FOLDERINSVN; - } + itemStatesFolder |= askedpath.GetAdminDirMask(); + if (status == git_wc_status_ignored) itemStatesFolder |= ITEMIS_IGNORED; itemStatesFolder |= ITEMIS_FOLDER; @@ -593,6 +628,7 @@ STDMETHODIMP CShellExt::Initialize(LPCITEMIDLIST pIDFolder, itemStates |= ITEMIS_ONLYONE; if (m_State != FileStateDropHandler) itemStates |= itemStatesFolder; + } if (files_.size() == 2) @@ -640,8 +676,8 @@ STDMETHODIMP CShellExt::Initialize(LPCITEMIDLIST pIDFolder, status = fetchedstatus; } //if ((status != git_wc_status_unversioned)&&(status != git_wc_status_ignored)&&(status != git_wc_status_none)) - if (askedpath.HasAdminDir()) - itemStates |= ITEMIS_FOLDERINSVN; + itemStates |= askedpath.GetAdminDirMask(); + if (status == git_wc_status_ignored) itemStates |= ITEMIS_IGNORED; itemStates |= ITEMIS_FOLDER; @@ -649,6 +685,7 @@ STDMETHODIMP CShellExt::Initialize(LPCITEMIDLIST pIDFolder, itemStates |= ITEMIS_ADDED; if (status == git_wc_status_deleted) itemStates |= ITEMIS_DELETED; + } } @@ -725,7 +762,7 @@ void CShellExt::InsertGitMenu(BOOL istop, HMENU menu, UINT pos, UINT_PTR id, UIN } } #endif - if ((fullver < 0x500)||(fullver == 0x500 && !(uFlags&~(CMF_RESERVED|CMF_EXPLORE)))) + if ((fullver < 0x500)||(fullver == 0x500 && !(uFlags&~(CMF_RESERVED|CMF_EXPLORE|CMF_EXTENDEDVERBS)))) { // on win2k, the context menu does not work properly if we use // icon bitmaps. At least the menu text is empty in the context menu @@ -1183,7 +1220,7 @@ STDMETHODIMP CShellExt::QueryContextMenu(HMENU hMenu, const int pos = indexMenu++; const int id = idCmd++; - if ((fullver < 0x500)||(fullver == 0x500 && !(uFlags&~(CMF_RESERVED|CMF_EXPLORE)))) + if ((fullver < 0x500)||(fullver == 0x500 && !(uFlags&~(CMF_RESERVED|CMF_EXPLORE|CMF_EXTENDEDVERBS)))) { InsertMenu(hMenu, pos, MF_DISABLED|MF_GRAYED|MF_BYPOSITION|MF_STRING, id, sBranchName); HBITMAP bmp = IconToBitmap(icon); @@ -1369,7 +1406,7 @@ STDMETHODIMP CShellExt::QueryContextMenu(HMENU hMenu, myIDMap[idCmd] = ShellSubMenu; } HBITMAP bmp = NULL; - if ((fullver < 0x500)||(fullver == 0x500 && !(uFlags&~(CMF_RESERVED|CMF_EXPLORE)))) + if ((fullver < 0x500)||(fullver == 0x500 && !(uFlags&~(CMF_RESERVED|CMF_EXPLORE|CMF_EXTENDEDVERBS)))) { menuiteminfo.fMask = MIIM_STRING | MIIM_ID | MIIM_SUBMENU | MIIM_DATA; if (uIcon) @@ -1451,6 +1488,11 @@ STDMETHODIMP CShellExt::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi) switch (id_it->second) { //#region case + case ShellMenuSync: + svnCmd += _T("sync /path:\""); + svnCmd += folder_; + svnCmd += _T("\""); + break; case ShellMenuCheckout: svnCmd += _T("checkout /path:\""); svnCmd += folder_; @@ -1463,13 +1505,29 @@ STDMETHODIMP CShellExt::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi) svnCmd += _T("\""); svnCmd += _T(" /deletepathfile"); break; + case ShellMenuSubSync: + tempfile = WriteFileListToTempFile(); + svnCmd += _T("subsync /pathfile:\""); + svnCmd += tempfile; + svnCmd += _T("\""); + svnCmd += _T(" /deletepathfile"); + if(itemStatesFolder&ITEMIS_SUBMODULE) + { + svnCmd += _T(" /bkpath:"); + svnCmd += folder_; + } + break; case ShellMenuUpdateExt: tempfile = WriteFileListToTempFile(); - svnCmd += _T("update /pathfile:\""); + svnCmd += _T("subupdate /pathfile:\""); svnCmd += tempfile; svnCmd += _T("\""); svnCmd += _T(" /deletepathfile"); - svnCmd += _T(" /rev"); + if(itemStatesFolder&ITEMIS_SUBMODULE) + { + svnCmd += _T(" /bkpath:"); + svnCmd += folder_; + } break; case ShellMenuCommit: tempfile = WriteFileListToTempFile(); @@ -1535,6 +1593,13 @@ STDMETHODIMP CShellExt::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi) svnCmd += _T("\""); svnCmd += _T(" /deletepathfile"); break; + case ShellMenuSendMail: + tempfile = WriteFileListToTempFile(); + svnCmd += _T("sendmail /pathfile:\""); + svnCmd += tempfile; + svnCmd += _T("\""); + svnCmd += _T(" /deletepathfile"); + break; case ShellMenuResolve: tempfile = WriteFileListToTempFile(); svnCmd += _T("resolve /pathfile:\""); @@ -1593,7 +1658,12 @@ STDMETHODIMP CShellExt::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi) svnCmd += _T("\""); break; case ShellMenuSettings: - svnCmd += _T("settings"); + svnCmd += _T("settings /path:\""); + if (files_.size() > 0) + svnCmd += files_.front(); + else + svnCmd += folder_; + svnCmd += _T("\""); break; case ShellMenuHelp: svnCmd += _T("help"); @@ -1752,6 +1822,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) @@ -1779,14 +1865,69 @@ STDMETHODIMP CShellExt::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi) svnCmd += _T("\""); } break; - case ShellMenuRepoBrowse: - svnCmd += _T("repobrowser /path:\""); + case ShellMenuRefBrowse: + svnCmd += _T("refbrowse /path:\""); + if (files_.size() > 0) + svnCmd += files_.front(); + else + svnCmd += folder_; + svnCmd += _T("\""); + break; + case ShellMenuRefLog: + svnCmd += _T("reflog /path:\""); + if (files_.size() > 0) + svnCmd += files_.front(); + else + svnCmd += folder_; + svnCmd += _T("\""); + break; + + case ShellMenuStashSave: + svnCmd += _T("stashsave /path:\""); if (files_.size() > 0) svnCmd += files_.front(); else svnCmd += folder_; svnCmd += _T("\""); break; + + case ShellMenuStashApply: + svnCmd += _T("stashapply /path:\""); + if (files_.size() > 0) + svnCmd += files_.front(); + else + svnCmd += folder_; + svnCmd += _T("\""); + break; + + case ShellMenuStashPop: + svnCmd += _T("stashpop /path:\""); + if (files_.size() > 0) + svnCmd += files_.front(); + else + svnCmd += folder_; + svnCmd += _T("\""); + break; + + + case ShellMenuStashList: + svnCmd += _T("reflog /path:\""); + if (files_.size() > 0) + svnCmd += files_.front(); + else + svnCmd += folder_; + svnCmd += _T("\" /ref:refs/stash"); + break; + + case ShellMenuSubAdd: + svnCmd += _T("subadd /path:\""); + if (files_.size() > 0) + svnCmd += files_.front(); + else + svnCmd += folder_; + svnCmd += _T("\""); + break; + case ShellMenuBlame: svnCmd += _T("blame /path:\""); if (files_.size() > 0) @@ -1989,12 +2130,11 @@ STDMETHODIMP CShellExt::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi) break; case ShellMenuImportPatch: - svnCmd += _T("importpatch /path:\""); - if (files_.size() > 0) - svnCmd += files_.front(); - else - svnCmd += folder_; + tempfile = WriteFileListToTempFile(); + svnCmd += _T("importpatch /pathfile:\""); + svnCmd += tempfile; svnCmd += _T("\""); + svnCmd += _T(" /deletepathfile"); break; case ShellMenuCherryPick: @@ -2437,7 +2577,7 @@ void CShellExt::InsertIgnoreSubmenus(UINT &idCmd, UINT idCmdFirst, HMENU hMenu, MENUITEMINFO menuiteminfo; SecureZeroMemory(&menuiteminfo, sizeof(menuiteminfo)); menuiteminfo.cbSize = sizeof(menuiteminfo); - if (fullver < 0x500 || (fullver == 0x500 && !(uFlags&~(CMF_RESERVED|CMF_EXPLORE)))) + if (fullver < 0x500 || (fullver == 0x500 && !(uFlags&~(CMF_RESERVED|CMF_EXPLORE|CMF_EXTENDEDVERBS)))) { menuiteminfo.fMask = MIIM_STRING | MIIM_ID | MIIM_SUBMENU | MIIM_DATA; if (icon)