//#include "RepositoryBrowser.h"\r
//#include "BrowseFolder.h"\r
#include "UnicodeUtils.h"\r
+#include "ExportDlg.h"\r
+#include "ProgressDlg.h"\r
+#include "GitAdminDir.h"\r
+#include "ProgressDlg.h"\r
+#include "BrowseFolder.h"\r
+#include "DirFileEnum.h"\r
+#include "MessageBox.h"\r
+#include "GitStatus.h"\r
+#include "CreateBranchTagDlg.h"\r
\r
CAppUtils::CAppUtils(void)\r
{\r
return CAppUtils::LaunchApplication(sCmd, NULL, false);\r
#endif\r
return true;\r
+}\r
+\r
+bool CAppUtils::Export(CString *BashHash)\r
+{\r
+ bool bRet = false;\r
+\r
+ // ask from where the export has to be done\r
+ CExportDlg dlg;\r
+ if(BashHash)\r
+ dlg.m_Revision=*BashHash;\r
+\r
+ if (dlg.DoModal() == IDOK)\r
+ {\r
+ CString cmd;\r
+ cmd.Format(_T("git.exe archive --format=zip %s"),\r
+ dlg.m_VersionName);\r
+\r
+ g_Git.RunLogFile(cmd,dlg.m_strExportDirectory);\r
+ //CProgressDlg pro;\r
+ //pro.m_GitCmd=cmd;\r
+ //pro.DoModal();\r
+ return TRUE;\r
+ }\r
+ return bRet;\r
+}\r
+\r
+bool CAppUtils::CreateBranchTag(bool IsTag,CString *CommitHash)\r
+{\r
+ CCreateBranchTagDlg dlg;\r
+ dlg.m_bIsTag=IsTag;\r
+ if(CommitHash)\r
+ dlg.m_Base = *CommitHash;\r
+\r
+ if(dlg.DoModal()==IDOK)\r
+ {\r
+ CString cmd;\r
+ CString force;\r
+ CString track;\r
+ if(dlg.m_bTrack)\r
+ track=_T("--track");\r
+\r
+ if(dlg.m_bForce)\r
+ force=_T("-f");\r
+\r
+ if(IsTag)\r
+ {\r
+ cmd.Format(_T("git.exe tag %s %s %s %s"),\r
+ track,\r
+ force,\r
+ dlg.m_BranchTagName,\r
+ dlg.m_Base\r
+ );\r
+\r
+ \r
+ }else\r
+ {\r
+ cmd.Format(_T("git.exe branch %s %s %s %s"),\r
+ track,\r
+ force,\r
+ dlg.m_BranchTagName,\r
+ dlg.m_Base\r
+ );\r
+ }\r
+ CString out;\r
+ if(g_Git.Run(cmd,&out))\r
+ {\r
+ CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK);\r
+ }\r
+ return TRUE;\r
+ \r
+ }\r
+ return FALSE;\r
}
\ No newline at end of file
const GitRev& peg = GitRev(), const GitRev& headpeg = GitRev(),\r
bool bAlternateDiff = false, bool ignoreancestry = false,\r
bool blame = false);\r
+ \r
+ static bool Export(CString *BashHash=NULL);\r
+ static bool CreateBranchTag(bool IsTag=TRUE,CString *CommitHash=NULL);\r
+\r
private:\r
static CString PickDiffTool(const CTGitPath& file1, const CTGitPath& file2);\r
static bool GetMimeType(const CTGitPath& file, CString& mimetype);\r
#include "DirFileEnum.h"\r
#include "ShellUpdater.h"\r
#include "CreateBranchTagDlg.h"\r
+#include "AppUtils.h"\r
\r
bool BranchCommand::Execute()\r
{\r
- CCreateBranchTagDlg dlg;\r
- dlg.m_bIsTag=FALSE;\r
- \r
- if(dlg.DoModal()==IDOK)\r
- {\r
- CString cmd;\r
- CString force;\r
- CString track;\r
- if(dlg.m_bTrack)\r
- track=_T("--track");\r
-\r
- if(dlg.m_bForce)\r
- force=_T("-f");\r
-\r
- cmd.Format(_T("git.exe branch %s %s %s %s"),\r
- track,\r
- force,\r
- dlg.m_BranchTagName,\r
- dlg.m_Base\r
- );\r
- CString out;\r
- if(g_Git.Run(cmd,&out))\r
- {\r
- CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK);\r
- }\r
- return TRUE;\r
- \r
- }\r
- return FALSE;\r
+ return CAppUtils::CreateBranchTag(FALSE);\r
}\r
#include "StdAfx.h"\r
#include "ExportCommand.h"\r
\r
-#include "ExportDlg.h"\r
-#include "ProgressDlg.h"\r
-#include "GitAdminDir.h"\r
-#include "ProgressDlg.h"\r
-#include "BrowseFolder.h"\r
-#include "DirFileEnum.h"\r
-#include "MessageBox.h"\r
-#include "GitStatus.h"\r
+#include "AppUtils.h"\r
\r
bool ExportCommand::Execute()\r
{\r
- bool bRet = false;\r
-\r
- // ask from where the export has to be done\r
- CExportDlg dlg;\r
- \r
- if (dlg.DoModal() == IDOK)\r
- {\r
- CString cmd;\r
- cmd.Format(_T("git.exe archive --format=zip --verbose %s >\"%s\""),\r
- dlg.m_VersionName,\r
- dlg.m_strExportDirectory);\r
- CProgressDlg pro;\r
- pro.m_GitCmd=cmd;\r
- pro.DoModal();\r
- return TRUE;\r
- }\r
- return bRet;\r
+ return CAppUtils::Export();\r
}\r
#include "Git.h"\r
#include "DirFileEnum.h"\r
#include "ShellUpdater.h"\r
+#include "AppUtils.h"\r
\r
bool TagCommand::Execute()\r
{\r
- CCreateBranchTagDlg dlg;\r
- dlg.m_bIsTag=TRUE;\r
- \r
- if(dlg.DoModal()==IDOK)\r
- {\r
- CString cmd;\r
- CString force;\r
- CString track;\r
- if(dlg.m_bTrack)\r
- track=_T("--track");\r
-\r
- if(dlg.m_bForce)\r
- force=_T("-f");\r
-\r
- cmd.Format(_T("git.exe tag %s %s %s %s"),\r
- track,\r
- force,\r
- dlg.m_BranchTagName,\r
- dlg.m_Base\r
- );\r
- CString out;\r
- if(g_Git.Run(cmd,&out))\r
- {\r
- CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK);\r
- }\r
- return TRUE;\r
- \r
- }\r
- return FALSE;\r
+ return CAppUtils::CreateBranchTag(TRUE);\r
}\r
AddAnchor(IDOK,BOTTOM_RIGHT);\r
AddAnchor(IDCANCEL,BOTTOM_RIGHT);\r
\r
+ if(m_Base.IsEmpty())\r
+ {\r
+ this->SetDefaultChoose(IDC_RADIO_HEAD);\r
+ \r
+ }else\r
+ {\r
+ this->SetDefaultChoose(IDC_RADIO_VERSION);\r
+ this->GetDlgItem(IDC_COMBOBOXEX_VERSION)->SetWindowTextW(m_Base);\r
+ }\r
\r
- this->SetDefaultChoose(IDC_RADIO_HEAD);\r
Init();\r
\r
this->GetDlgItem(IDC_CHECK_TRACK)->EnableWindow(FALSE);\r
\r
CHOOSE_VERSION_ADDANCHOR;\r
Init();\r
- SetDefaultChoose(IDC_RADIO_HEAD);\r
+ if(this->m_Revision.IsEmpty())\r
+ {\r
+ SetDefaultChoose(IDC_RADIO_HEAD);\r
+ }\r
+ else\r
+ {\r
+ SetDefaultChoose(IDC_RADIO_VERSION);\r
+ this->GetDlgItem(IDC_COMBOBOXEX_VERSION)->SetWindowTextW(m_Revision);\r
+ }\r
\r
m_tooltips.Create(this);\r
m_tooltips.AddTool(IDC_CHECKOUTDIRECTORY, IDS_CHECKOUT_TT_DIR);\r
}
popup.AppendMenuIcon(ID_GNUDIFF1, IDS_LOG_POPUP_GNUDIFF_CH, IDI_DIFF);
popup.AppendMenuIcon(ID_COMPAREWITHPREVIOUS, IDS_LOG_POPUP_COMPAREWITHPREVIOUS, IDI_DIFF);
- popup.AppendMenuIcon(ID_BLAMEWITHPREVIOUS, IDS_LOG_POPUP_BLAMEWITHPREVIOUS, IDI_BLAME);
+ //popup.AppendMenuIcon(ID_BLAMEWITHPREVIOUS, IDS_LOG_POPUP_BLAMEWITHPREVIOUS, IDI_BLAME);
popup.AppendMenu(MF_SEPARATOR, NULL);
}
// popup.AppendMenu(MF_SEPARATOR, NULL);
// }
-// popup.AppendMenuIcon(ID_REPOBROWSE, IDS_LOG_BROWSEREPO, IDI_REPOBROWSE);
-// popup.AppendMenuIcon(ID_COPY, IDS_LOG_POPUP_COPY);
-// if (m_hasWC)
-// popup.AppendMenuIcon(ID_UPDATE, IDS_LOG_POPUP_UPDATE, IDI_UPDATE);
- if (m_hasWC)
- popup.AppendMenuIcon(ID_REVERTTOREV, IDS_LOG_POPUP_REVERTTOREV, IDI_REVERT);
- if (m_hasWC)
- popup.AppendMenuIcon(ID_REVERTREV, IDS_LOG_POPUP_REVERTREV, IDI_REVERT);
-// if (m_hasWC)
-// popup.AppendMenuIcon(ID_MERGEREV, IDS_LOG_POPUP_MERGEREV, IDI_MERGE);
- popup.AppendMenuIcon(ID_CHECKOUT, IDS_MENUCHECKOUT, IDI_CHECKOUT);
- popup.AppendMenuIcon(ID_EXPORT, IDS_MENUEXPORT, IDI_EXPORT);
+ //if (m_hasWC)
+ // popup.AppendMenuIcon(ID_REVERTTOREV, IDS_LOG_POPUP_REVERTTOREV, IDI_REVERT);
+ //if (m_hasWC)
+ // popup.AppendMenuIcon(ID_REVERTREV, IDS_LOG_POPUP_REVERTREV, IDI_REVERT);
+ //if (m_hasWC)
+ // popup.AppendMenuIcon(ID_MERGEREV, IDS_LOG_POPUP_MERGEREV, IDI_MERGE);
+
+ popup.AppendMenuIcon(ID_SWITCHTOREV, _T("Switch/Checkout to this") , IDI_SWITCH);
+ popup.AppendMenuIcon(ID_CREATE_BRANCH, _T("Create Branch at this version") , IDI_COPY);
+ popup.AppendMenuIcon(ID_CREATE_TAG, _T("Create Tag at this version"), IDI_COPY);
+ popup.AppendMenuIcon(ID_CHERRY_PICK, _T("Cherry Pick this version"), IDI_EXPORT);
+ popup.AppendMenuIcon(ID_EXPORT, _T("Export this version"), IDI_EXPORT);
+
+
popup.AppendMenu(MF_SEPARATOR, NULL);
}
else if (GetSelectedCount() >= 2)
}
if (GetSelectedCount() == 2)
{
- popup.AppendMenuIcon(ID_BLAMETWO, IDS_LOG_POPUP_BLAMEREVS, IDI_BLAME);
+ //popup.AppendMenuIcon(ID_BLAMETWO, IDS_LOG_POPUP_BLAMEREVS, IDI_BLAME);
popup.AppendMenuIcon(ID_GNUDIFF2, IDS_LOG_POPUP_GNUDIFF, IDI_DIFF);
bAddSeparator = true;
}
if (m_hasWC)
{
- popup.AppendMenuIcon(ID_REVERTREV, IDS_LOG_POPUP_REVERTREVS, IDI_REVERT);
+ //popup.AppendMenuIcon(ID_REVERTREV, IDS_LOG_POPUP_REVERTREVS, IDI_REVERT);
// if (m_hasWC)
// popup.AppendMenuIcon(ID_MERGEREV, IDS_LOG_POPUP_MERGEREVS, IDI_MERGE);
bAddSeparator = true;
// popup.AppendMenu(MF_SEPARATOR, NULL);
// }
#endif
+
+
+ if (GetSelectedCount() == 1)
+ {
+ popup.AppendMenuIcon(ID_COPYHASH, _T("Copy Commit Hash"));
+ }
if (GetSelectedCount() != 0)
{
popup.AppendMenuIcon(ID_COPYCLIPBOARD, IDS_LOG_POPUP_COPYTOCLIPBOARD);
}
break;
+
+ case ID_COPYCLIPBOARD:
+ {
+ CopySelectionToClipBoard();
+ }
+ break;
+ case ID_COPYHASH:
+ {
+ CopySelectionToClipBoard(TRUE);
+ }
+ break;
+ case ID_EXPORT:
+ CAppUtils::Export(&pSelLogEntry->m_CommitHash);
+ break;
+ case ID_CREATE_BRANCH:
+ CAppUtils::CreateBranchTag(FALSE,&pSelLogEntry->m_CommitHash);
+ m_HashMap.clear();
+ g_Git.GetMapHashToFriendName(m_HashMap);
+ Invalidate();
+ break;
+ case ID_CREATE_TAG:
+ CAppUtils::CreateBranchTag(TRUE,&pSelLogEntry->m_CommitHash);
+ m_HashMap.clear();
+ g_Git.GetMapHashToFriendName(m_HashMap);
+ Invalidate();
+ break;
+ default:
+ CMessageBox::Show(NULL,_T("Have not implemented"),_T("TortoiseGit"),MB_OK);
+ break;
#if 0
case ID_GNUDIFF1:
{
dlg.DoModal();
}
break;
- case ID_COPYCLIPBOARD:
- {
- CopySelectionToClipBoard();
- }
- break;
+
case ID_EXPORT:
{
CString sCmd;
}
break;
#endif
- default:
- break;
+
} // switch (cmd)
theApp.DoWaitCursor(-1);
// EnableOKButton();
return bContinuous;
}
-void CGitLogList::CopySelectionToClipBoard()
+void CGitLogList::CopySelectionToClipBoard(bool HashOnly)
{
-#if 0
+
CString sClipdata;
POSITION pos = GetFirstSelectedItemPosition();
if (pos != NULL)
{
CString sLogCopyText;
CString sPaths;
- PLOGENTRYDATA pLogEntry = reinterpret_cast<PLOGENTRYDATA>(m_arShownList.GetAt(GetNextSelectedItem(pos)));
- LogChangedPathArray * cpatharray = pLogEntry->pArChangedPaths;
- for (INT_PTR cpPathIndex = 0; cpPathIndex<cpatharray->GetCount(); ++cpPathIndex)
+ GitRev * pLogEntry = reinterpret_cast<GitRev *>(m_arShownList.GetAt(GetNextSelectedItem(pos)));
+
+ if(!HashOnly)
{
- LogChangedPath * cpath = cpatharray->GetAt(cpPathIndex);
- sPaths += cpath->GetAction() + _T(" : ") + cpath->sPath;
- if (cpath->sCopyFromPath.IsEmpty())
- sPaths += _T("\r\n");
- else
+ //pLogEntry->m_Files
+ //LogChangedPathArray * cpatharray = pLogEntry->pArChangedPaths;
+
+ for (int cpPathIndex = 0; cpPathIndex<pLogEntry->m_Files.GetCount(); ++cpPathIndex)
{
- CString sCopyFrom;
- sCopyFrom.Format(_T(" (%s: %s, %s, %ld)\r\n"), CString(MAKEINTRESOURCE(IDS_LOG_COPYFROM)),
- (LPCTSTR)cpath->sCopyFromPath,
- (LPCTSTR)CString(MAKEINTRESOURCE(IDS_LOG_REVISION)),
- (LPCTSTR)cpath->lCopyFromRev);
- sPaths += sCopyFrom;
+ sPaths += ((CTGitPath&)pLogEntry->m_Files[cpPathIndex]).GetActionName() + _T(" : ") + pLogEntry->m_Files[cpPathIndex].GetGitPathString();
+ sPaths += _T("\r\n");
}
+ sPaths.Trim();
+ sLogCopyText.Format(_T("%s: %s\r\n%s: %s\r\n%s: %s\r\n%s:\r\n%s\r\n----\r\n%s\r\n\r\n"),
+ (LPCTSTR)sRev, pLogEntry->m_CommitHash,
+ (LPCTSTR)sAuthor, (LPCTSTR)pLogEntry->m_AuthorName,
+ (LPCTSTR)sDate, (LPCTSTR)pLogEntry->m_AuthorDate.Format(_T("%Y-%m-%d %H:%M")),
+ (LPCTSTR)sMessage, pLogEntry->m_Subject+_T("\r\n")+pLogEntry->m_Body,
+ (LPCTSTR)sPaths);
+ sClipdata += sLogCopyText;
+ }else
+ {
+ sClipdata += pLogEntry->m_CommitHash;
+ break;
}
- sPaths.Trim();
- sLogCopyText.Format(_T("%s: %d\r\n%s: %s\r\n%s: %s\r\n%s:\r\n%s\r\n----\r\n%s\r\n\r\n"),
- (LPCTSTR)sRev, pLogEntry->Rev,
- (LPCTSTR)sAuthor, (LPCTSTR)pLogEntry->sAuthor,
- (LPCTSTR)sDate, (LPCTSTR)pLogEntry->sDate,
- (LPCTSTR)sMessage, (LPCTSTR)pLogEntry->sMessage,
- (LPCTSTR)sPaths);
- sClipdata += sLogCopyText;
+
}
CStringUtils::WriteAsciiStringToClipboard(sClipdata, GetSafeHwnd());
}
-#endif
+
}
void CGitLogList::DiffSelectedRevWithPrevious()
ID_DIFF,\r
ID_OPENWITH,\r
ID_COPYCLIPBOARD,\r
+ ID_COPYHASH,\r
ID_CHECKOUT,\r
ID_REVERTTOREV,\r
ID_BLAMECOMPARE,\r
ID_COMPAREWITHPREVIOUS,\r
ID_BLAMEWITHPREVIOUS,\r
ID_GETMERGELOGS,\r
- ID_REVPROPS\r
+ ID_REVPROPS,\r
+ ID_CHERRY_PICK,\r
+ ID_CREATE_BRANCH,\r
+ ID_CREATE_TAG,\r
+ ID_SWITCHTOREV\r
};\r
void InsertGitColumn();\r
void ResizeAllListCtrlCols();\r
- void CopySelectionToClipBoard();\r
+ void CopySelectionToClipBoard(bool hashonly=FALSE);\r
void DiffSelectedRevWithPrevious();\r
bool IsSelectionContinuous();\r
int FillGitLog();\r
>\r
</File>\r
<File\r
- RelativePath=".\explorer.ico"\r
+ RelativePath="..\Resources\explorer.ico"\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\explorer.ico"\r
+ RelativePath=".\explorer.ico"\r
>\r
</File>\r
<File\r
>\r
</File>\r
<File\r
- RelativePath=".\newfolder.ico"\r
+ RelativePath="..\Resources\newfolder.ico"\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\newfolder.ico"\r
+ RelativePath=".\newfolder.ico"\r
>\r
</File>\r
<File\r
- RelativePath=".\open.ico"\r
+ RelativePath="..\Resources\open.ico"\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\open.ico"\r
+ RelativePath=".\open.ico"\r
>\r
</File>\r
<File\r
>\r
</File>\r
<File\r
- RelativePath=".\save.ico"\r
+ RelativePath="..\Resources\save.ico"\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\save.ico"\r
+ RelativePath=".\save.ico"\r
>\r
</File>\r
<File\r
- RelativePath=".\saveas.ico"\r
+ RelativePath="..\Resources\saveas.ico"\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\saveas.ico"\r
+ RelativePath=".\saveas.ico"\r
>\r
</File>\r
<File\r
>\r
</File>\r
<File\r
- RelativePath=".\up.ico"\r
+ RelativePath="..\Resources\up.ico"\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\up.ico"\r
+ RelativePath=".\up.ico"\r
>\r
</File>\r
<File\r
\r
STRINGTABLE \r
BEGIN\r
- IDS_MENUCHECKOUT "Chec&kout..."\r
+ IDS_MENUCHECKOUT "Switch/Chec&kout..."\r
IDS_MENUUPDATE "&Update"\r
IDS_MENUCOMMIT "&Commit..."\r
IDS_MENUCREATEREPOS "Create repositor&y here"\r
IDS_MENUREVERT "Re&vert..."\r
IDS_MENUCLEANUP "&Clean up"\r
IDS_MENURESOLVE "Res&olved..."\r
+ IDS_MENUSWITCH_HERE "Switch/Checkout to here"\r
+ IDS_MENUSWITCH "Switch/Checkout"\r
+ IDS_MENUCHERRYPICK_HERE "Cherry Pick This Version" \r
+ IDS_MENUCHERRYPICK "Cherry Pick"\r
END\r
\r
STRINGTABLE \r
BEGIN\r
IDS_MENUSWITCH "S&witch..."\r
IDS_MENUMERGE "&Merge..."\r
- IDS_MENUBRANCH "Branch/&tag..."\r
+ IDS_MENUBRANCH "Create Branch"\r
+ IDS_MENUBRANCH_HERE "Create Branch at here"\r
+ IDS_MENUTAG "Create Tag"\r
+ IDS_MENUTAG_HERE "Create Tag at here"\r
IDS_MENUIMPORT "&Import..."\r
IDS_MENUEXPORT "E&xport..."\r
+ IDS_MENUEXPORT_HERE "Export at here"\r
IDS_MENUSETTINGS "&Settings"\r
IDS_MENUABOUT "A&bout"\r
IDS_MENUSUBMENU "&TortoiseGit"\r
<Configurations>\r
<Configuration\r
Name="Debug|Win32"\r
- OutputDirectory="..\bin\Debug\bin"\r
- IntermediateDirectory="..\obj\TortoiseUDiff\Debug"\r
+ OutputDirectory="..\..\bin\Debug\bin"\r
+ IntermediateDirectory="..\..\obj\TortoiseUDiff\Debug"\r
ConfigurationType="1"\r
CharacterSet="1"\r
>\r