#include "MessageBox.h"\r
#include "GitStatus.h"\r
#include "CreateBranchTagDlg.h"\r
+#include "GitSwitchDlg.h"\r
\r
CAppUtils::CAppUtils(void)\r
{\r
\r
}\r
return FALSE;\r
+}\r
+\r
+bool CAppUtils::Switch(CString *CommitHash)\r
+{\r
+ CGitSwitchDlg dlg;\r
+ if(CommitHash)\r
+ dlg.m_Base=*CommitHash;\r
+ \r
+ if (dlg.DoModal() == IDOK)\r
+ {\r
+ CString cmd;\r
+ CString track;\r
+ CString base;\r
+ CString force;\r
+ CString branch;\r
+\r
+ if(dlg.m_bBranch)\r
+ branch.Format(_T("-b %s"),dlg.m_NewBranch);\r
+ if(dlg.m_bForce)\r
+ force=_T("-f");\r
+ if(dlg.m_bTrack)\r
+ track=_T("--track");\r
+\r
+ cmd.Format(_T("git.exe checkout %s %s %s %s"),\r
+ force,\r
+ track,\r
+ branch,\r
+ dlg.m_Base);\r
+\r
+ CProgressDlg progress;\r
+ progress.m_GitCmd=cmd;\r
+ if(progress.DoModal()==IDOK)\r
+ return TRUE;\r
+\r
+ }\r
+ return FALSE;\r
}
\ No newline at end of file
\r
static bool Export(CString *BashHash=NULL);\r
static bool CreateBranchTag(bool IsTag=TRUE,CString *CommitHash=NULL);\r
+ static bool Switch(CString *CommitHash);\r
\r
private:\r
static CString PickDiffTool(const CTGitPath& file1, const CTGitPath& file2);\r
#include "GitSwitchDlg.h"\r
#include "ProgressDlg.h"\r
#include "MessageBox.h"\r
+#include "AppUtils.h"\r
\r
bool SwitchCommand::Execute()\r
{\r
- CGitSwitchDlg dlg;\r
- \r
- if (dlg.DoModal() == IDOK)\r
- {\r
- CString cmd;\r
- CString track;\r
- CString base;\r
- CString force;\r
- CString branch;\r
-\r
- if(dlg.m_bBranch)\r
- branch.Format(_T("-b %s"),dlg.m_NewBranch);\r
- if(dlg.m_bForce)\r
- force=_T("-f");\r
- if(dlg.m_bTrack)\r
- track=_T("--track");\r
-\r
- cmd.Format(_T("git.exe checkout %s %s %s %s"),\r
- force,\r
- track,\r
- branch,\r
- dlg.m_Base);\r
-\r
- CProgressDlg progress;\r
- progress.m_GitCmd=cmd;\r
- if(progress.DoModal()==IDOK)\r
- return TRUE;\r
-\r
- }\r
- return false;\r
+ return CAppUtils::CreateBranchTag(NULL);\r
}\r
#include "BrowseFolder.h"\r
#include "RevisionDlg.h"\r
#include ".\filediffdlg.h"\r
+#include "gitdiff.h"\r
\r
#define ID_COMPARE 1\r
#define ID_BLAME 2\r
\r
}\r
\r
-#if 0\r
-void CFileDiffDlg::SetDiff(const CTGitPath& path1, GitRev rev1, const CTGitPath& path2, GitRev rev2, svn_depth_t depth, bool ignoreancestry)\r
-{\r
- m_bDoPegDiff = false;\r
- m_path1 = path1;\r
- m_path2 = path2;\r
- m_rev1 = rev1;\r
- m_rev2 = rev2;\r
- m_depth = depth;\r
- m_bIgnoreancestry = ignoreancestry;\r
-}\r
-#endif\r
-\r
BOOL CFileDiffDlg::OnInitDialog()\r
{\r
CResizableStandAloneDialog::OnInitDialog();\r
#endif\r
CString cmd;\r
CString rev1=m_rev1.m_CommitHash;\r
- if(this->m_rev1.m_CommitHash == GIT_REV_ZERO )\r
+ if(this->m_rev1.m_CommitHash == GIT_REV_ZERO || this->m_rev2.m_CommitHash == GIT_REV_ZERO)\r
{\r
rev1=+_T("");\r
+ if(this->m_rev1.m_CommitHash == GIT_REV_ZERO)\r
+ cmd.Format(_T("git.exe diff -r --raw -C -M --numstat %s"),m_rev2.m_CommitHash);\r
+ else\r
+ cmd.Format(_T("git.exe diff -r -R --raw -C -M --numstat %s"),m_rev1.m_CommitHash);\r
+ }else\r
+ {\r
+ cmd.Format(_T("git.exe diff-tree -r --raw -C -M --numstat %s %s"),rev1,m_rev2.m_CommitHash);\r
}\r
- cmd.Format(_T("git.cmd diff-tree -r --raw -C -M --numstat %s %s"),rev1,m_rev2.m_CommitHash);\r
CString out;\r
g_Git.Run(cmd,&out);\r
this->m_arFileList.ParserFromLog(out);\r
\r
void CFileDiffDlg::DoDiff(int selIndex, bool blame)\r
{\r
+\r
+ CGitDiff diff;\r
+ CTGitPath* fd = m_arFilteredList[selIndex];\r
+ diff.Diff(fd, this->m_rev1.m_CommitHash, this->m_rev2.m_CommitHash, blame, FALSE);\r
+\r
#if 0\r
CFileDiffDlg::CTGitPath* fd = m_arFilteredList[selIndex];\r
\r
\r
void CFileDiffDlg::OnLvnGetInfoTipFilelist(NMHDR *pNMHDR, LRESULT *pResult)\r
{\r
-#if 0\r
+\r
LPNMLVGETINFOTIP pGetInfoTip = reinterpret_cast<LPNMLVGETINFOTIP>(pNMHDR);\r
if (pGetInfoTip->iItem >= (int)m_arFilteredList.size())\r
return;\r
\r
- CString path = m_path1.GetGitPathString() + _T("/") + m_arFilteredList[pGetInfoTip->iItem].path.GetGitPathString();\r
+ CString path = m_path1.GetGitPathString() + _T("/") + m_arFilteredList[pGetInfoTip->iItem]->GetGitPathString();\r
if (pGetInfoTip->cchTextMax > path.GetLength())\r
_tcsncpy_s(pGetInfoTip->pszText, pGetInfoTip->cchTextMax, path, pGetInfoTip->cchTextMax);\r
-#endif\r
+\r
*pResult = 0;\r
}\r
\r
temp.LoadString(IDS_LOG_POPUP_COMPARETWO);\r
popup.AppendMenu(MF_STRING | MF_ENABLED, ID_COMPARE, temp);\r
temp.LoadString(IDS_FILEDIFF_POPBLAME);\r
- popup.AppendMenu(MF_STRING | MF_ENABLED, ID_BLAME, temp);\r
+ //popup.AppendMenu(MF_STRING | MF_ENABLED, ID_BLAME, temp);\r
popup.AppendMenu(MF_SEPARATOR, NULL);\r
temp.LoadString(IDS_FILEDIFF_POPSAVELIST);\r
popup.AppendMenu(MF_STRING | MF_ENABLED, ID_SAVEAS, temp);\r
temp.LoadString(IDS_FILEDIFF_POPCLIPBOARD);\r
popup.AppendMenu(MF_STRING | MF_ENABLED, ID_CLIPBOARD, temp);\r
temp.LoadString(IDS_FILEDIFF_POPEXPORT);\r
- popup.AppendMenu(MF_STRING | MF_ENABLED, ID_EXPORT, temp);\r
+ //popup.AppendMenu(MF_STRING | MF_ENABLED, ID_EXPORT, temp);\r
int cmd = popup.TrackPopupMenu(TPM_RETURNCMD | TPM_LEFTALIGN | TPM_NONOTIFY, point.x, point.y, this, 0);\r
m_bCancelled = false;\r
switch (cmd)\r
break;\r
case ID_EXPORT:\r
{\r
+#if 0 //this funcation seem no useful\r
// export all changed files to a folder\r
CBrowseFolder browseFolder;\r
browseFolder.m_style = BIF_EDITBOX | BIF_NEWDIALOGSTYLE | BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;\r
CMessageBox::Show(NULL, IDS_ERR_THREADSTARTFAILED, IDS_APPNAME, MB_OK | MB_ICONERROR);\r
}\r
}\r
+#endif; \r
}\r
+\r
break;\r
+\r
}\r
}\r
}\r
\r
void CFileDiffDlg::OnBnClickedSwitchleftright()\r
{\r
-#if 0\r
+\r
if (m_bThreadRunning)\r
return;\r
CString sFilterString;\r
\r
m_cFileList.SetRedraw(false);\r
m_cFileList.DeleteAllItems();\r
- for (int i=0; i<(int)m_arFileList.size(); ++i)\r
+ for (int i=0; i<(int)m_arFileList.GetCount(); ++i)\r
{\r
CTGitPath fd = m_arFileList[i];\r
- if (fd.kind == svn_client_diff_summarize_kind_added)\r
- fd.kind = svn_client_diff_summarize_kind_deleted;\r
- else if (fd.kind == svn_client_diff_summarize_kind_deleted)\r
- fd.kind = svn_client_diff_summarize_kind_added;\r
- m_arFileList[i] = fd;\r
+ if (fd.m_Action == CTGitPath::LOGACTIONS_ADDED)\r
+ fd.m_Action = CTGitPath::LOGACTIONS_DELETED;\r
+ else if (fd.m_Action == CTGitPath::LOGACTIONS_DELETED)\r
+ fd.m_Action = CTGitPath::LOGACTIONS_ADDED;\r
+ ( CTGitPath)m_arFileList[i] = ( CTGitPath)fd;\r
}\r
Filter(sFilterString);\r
\r
m_rev1 = m_rev2;\r
m_rev2 = rev;\r
SetURLLabels();\r
-#endif\r
+\r
}\r
\r
void CFileDiffDlg::SetURLLabels()\r
lf.lfWeight = FW_BOLD;
m_boldFont = CreateFontIndirect(&lf);
+ m_wcRev.m_CommitHash=GIT_REV_ZERO;
+ m_wcRev.m_Subject=_T("Working Copy");
+
m_hModifiedIcon = (HICON)LoadImage(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ACTIONMODIFIED), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE);
m_hReplacedIcon = (HICON)LoadImage(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ACTIONREPLACED), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE);
m_hAddedIcon = (HICON)LoadImage(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ACTIONADDED), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE);
}
break;
-
+ case ID_COMPARE:
+ {
+ GitRev * r1 = &m_wcRev;
+ GitRev * r2 = pSelLogEntry;
+ CFileDiffDlg dlg;
+ dlg.SetDiff(NULL,*r1,*r2);
+ dlg.DoModal();
+
+ //user clicked on the menu item "compare with working copy"
+ //if (PromptShown())
+ //{
+ // GitDiff diff(this, m_hWnd, true);
+ // diff.SetAlternativeTool(!!(GetAsyncKeyState(VK_SHIFT) & 0x8000));
+ // diff.SetHEADPeg(m_LogRevision);
+ // diff.ShowCompare(m_path, GitRev::REV_WC, m_path, revSelected);
+ //}
+ //else
+ // CAppUtils::StartShowCompare(m_hWnd, m_path, GitRev::REV_WC, m_path, revSelected, GitRev(), m_LogRevision, !!(GetAsyncKeyState(VK_SHIFT) & 0x8000));
+ }
+ break;
case ID_COPYCLIPBOARD:
{
CopySelectionToClipBoard();
g_Git.GetMapHashToFriendName(m_HashMap);
Invalidate();
break;
+ case ID_SWITCHTOREV:
+ CAppUtils::Switch(&pSelLogEntry->m_CommitHash);
+ break;
+
default:
CMessageBox::Show(NULL,_T("Have not implemented"),_T("TortoiseGit"),MB_OK);
}
}
break;
- case ID_COMPARE:
- {
- //user clicked on the menu item "compare with working copy"
- if (PromptShown())
- {
- GitDiff diff(this, m_hWnd, true);
- diff.SetAlternativeTool(!!(GetAsyncKeyState(VK_SHIFT) & 0x8000));
- diff.SetHEADPeg(m_LogRevision);
- diff.ShowCompare(m_path, GitRev::REV_WC, m_path, revSelected);
- }
- else
- CAppUtils::StartShowCompare(m_hWnd, m_path, GitRev::REV_WC, m_path, revSelected, GitRev(), m_LogRevision, !!(GetAsyncKeyState(VK_SHIFT) & 0x8000));
- }
- break;
+
case ID_COMPARETWO:
{
GitRev r1 = revSelected;
\r
CHOOSE_VERSION_ADDANCHOR;\r
Init();\r
- SetDefaultChoose(IDC_RADIO_BRANCH);\r
+\r
+ if(m_Base.IsEmpty())\r
+ SetDefaultChoose(IDC_RADIO_BRANCH);\r
+ else\r
+ {\r
+ this->GetDlgItem(IDC_COMBOBOXEX_VERSION)->SetWindowTextW(m_Base);\r
+ SetDefaultChoose(IDC_RADIO_VERSION);\r
+ }\r
\r
OnBnClickedCheckBranch();\r
this->GetDlgItem(IDC_CHECK_TRACK)->EnableWindow(FALSE);\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\explorer.ico"\r
+ RelativePath=".\explorer.ico"\r
>\r
</File>\r
<File\r
- RelativePath=".\explorer.ico"\r
+ RelativePath="..\Resources\explorer.ico"\r
>\r
</File>\r
<File\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\newfolder.ico"\r
+ RelativePath=".\newfolder.ico"\r
>\r
</File>\r
<File\r
- RelativePath=".\newfolder.ico"\r
+ RelativePath="..\Resources\newfolder.ico"\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\open.ico"\r
+ RelativePath=".\open.ico"\r
>\r
</File>\r
<File\r
- RelativePath=".\open.ico"\r
+ RelativePath="..\Resources\open.ico"\r
>\r
</File>\r
<File\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\save.ico"\r
+ RelativePath=".\save.ico"\r
>\r
</File>\r
<File\r
- RelativePath=".\save.ico"\r
+ RelativePath="..\Resources\save.ico"\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\saveas.ico"\r
+ RelativePath=".\saveas.ico"\r
>\r
</File>\r
<File\r
- RelativePath=".\saveas.ico"\r
+ RelativePath="..\Resources\saveas.ico"\r
>\r
</File>\r
<File\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\up.ico"\r
+ RelativePath=".\up.ico"\r
>\r
</File>\r
<File\r
- RelativePath=".\up.ico"\r
+ RelativePath="..\Resources\up.ico"\r
>\r
</File>\r
<File\r