{ 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
+ { ShellMenuSync, MENUSYNC, IDI_RELOCATE, IDS_MENUSYNC, IDS_MENUDESCSYNC,\r
+ ITEMIS_INSVN, 0, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 },\r
+\r
+\r
// { ShellMenuCheckout, MENUCHECKOUT, IDI_CHECKOUT, IDS_MENUCHECKOUT, IDS_MENUDESCCHECKOUT,\r
// ITEMIS_FOLDER, ITEMIS_INSVN|ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0, 0 },\r
\r
-// { ShellMenuUpdate, MENUUPDATE, IDI_UPDATE, IDS_MENUUPDATE, IDS_MENUDESCUPDATE, \r
-// ITEMIS_INSVN, ITEMIS_ADDED, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 },\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
+ { 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_GITSVN, 0, ITEMIS_FOLDERINSVN|ITEMIS_GITSVN, 0, 0, 0, 0, 0},\r
+\r
+ { ShellMenuGitSVNIgnore, MENUSVNIGNORE, IDI_IGNORE, IDS_MENUSVNIGNORE, IDS_MENUSVNIGNORE_DESC,\r
+ ITEMIS_INSVN|ITEMIS_GITSVN|ITEMIS_EXTENDED, 0, ITEMIS_FOLDERINSVN|ITEMIS_GITSVN|ITEMIS_EXTENDED, 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
{ ShellMenuLog, MENULOG, IDI_LOG, IDS_MENULOG, IDS_MENUDESCLOG,\r
ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, 0, 0 },\r
\r
+ { ShellMenuRefLog, MENUREFLOG, IDI_LOG, IDS_MENUREFLOG, IDS_MENUDESCREFLOG,\r
+ 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 },\r
+\r
+ { ShellMenuRefBrowse, MENUREFBROWSE, IDI_REPOBROWSE, IDS_MENUREFBROWSE, IDS_MENUDESCREFBROWSE,\r
+ 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 },\r
+\r
+\r
// { ShellMenuRepoBrowse, MENUREPOBROWSE, IDI_REPOBROWSE, IDS_MENUREPOBROWSE, IDS_MENUDESCREPOBROWSE,\r
// ITEMIS_ONLYONE, 0, ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, 0, 0, 0, 0, 0 },\r
\r
{ ShellMenuShowChanged, MENUSHOWCHANGED, IDI_SHOWCHANGED, IDS_MENUSHOWCHANGED, IDS_MENUDESCSHOWCHANGED,\r
ITEMIS_INSVN|ITEMIS_ONLYONE, 0, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, 0, 0, 0, 0, 0},\r
\r
- { ShellMenuRebase, MENUREBASE, IDI_SHOWCHANGED, IDS_MENUREBASE, IDS_MENUREBASE,\r
- ITEMIS_INSVN|ITEMIS_ONLYONE, 0, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, 0, 0, 0, 0, 0},\r
+ { ShellMenuRebase, MENUREBASE, IDI_REBASE, IDS_MENUREBASE, IDS_MENUREBASE,\r
+ ITEMIS_INSVN, 0, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0},\r
\r
// { ShellMenuRevisionGraph, MENUREVISIONGRAPH, IDI_REVISIONGRAPH, IDS_MENUREVISIONGRAPH, IDS_MENUDESCREVISIONGRAPH,\r
// ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, 0, 0, 0, 0},\r
\r
+ { ShellMenuStashSave, MENUSTASHSAVE, IDI_COMMIT, IDS_MENUSTASHSAVE, IDS_MENUSTASHSAVE,\r
+ ITEMIS_INSVN, 0, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 },\r
+ { ShellMenuStashApply, MENUSTASHAPPLY, IDI_RELOCATE, IDS_MENUSTASHAPPLY, IDS_MENUSTASHAPPLY,\r
+ ITEMIS_INSVN|ITEMIS_STASH, 0, ITEMIS_FOLDERINSVN|ITEMIS_STASH, 0, 0, 0, 0, 0 },\r
+ { ShellMenuStashPop, MENUSTASHPOP, IDI_RELOCATE, IDS_MENUSTASHPOP, IDS_MENUSTASHPOP,\r
+ ITEMIS_INSVN|ITEMIS_STASH, 0, ITEMIS_FOLDERINSVN|ITEMIS_STASH, 0, 0, 0, 0, 0 },\r
+ { ShellMenuStashList, MENUSTASHAPPLY, IDI_LOG, IDS_MENUSTASHLIST, IDS_MENUSTASHLIST,\r
+ ITEMIS_INSVN|ITEMIS_EXTENDED, 0, ITEMIS_FOLDERINSVN|ITEMIS_EXTENDED, 0, 0, 0, 0, 0 },\r
+\r
+\r
{ ShellSeparator, 0, 0, 0, 0, 0, 0, 0, 0},\r
\r
{ ShellMenuConflictEditor, MENUCONFLICTEDITOR, IDI_CONFLICT, IDS_MENUCONFLICT, IDS_MENUDESCCONFLICT,\r
{ ShellMenuResolve, MENURESOLVE, IDI_RESOLVE, IDS_MENURESOLVE, IDS_MENUDESCRESOLVE,\r
ITEMIS_INSVN|ITEMIS_CONFLICTED, 0, ITEMIS_INSVN|ITEMIS_FOLDER, 0, ITEMIS_FOLDERINSVN, 0, 0, 0 },\r
\r
-// { ShellMenuUpdateExt, MENUUPDATEEXT, IDI_UPDATE, IDS_MENUUPDATEEXT, IDS_MENUDESCUPDATEEXT,\r
-// ITEMIS_INSVN, ITEMIS_ADDED, ITEMIS_FOLDERINSVN, ITEMIS_ADDED, 0, 0, 0, 0 },\r
\r
{ ShellMenuRename, MENURENAME, IDI_RENAME, IDS_MENURENAME, IDS_MENUDESCRENAME,\r
ITEMIS_INSVN|ITEMIS_ONLYONE|ITEMIS_INVERSIONEDFOLDER, 0, 0, 0, 0, 0, 0, 0 },\r
\r
{ ShellMenuMerge, MENUMERGE, IDI_MERGE, IDS_MENUMERGE, IDS_MENUDESCMERGE,\r
ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, 0, 0, 0, 0, 0 },\r
- { ShellMenuMergeAll, MENUMERGEALL, IDI_MERGE, IDS_MENUMERGEALL, IDS_MENUDESCMERGEALL,\r
- ITEMIS_INSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED, ITEMIS_ADDED, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED, 0, 0, 0, 0, 0 },\r
+// { ShellMenuMergeAll, MENUMERGEALL, IDI_MERGE, IDS_MENUMERGEALL, IDS_MENUDESCMERGEALL,\r
+// ITEMIS_INSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED, ITEMIS_ADDED, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED, 0, 0, 0, 0, 0 },\r
\r
{ ShellMenuBranch, MENUCOPY, IDI_COPY, IDS_MENUBRANCH, IDS_MENUDESCCOPY,\r
ITEMIS_INSVN, 0, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 },\r
\r
{ ShellSeparator, 0, 0, 0, 0, 0, 0, 0, 0},\r
\r
+ { ShellMenuSubAdd, MENUSUBADD, IDI_ADD, IDS_MENUSUBADD, IDS_MENUSUBADD,\r
+ ITEMIS_INSVN, 0, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 },\r
+\r
+ { ShellMenuUpdateExt, MENUUPDATEEXT, IDI_UPDATE, IDS_MENUUPDATEEXT, IDS_MENUDESCUPDATEEXT,\r
+ ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_SUBMODULE, 0, 0, 0, 0, 0, 0, 0 },\r
+\r
+ { ShellMenuSubSync, MENUSUBSYNC, IDI_MENUSYNC, IDS_MENUSUBSYNC, IDS_MENUSUBSYNC,\r
+ ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_SUBMODULE|ITEMIS_EXTENDED, 0, 0, 0, 0, 0, 0, 0 },\r
+\r
+\r
+\r
+ { ShellSeparator, 0, 0, 0, 0, 0, 0, 0, 0},\r
+\r
// { ShellMenuCherryPick, MENUCHERRYPICK, IDI_CREATEPATCH, IDS_MENUCHERRYPICK, IDS_MENUDESCCREATEPATCH,\r
// ITEMIS_INSVN, ITEMIS_NORMAL, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 },\r
\r
ITEMIS_INSVN, ITEMIS_NORMAL, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 },\r
\r
{ ShellMenuImportPatch, MENUIMPORTPATCH, IDI_PATCH, IDS_MENUIMPORTPATCH, IDS_MENUDESCCREATEPATCH,\r
- ITEMIS_INSVN, ITEMIS_NORMAL, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 },\r
+ ITEMIS_INSVN, ITEMIS_NORMAL, ITEMIS_FOLDERINSVN, 0, ITEMIS_PATCHFILE, 0, 0, 0 },\r
\r
\r
{ ShellMenuCreatePatch, MENUCREATEPATCH, IDI_CREATEPATCH, IDS_MENUCREATEPATCH, IDS_MENUDESCCREATEPATCH,\r
- ITEMIS_INSVN, ITEMIS_NORMAL, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 },\r
+ ITEMIS_INSVN|ITEMIS_EXTENDED, ITEMIS_NORMAL, ITEMIS_FOLDERINSVN|ITEMIS_EXTENDED, 0, 0, 0, 0, 0 },\r
\r
{ ShellMenuApplyPatch, MENUAPPLYPATCH, IDI_PATCH, IDS_MENUAPPLYPATCH, IDS_MENUDESCAPPLYPATCH,\r
- ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_FOLDERINSVN, ITEMIS_ADDED, ITEMIS_ONLYONE|ITEMIS_PATCHFILE, 0, ITEMIS_FOLDERINSVN, ITEMIS_ADDED, 0, 0 },\r
+ ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_EXTENDED, ITEMIS_ADDED, ITEMIS_ONLYONE|ITEMIS_PATCHFILE, 0, ITEMIS_FOLDERINSVN|ITEMIS_EXTENDED, ITEMIS_ADDED, 0, 0 },\r
\r
- { ShellMenuProperties, MENUPROPERTIES, IDI_PROPERTIES, IDS_MENUPROPERTIES, IDS_MENUDESCPROPERTIES,\r
- ITEMIS_INSVN, 0, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 },\r
+ { ShellMenuSendMail, MENUSENDMAIL, IDI_MENUSENDMAIL, IDS_MENUSENDMAIL, IDS_MENUDESSENDMAIL,\r
+ ITEMIS_PATCHFILE, 0, 0, 0, 0, 0, 0, 0 },\r
+\r
+// { ShellMenuProperties, MENUPROPERTIES, IDI_PROPERTIES, IDS_MENUPROPERTIES, IDS_MENUDESCPROPERTIES,\r
+// ITEMIS_INSVN, 0, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 },\r
\r
{ ShellSeparator, 0, 0, 0, 0, 0, 0, 0, 0},\r
-// { ShellMenuClipPaste, MENUCLIPPASTE, IDI_CLIPPASTE, IDS_MENUCLIPPASTE, IDS_MENUDESCCLIPPASTE,\r
-// ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_PATHINCLIPBOARD, 0, 0, 0, 0, 0, 0, 0 },\r
+ { ShellMenuClipPaste, MENUCLIPPASTE, IDI_CLIPPASTE, IDS_MENUCLIPPASTE, IDS_MENUDESCCLIPPASTE,\r
+ ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_PATHINCLIPBOARD, 0, 0, 0, 0, 0, 0, 0 },\r
\r
{ ShellSeparator, 0, 0, 0, 0, 0, 0, 0, 0},\r
\r
\r
// TODO: should we really assume any sub-directory to be versioned\r
// or only if it contains versioned files\r
- if ( askedpath.IsDirectory() )\r
- {\r
- if (askedpath.HasAdminDir())\r
- itemStates |= ITEMIS_INSVN;\r
- }\r
- if ((status != git_wc_status_unversioned)&&(status != git_wc_status_ignored)&&(status != git_wc_status_none))\r
- itemStates |= ITEMIS_INSVN;\r
+ itemStates |= askedpath.GetAdminDirMask();\r
+ \r
+ if ((status == git_wc_status_unversioned) || (status == git_wc_status_ignored) || (status == git_wc_status_none))\r
+ itemStates &= ~ITEMIS_INSVN;\r
+\r
if (status == git_wc_status_ignored)\r
itemStates |= ITEMIS_IGNORED;\r
if (status == git_wc_status_normal)\r
}\r
}\r
\r
- // TODO: should we really assume any sub-directory to be versioned\r
- // or only if it contains versioned files\r
- if ( strpath.IsDirectory() )\r
- {\r
- if (strpath.HasAdminDir())\r
- itemStates |= ITEMIS_INSVN;\r
- }\r
- if ((status != git_wc_status_unversioned)&&(status != git_wc_status_ignored)&&(status != git_wc_status_none))\r
- itemStates |= ITEMIS_INSVN;\r
+ itemStates |= strpath.GetAdminDirMask(); \r
+ \r
+ if ((status == git_wc_status_unversioned)||(status == git_wc_status_ignored)||(status == git_wc_status_none))\r
+ itemStates &= ~ITEMIS_INSVN;\r
if (status == git_wc_status_ignored)\r
{\r
itemStates |= ITEMIS_IGNORED;\r
// }\r
// }\r
}\r
+ \r
if (status == git_wc_status_normal)\r
itemStates |= ITEMIS_NORMAL;\r
if (status == git_wc_status_conflicted)\r
}\r
\r
//if ((status != git_wc_status_unversioned)&&(status != git_wc_status_ignored)&&(status != git_wc_status_none))\r
- if (askedpath.HasAdminDir())\r
- itemStatesFolder |= ITEMIS_INSVN;\r
+ itemStatesFolder |= askedpath.GetAdminDirMask(); \r
+ \r
if (status == git_wc_status_normal)\r
itemStatesFolder |= ITEMIS_NORMAL;\r
if (status == git_wc_status_conflicted)\r
status = fetchedstatus;\r
}\r
//if ((status != git_wc_status_unversioned)&&(status != git_wc_status_ignored)&&(status != git_wc_status_none))\r
- if (askedpath.HasAdminDir())\r
- {\r
- itemStatesFolder |= ITEMIS_FOLDERINSVN;\r
- }\r
+ itemStatesFolder |= askedpath.GetAdminDirMask();\r
+ \r
if (status == git_wc_status_ignored)\r
itemStatesFolder |= ITEMIS_IGNORED;\r
itemStatesFolder |= ITEMIS_FOLDER;\r
itemStates |= ITEMIS_ONLYONE;\r
if (m_State != FileStateDropHandler)\r
itemStates |= itemStatesFolder;\r
+ \r
\r
}\r
if (files_.size() == 2)\r
status = fetchedstatus;\r
}\r
//if ((status != git_wc_status_unversioned)&&(status != git_wc_status_ignored)&&(status != git_wc_status_none))\r
- if (askedpath.HasAdminDir())\r
- itemStates |= ITEMIS_FOLDERINSVN;\r
+ itemStates |= askedpath.GetAdminDirMask();\r
+ \r
if (status == git_wc_status_ignored)\r
itemStates |= ITEMIS_IGNORED;\r
itemStates |= ITEMIS_FOLDER;\r
itemStates |= ITEMIS_ADDED;\r
if (status == git_wc_status_deleted)\r
itemStates |= ITEMIS_DELETED;\r
+\r
}\r
}\r
\r
\r
void CShellExt::InsertGitMenu(BOOL istop, HMENU menu, UINT pos, UINT_PTR id, UINT stringid, UINT icon, UINT idCmdFirst, GitCommands com, UINT uFlags)\r
{\r
- TCHAR menutextbuffer[255] = {0};\r
+ TCHAR menutextbuffer[512] = {0};\r
TCHAR verbsbuffer[255] = {0};\r
MAKESTRING(stringid);\r
\r
_tcscpy_s(menutextbuffer, 255, _T("Git "));\r
}\r
_tcscat_s(menutextbuffer, 255, stringtablebuffer);\r
- if ((fullver < 0x500)||(fullver == 0x500 && !(uFlags&~(CMF_RESERVED|CMF_EXPLORE))))\r
+#if 1\r
+ // insert branch name into "Git Commit..." entry, so it looks like "Git Commit "master"..."\r
+ // so we have an easy and fast way to check the current branch\r
+ // (the other alternative is using a separate disabled menu entry, the code is already done but commented out)\r
+ if (com == ShellMenuCommit)\r
+ {\r
+ // get branch name\r
+ CTGitPath path(folder_.empty() ? files_.front().c_str() : folder_.c_str());\r
+ CString sProjectRoot;\r
+ CString sBranchName;\r
+\r
+ if (path.HasAdminDir(&sProjectRoot) && !g_Git.GetCurrentBranchFromFile(sProjectRoot, sBranchName))\r
+ {\r
+ if (sBranchName.GetLength() == 40)\r
+ {\r
+ // if SHA1 only show 4 first bytes\r
+ BOOL bIsSha1 = TRUE;\r
+ for (int i=0; i<40; i++)\r
+ if ( !iswxdigit(sBranchName[i]) )\r
+ {\r
+ bIsSha1 = FALSE;\r
+ break;\r
+ }\r
+ if (bIsSha1)\r
+ sBranchName = sBranchName.Left(8) + _T("....");\r
+ }\r
+\r
+ // sanity check\r
+ if (sBranchName.GetLength() > 64)\r
+ sBranchName = sBranchName.Left(64) + _T("...");\r
+\r
+ // scan to before "..."\r
+ LPTSTR s = menutextbuffer + _tcslen(menutextbuffer)-1;\r
+ if (s > menutextbuffer)\r
+ {\r
+ while (s > menutextbuffer)\r
+ {\r
+ if (*s != _T('.'))\r
+ {\r
+ s++;\r
+ break;\r
+ }\r
+ s--;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ s = menutextbuffer;\r
+ }\r
+\r
+ // append branch name and end with ...\r
+ _tcscpy(s, _T(" -> \"") + sBranchName + _T("\"..."));\r
+ }\r
+ }\r
+#endif\r
+ if ((fullver < 0x500)||(fullver == 0x500 && !(uFlags&~(CMF_RESERVED|CMF_EXPLORE|CMF_EXTENDEDVERBS))))\r
{\r
// on win2k, the context menu does not work properly if we use\r
// icon bitmaps. At least the menu text is empty in the context menu\r
// ?? TSV disabled icons for win2k and earlier, but they work for win2k and should work for win95 and up\r
/*if (fullver <= 0x500)\r
bShowIcons = false;*/\r
+\r
+#if 0\r
+ if (itemStates & (ITEMIS_INSVN|ITEMIS_FOLDERINSVN))\r
+ {\r
+ // show current branch name (as a "read-only" menu entry)\r
+\r
+ CTGitPath path(folder_.empty() ? files_.front().c_str() : folder_.c_str());\r
+ CString sProjectRoot;\r
+ CString sBranchName;\r
+\r
+ if (path.HasAdminDir(&sProjectRoot) && !g_Git.GetCurrentBranchFromFile(sProjectRoot, sBranchName))\r
+ {\r
+ if (sBranchName.GetLength() == 40)\r
+ {\r
+ // if SHA1 only show 4 first bytes\r
+ BOOL bIsSha1 = TRUE;\r
+ for (int i=0; i<40; i++)\r
+ if ( !iswxdigit(sBranchName[i]) )\r
+ {\r
+ bIsSha1 = FALSE;\r
+ break;\r
+ }\r
+ if (bIsSha1)\r
+ sBranchName = sBranchName.Left(8) + _T("....");\r
+ }\r
+\r
+ sBranchName = _T('"') + sBranchName + _T('"');\r
+\r
+ const int icon = IDI_COPY;\r
+ const int pos = indexMenu++;\r
+ const int id = idCmd++;\r
+\r
+ if ((fullver < 0x500)||(fullver == 0x500 && !(uFlags&~(CMF_RESERVED|CMF_EXPLORE|CMF_EXTENDEDVERBS))))\r
+ {\r
+ InsertMenu(hMenu, pos, MF_DISABLED|MF_GRAYED|MF_BYPOSITION|MF_STRING, id, sBranchName);\r
+ HBITMAP bmp = IconToBitmap(icon); \r
+ SetMenuItemBitmaps(hMenu, pos, MF_BYPOSITION, bmp, bmp);\r
+ }\r
+ else\r
+ {\r
+ MENUITEMINFO menuiteminfo;\r
+ SecureZeroMemory(&menuiteminfo, sizeof(menuiteminfo));\r
+ menuiteminfo.cbSize = sizeof(menuiteminfo);\r
+ menuiteminfo.fMask = MIIM_FTYPE | MIIM_ID | MIIM_STRING | MIIM_STATE;\r
+ menuiteminfo.fState = MFS_DISABLED;\r
+ menuiteminfo.fType = MFT_STRING;\r
+ menuiteminfo.dwTypeData = (LPWSTR)sBranchName.GetString();\r
+ if (icon)\r
+ {\r
+ menuiteminfo.fMask |= MIIM_BITMAP;\r
+ menuiteminfo.hbmpItem = (fullver >= 0x600) ? IconToBitmapPARGB32(icon) : HBMMENU_CALLBACK;\r
+\r
+ if (menuiteminfo.hbmpItem == HBMMENU_CALLBACK)\r
+ {\r
+ // WM_DRAWITEM uses myIDMap to get icon, we use the same icon as create branch\r
+ myIDMap[id - idCmdFirst] = ShellMenuBranch;\r
+ myIDMap[id] = ShellMenuBranch;\r
+ }\r
+ }\r
+ menuiteminfo.wID = id;\r
+ InsertMenuItem(hMenu, pos, TRUE, &menuiteminfo);\r
+ }\r
+ }\r
+ }\r
+#endif\r
+\r
while (menuInfo[menuIndex].command != ShellMenuLastEntry)\r
{\r
if (menuInfo[menuIndex].command == ShellSeparator)\r
myIDMap[idCmd] = ShellSubMenu;\r
}\r
HBITMAP bmp = NULL;\r
- if ((fullver < 0x500)||(fullver == 0x500 && !(uFlags&~(CMF_RESERVED|CMF_EXPLORE))))\r
+ if ((fullver < 0x500)||(fullver == 0x500 && !(uFlags&~(CMF_RESERVED|CMF_EXPLORE|CMF_EXTENDEDVERBS))))\r
{\r
menuiteminfo.fMask = MIIM_STRING | MIIM_ID | MIIM_SUBMENU | MIIM_DATA;\r
if (uIcon)\r
switch (id_it->second)\r
{\r
//#region case\r
+ case ShellMenuSync:\r
+ svnCmd += _T("sync /path:\"");\r
+ svnCmd += folder_;\r
+ svnCmd += _T("\"");\r
+ break;\r
case ShellMenuCheckout:\r
svnCmd += _T("checkout /path:\"");\r
svnCmd += folder_;\r
svnCmd += _T("\"");\r
svnCmd += _T(" /deletepathfile");\r
break;\r
+ case ShellMenuSubSync:\r
+ tempfile = WriteFileListToTempFile();\r
+ svnCmd += _T("subsync /pathfile:\"");\r
+ svnCmd += tempfile;\r
+ svnCmd += _T("\"");\r
+ svnCmd += _T(" /deletepathfile");\r
+ if(itemStatesFolder&ITEMIS_SUBMODULE)\r
+ {\r
+ svnCmd += _T(" /bkpath:\"");\r
+ svnCmd += folder_;\r
+ svnCmd += _T("\"");\r
+ }\r
+ break;\r
case ShellMenuUpdateExt:\r
tempfile = WriteFileListToTempFile();\r
- svnCmd += _T("update /pathfile:\"");\r
+ svnCmd += _T("subupdate /pathfile:\"");\r
svnCmd += tempfile;\r
svnCmd += _T("\"");\r
svnCmd += _T(" /deletepathfile");\r
- svnCmd += _T(" /rev");\r
+ if(itemStatesFolder&ITEMIS_SUBMODULE)\r
+ {\r
+ svnCmd += _T(" /bkpath:\"");\r
+ svnCmd += folder_;\r
+ svnCmd += _T("\"");\r
+ }\r
break;\r
case ShellMenuCommit:\r
tempfile = WriteFileListToTempFile();\r
svnCmd += _T("\"");\r
svnCmd += _T(" /deletepathfile");\r
break;\r
+ case ShellMenuSendMail:\r
+ tempfile = WriteFileListToTempFile();\r
+ svnCmd += _T("sendmail /pathfile:\"");\r
+ svnCmd += tempfile;\r
+ svnCmd += _T("\"");\r
+ svnCmd += _T(" /deletepathfile");\r
+ break;\r
case ShellMenuResolve:\r
tempfile = WriteFileListToTempFile();\r
svnCmd += _T("resolve /pathfile:\"");\r
svnCmd += _T("\"");\r
break;\r
case ShellMenuSettings:\r
- svnCmd += _T("settings");\r
+ svnCmd += _T("settings /path:\"");\r
+ if (files_.size() > 0)\r
+ svnCmd += files_.front();\r
+ else\r
+ svnCmd += folder_;\r
+ svnCmd += _T("\"");\r
break;\r
case ShellMenuHelp:\r
svnCmd += _T("help");\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 ShellMenuGitSVNIgnore:\r
+ svnCmd += _T("svnignore /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
svnCmd += _T("\"");\r
}\r
break;\r
- case ShellMenuRepoBrowse:\r
- svnCmd += _T("repobrowser /path:\"");\r
+ case ShellMenuRefBrowse:\r
+ svnCmd += _T("refbrowse /path:\"");\r
+ if (files_.size() > 0)\r
+ svnCmd += files_.front();\r
+ else\r
+ svnCmd += folder_;\r
+ svnCmd += _T("\"");\r
+ break;\r
+ case ShellMenuRefLog:\r
+ svnCmd += _T("reflog /path:\"");\r
+ if (files_.size() > 0)\r
+ svnCmd += files_.front();\r
+ else\r
+ svnCmd += folder_;\r
+ svnCmd += _T("\"");\r
+ break;\r
+\r
+ case ShellMenuStashSave:\r
+ svnCmd += _T("stashsave /path:\"");\r
+ if (files_.size() > 0)\r
+ svnCmd += files_.front();\r
+ else\r
+ svnCmd += folder_;\r
+ svnCmd += _T("\"");\r
+ break;\r
+\r
+ case ShellMenuStashApply:\r
+ svnCmd += _T("stashapply /path:\"");\r
+ if (files_.size() > 0)\r
+ svnCmd += files_.front();\r
+ else\r
+ svnCmd += folder_;\r
+ svnCmd += _T("\"");\r
+ break;\r
+\r
+ case ShellMenuStashPop:\r
+ svnCmd += _T("stashpop /path:\"");\r
if (files_.size() > 0)\r
svnCmd += files_.front();\r
else\r
svnCmd += folder_;\r
svnCmd += _T("\"");\r
break;\r
+\r
+\r
+ case ShellMenuStashList:\r
+ svnCmd += _T("reflog /path:\"");\r
+ if (files_.size() > 0)\r
+ svnCmd += files_.front();\r
+ else\r
+ svnCmd += folder_;\r
+ svnCmd += _T("\" /ref:refs/stash");\r
+ break;\r
+\r
+ case ShellMenuSubAdd:\r
+ svnCmd += _T("subadd /path:\"");\r
+ if (files_.size() > 0)\r
+ svnCmd += files_.front();\r
+ else\r
+ svnCmd += folder_;\r
+ svnCmd += _T("\"");\r
+ break;\r
+\r
case ShellMenuBlame:\r
svnCmd += _T("blame /path:\"");\r
if (files_.size() > 0)\r
break;\r
\r
case ShellMenuImportPatch:\r
- svnCmd += _T("importpatch /path:\"");\r
- if (files_.size() > 0)\r
- svnCmd += files_.front();\r
- else\r
- svnCmd += folder_;\r
+ tempfile = WriteFileListToTempFile();\r
+ svnCmd += _T("importpatch /pathfile:\"");\r
+ svnCmd += tempfile;\r
svnCmd += _T("\"");\r
+ svnCmd += _T(" /deletepathfile");\r
break;\r
\r
case ShellMenuCherryPick:\r
MENUITEMINFO menuiteminfo;\r
SecureZeroMemory(&menuiteminfo, sizeof(menuiteminfo));\r
menuiteminfo.cbSize = sizeof(menuiteminfo);\r
- if (fullver < 0x500 || (fullver == 0x500 && !(uFlags&~(CMF_RESERVED|CMF_EXPLORE))))\r
+ if (fullver < 0x500 || (fullver == 0x500 && !(uFlags&~(CMF_RESERVED|CMF_EXPLORE|CMF_EXTENDEDVERBS))))\r
{\r
menuiteminfo.fMask = MIIM_STRING | MIIM_ID | MIIM_SUBMENU | MIIM_DATA;\r
if (icon)\r