From 54a53ee612de1b1c5c2c9e4a964a61ee683f8056 Mon Sep 17 00:00:00 2001 From: Sven Strickroth Date: Sun, 24 Feb 2013 17:27:42 +0100 Subject: [PATCH] Log: Support arbitrary revisions Signed-off-by: Sven Strickroth --- src/Git/Git.cpp | 17 ++-------- src/Git/Git.h | 4 +-- src/TortoiseGitBlame/OutputWnd.cpp | 2 +- src/TortoiseGitBlame/TortoiseGitBlameDoc.cpp | 9 +++-- src/TortoiseProc/BrowseRefsDlg.cpp | 2 +- src/TortoiseProc/Commands/LogCommand.cpp | 12 ++++++- src/TortoiseProc/Commands/PullCommand.cpp | 2 +- src/TortoiseProc/Commands/SVNFetchCommand.cpp | 2 +- src/TortoiseProc/GitLogListAction.cpp | 4 ++- src/TortoiseProc/GitLogListBase.cpp | 26 +++++---------- src/TortoiseProc/GitLogListBase.h | 14 +++----- src/TortoiseProc/LogDataVector.cpp | 10 +++--- src/TortoiseProc/LogDlg.cpp | 38 +++++----------------- src/TortoiseProc/LogDlg.h | 8 ++--- src/TortoiseProc/LogDlgHelper.h | 5 ++- src/TortoiseProc/RebaseDlg.cpp | 7 ++-- .../RevisionGraph/RevisionGraphDlgFunc.cpp | 12 ++++--- src/TortoiseProc/SyncDlg.cpp | 18 +++++----- 18 files changed, 78 insertions(+), 114 deletions(-) diff --git a/src/Git/Git.cpp b/src/Git/Git.cpp index bd1fac675..6b8400a8b 100644 --- a/src/Git/Git.cpp +++ b/src/Git/Git.cpp @@ -782,7 +782,7 @@ int CGit::BuildOutputFormat(CString &format,bool IsFull) return 0; } -CString CGit::GetLogCmd( const CString &hash, CTGitPath *path, int count, int mask,CString *from,CString *to,bool paramonly, +CString CGit::GetLogCmd(CString &range, CTGitPath *path, int count, int mask, bool paramonly, CFilterData *Filter) { CString cmd; @@ -837,20 +837,7 @@ CString CGit::GetLogCmd( const CString &hash, CTGitPath *path, int count, int ma if(mask& CGit::LOG_INFO_SIMPILFY_BY_DECORATION) param += _T(" --simplify-by-decoration "); - if(from != NULL && to != NULL) - { - CString range; - range.Format(_T(" %s..%s "),FixBranchName(*from),FixBranchName(*to)); - param += range; - } - else if(to != NULL && hash.IsEmpty()) - { - CString range; - range.Format(_T(" %s "), FixBranchName(*to)); - param += range; - } - else - param += hash; + param += range; CString st1,st2; diff --git a/src/Git/Git.h b/src/Git/Git.h index ab71560c9..b1653593d 100644 --- a/src/Git/Git.h +++ b/src/Git/Git.h @@ -276,9 +276,7 @@ public: CString FixBranchName_Mod(CString& branchName); CString FixBranchName(const CString& branchName); - CString GetLogCmd(const CString &hash, CTGitPath *path = NULL,int count=-1,int InfoMask=LOG_INFO_FULL_DIFF|LOG_INFO_STAT|LOG_INFO_FILESTATE|LOG_INFO_BOUNDARY|LOG_INFO_DETECT_COPYRENAME|LOG_INFO_SHOW_MERGEDFILE, - CString *from=NULL,CString *to=NULL, bool paramonly=false, - CFilterData * filter =NULL); + CString GetLogCmd(CString &range, CTGitPath *path = NULL, int count=-1, int InfoMask = LOG_INFO_FULL_DIFF|LOG_INFO_STAT|LOG_INFO_FILESTATE|LOG_INFO_BOUNDARY|LOG_INFO_DETECT_COPYRENAME|LOG_INFO_SHOW_MERGEDFILE, bool paramonly=false, CFilterData * filter =NULL); int GetHash(CGitHash &hash, TCHAR* friendname); int GetHash(CGitHash &hash, CString ref) { return GetHash(hash, ref.GetBuffer()); } diff --git a/src/TortoiseGitBlame/OutputWnd.cpp b/src/TortoiseGitBlame/OutputWnd.cpp index 2f6a336a9..1fdc5c612 100644 --- a/src/TortoiseGitBlame/OutputWnd.cpp +++ b/src/TortoiseGitBlame/OutputWnd.cpp @@ -124,7 +124,7 @@ int COutputWnd::LoadHistory(CString filename, CString revision, bool follow) path.SetFromGit(filename); m_LogList.Clear(); - if (m_LogList.FillGitLog(&path, follow ? CGit::LOG_INFO_FOLLOW : 0, NULL, &revision)) + if (m_LogList.FillGitLog(&path, &revision, follow ? CGit::LOG_INFO_FOLLOW : 0)) return -1; m_LogList.UpdateProjectProperties(); return 0; diff --git a/src/TortoiseGitBlame/TortoiseGitBlameDoc.cpp b/src/TortoiseGitBlame/TortoiseGitBlameDoc.cpp index a7d1cd283..6d9d5e863 100644 --- a/src/TortoiseGitBlame/TortoiseGitBlameDoc.cpp +++ b/src/TortoiseGitBlame/TortoiseGitBlameDoc.cpp @@ -154,12 +154,7 @@ BOOL CTortoiseGitBlameDoc::OnOpenDocument(LPCTSTR lpszPathName,CString Rev) return FALSE; } - m_GitPath = path; - if (GetMainFrame()->m_wndOutput.LoadHistory(path.GetGitPathString(), m_Rev, (theApp.GetInt(_T("FollowRenames"), 0) == 1))) - return FALSE; - CString cmd; - cmd.Format(_T("git.exe blame -s -l %s -- \"%s\""),Rev,path.GetGitPathString()); m_BlameData.clear(); BYTE_VECTOR err; @@ -193,6 +188,10 @@ BOOL CTortoiseGitBlameDoc::OnOpenDocument(LPCTSTR lpszPathName,CString Rev) return FALSE; } + m_GitPath = path; + if (GetMainFrame()->m_wndOutput.LoadHistory(path.GetGitPathString(), m_Rev, (theApp.GetInt(_T("FollowRenames"), 0) == 1))) + return FALSE; + CTortoiseGitBlameView *pView=DYNAMIC_DOWNCAST(CTortoiseGitBlameView,GetMainFrame()->GetActiveView()); if(pView == NULL) { diff --git a/src/TortoiseProc/BrowseRefsDlg.cpp b/src/TortoiseProc/BrowseRefsDlg.cpp index 2359fbcb3..fed17748f 100644 --- a/src/TortoiseProc/BrowseRefsDlg.cpp +++ b/src/TortoiseProc/BrowseRefsDlg.cpp @@ -953,7 +953,7 @@ void CBrowseRefsDlg::ShowContextMenu(CPoint point, HTREEITEM hTreePos, VectorPSh case eCmd_ViewLog: { CLogDlg dlg; - dlg.SetStartRef(selectedLeafs[0]->GetRefName()); + dlg.SetRange(g_Git.FixBranchName(selectedLeafs[0]->GetRefName())); dlg.DoModal(); } break; diff --git a/src/TortoiseProc/Commands/LogCommand.cpp b/src/TortoiseProc/Commands/LogCommand.cpp index 0585bc8ce..7ddd0efa6 100644 --- a/src/TortoiseProc/Commands/LogCommand.cpp +++ b/src/TortoiseProc/Commands/LogCommand.cpp @@ -27,12 +27,18 @@ bool LogCommand::Execute() //the log command line looks like this: //command:log path: [startrev:] [endrev:] + CString range; + CString revstart = parser.GetVal(_T("startrev")); if (revstart.IsEmpty()) { // support deprecated parameter prior 1.5.0 revstart = parser.GetVal(_T("revstart")); } + if (revstart == GIT_REV_ZERO) + revstart.Empty(); + if (!revstart.IsEmpty()) + range.Format(_T("%s.."), g_Git.FixBranchName(revstart)); CString revend = parser.GetVal(_T("endrev")); if (revend.IsEmpty()) @@ -40,6 +46,10 @@ bool LogCommand::Execute() // support deprecated parameter prior 1.5.0 revend = parser.GetVal(_T("revend")); } + if (revend == GIT_REV_ZERO) + revend.Empty(); + if (!revend.IsEmpty()) + range += g_Git.FixBranchName(revend); CString val = parser.GetVal(_T("limit")); int limit = _tstoi(val); @@ -61,7 +71,7 @@ bool LogCommand::Execute() CLogDlg dlg; theApp.m_pMainWnd = &dlg; - dlg.SetParams(orgCmdLinePath, cmdLinePath, rev, revstart, revend, limit); + dlg.SetParams(orgCmdLinePath, cmdLinePath, rev, range, limit); dlg.SetFilter(findStr, findType, findRegex); dlg.DoModal(); if (parser.HasVal(_T("outfile"))) diff --git a/src/TortoiseProc/Commands/PullCommand.cpp b/src/TortoiseProc/Commands/PullCommand.cpp index 4eca21ce0..076d9cacc 100644 --- a/src/TortoiseProc/Commands/PullCommand.cpp +++ b/src/TortoiseProc/Commands/PullCommand.cpp @@ -147,7 +147,7 @@ bool PullCommand::Execute() CLogDlg dlg; //dlg.SetParams(cmdLinePath); - dlg.SetParams(CTGitPath(_T("")),CTGitPath(_T("")),_T(""), hashOld, hashNew, 0); + dlg.SetParams(CTGitPath(_T("")), CTGitPath(_T("")), _T(""), hashOld.ToString() + _T("..") + hashNew.ToString(), 0); // dlg.SetIncludeMerge(!!parser.HasKey(_T("merge"))); // val = parser.GetVal(_T("propspath")); // if (!val.IsEmpty()) diff --git a/src/TortoiseProc/Commands/SVNFetchCommand.cpp b/src/TortoiseProc/Commands/SVNFetchCommand.cpp index c3d7d71f9..7bf637053 100644 --- a/src/TortoiseProc/Commands/SVNFetchCommand.cpp +++ b/src/TortoiseProc/Commands/SVNFetchCommand.cpp @@ -82,7 +82,7 @@ bool SVNFetchCommand::Execute() } CLogDlg dlg; - dlg.SetParams(CTGitPath(_T("")), CTGitPath(_T("")), _T(""), upstreamOldHash, upstreamNewHash, 0); + dlg.SetParams(CTGitPath(_T("")), CTGitPath(_T("")), _T(""), upstreamOldHash.ToString() + _T("..") + upstreamNewHash.ToString(), 0); dlg.DoModal(); return true; } diff --git a/src/TortoiseProc/GitLogListAction.cpp b/src/TortoiseProc/GitLogListAction.cpp index 0590f9801..6d67feea7 100644 --- a/src/TortoiseProc/GitLogListAction.cpp +++ b/src/TortoiseProc/GitLogListAction.cpp @@ -138,7 +138,9 @@ int CGitLogList::RevertSelectedCommits(int parent) int CGitLogList::CherryPickFrom(CString from, CString to) { CLogDataVector logs(&m_LogCache); - if(logs.ParserFromLog(NULL,-1,0,&from,&to)) + CString range; + range.Format(_T("%s..%s"), from, to); + if (logs.ParserFromLog(nullptr, -1, 0, &range)) return -1; if (logs.empty()) diff --git a/src/TortoiseProc/GitLogListBase.cpp b/src/TortoiseProc/GitLogListBase.cpp index 8f66e8009..c99dad8a8 100644 --- a/src/TortoiseProc/GitLogListBase.cpp +++ b/src/TortoiseProc/GitLogListBase.cpp @@ -2274,14 +2274,14 @@ void CGitLogListBase::OnLvnOdfinditemLoglist(NMHDR *pNMHDR, LRESULT *pResult) *pResult = -1; } -int CGitLogListBase::FillGitLog(CTGitPath *path,int info,CString *from,CString *to) +int CGitLogListBase::FillGitLog(CTGitPath *path, CString *range, int info) { ClearText(); this->m_arShownList.SafeRemoveAll(); this->m_logEntries.ClearAll(); - if (this->m_logEntries.ParserFromLog(path,-1,info,from,to)) + if (this->m_logEntries.ParserFromLog(path, -1, info, range)) return -1; //this->m_logEntries.ParserFromLog(); @@ -2328,7 +2328,6 @@ int CGitLogListBase::BeginFetchLog() else path=&this->m_Path; - CString hash; int mask; mask = CGit::LOG_INFO_ONLY_HASH | CGit::LOG_INFO_BOUNDARY; // if(this->m_bAllBranch) @@ -2341,17 +2340,8 @@ int CGitLogListBase::BeginFetchLog() this->m_LogCache.m_HashMap[m_wcRev.m_CommitHash]=m_wcRev; } - CString *pFrom, *pTo; - pFrom = pTo = NULL; - CString head(_T("HEAD")); - if(!this->m_startrev.IsEmpty()) - { - pFrom = &this->m_startrev; - if(!this->m_endrev.IsEmpty()) - pTo = &this->m_endrev; - else - pTo = &head; - } + if (m_sRange.IsEmpty()) + m_sRange = _T("HEAD"); CFilterData data; data.m_From = m_From; @@ -2374,7 +2364,7 @@ int CGitLogListBase::BeginFetchLog() if (mask & CGit::LOG_INFO_FOLLOW) mask &= ~CGit::LOG_INFO_ALL_BRANCH; - CString cmd=g_Git.GetLogCmd(m_StartRef,path,-1,mask,pFrom,pTo,true,&data); + CString cmd = g_Git.GetLogCmd(m_sRange, path, -1, mask, true, &data); //this->m_logEntries.ParserFromLog(); if(IsInWorkingThread()) @@ -2397,7 +2387,7 @@ int CGitLogListBase::BeginFetchLog() return -1; } - if (g_Git.IsOrphanBranch(m_StartRef)) + if (g_Git.IsOrphanBranch(m_sRange)) { if (!(mask & CGit::LOG_INFO_ALL_BRANCH)) return 0; @@ -2409,7 +2399,7 @@ int CGitLogListBase::BeginFetchLog() if (list.size() == 0) return 0; - cmd = g_Git.GetLogCmd(list[0], path, -1, mask, pFrom, pTo, true, &data); + cmd = g_Git.GetLogCmd(list[0], path, -1, mask, true, &data); } try { @@ -2566,7 +2556,7 @@ UINT CGitLogListBase::LogThread() int ret = 0; bool shouldWalk = true; - if (g_Git.IsOrphanBranch(m_StartRef)) + if (g_Git.IsOrphanBranch(m_sRange)) { // walk revisions if show all branches and there exists any ref if (!(m_ShowMask & CGit::LOG_INFO_ALL_BRANCH)) diff --git a/src/TortoiseProc/GitLogListBase.h b/src/TortoiseProc/GitLogListBase.h index 4650ffe01..b55da2ca4 100644 --- a/src/TortoiseProc/GitLogListBase.h +++ b/src/TortoiseProc/GitLogListBase.h @@ -200,9 +200,7 @@ public: volatile LONG m_bThreadRunning; CLogCache m_LogCache; - CString m_startrev; - CString m_endrev; - + CString m_sRange; // don't forget to bump BLAME_COLUMN_VERSION in GitStatusListCtrlHelpers.cpp if you change columns enum { @@ -306,7 +304,7 @@ public: void DiffSelectedRevWithPrevious(); bool IsSelectionContinuous(); int BeginFetchLog(); - int FillGitLog(CTGitPath *path,int infomask=CGit:: LOG_INFO_STAT| CGit::LOG_INFO_FILESTATE | CGit::LOG_INFO_SHOW_MERGEDFILE,CString *from=NULL,CString *to=NULL); + int FillGitLog(CTGitPath *path, CString *range = NULL, int infomask = CGit::LOG_INFO_STAT| CGit::LOG_INFO_FILESTATE | CGit::LOG_INFO_SHOW_MERGEDFILE); BOOL IsMatchFilter(bool bRegex, GitRev *pRev, tr1::wregex &pat); CFindDlg *m_pFindDialog; @@ -379,12 +377,12 @@ public: return (AfxGetThread() == m_LoadingThread); } - void SetStartRef(const CString& StartRef) + void SetRange(const CString& range) { - m_StartRef=StartRef; + m_sRange = range; } - CString GetStartRef() const {return m_StartRef;} + CString GetRange() const { return m_sRange; } int m_nSearchIndex; @@ -524,8 +522,6 @@ protected: CString m_CurrentBranch; CGitHash m_HeadHash; - CString m_StartRef; //Ref of the top-commit - COLORREF m_LineColors[Lanes::COLORS_NUM]; DWORD m_DateFormat; // DATE_SHORTDATE or DATE_LONGDATE bool m_bRelativeTimes; // Show relative times diff --git a/src/TortoiseProc/LogDataVector.cpp b/src/TortoiseProc/LogDataVector.cpp index 62d2f901d..4f9b5ab27 100644 --- a/src/TortoiseProc/LogDataVector.cpp +++ b/src/TortoiseProc/LogDataVector.cpp @@ -80,16 +80,18 @@ void CLogDataVector::ClearAll() } //CLogDataVector Class -int CLogDataVector::ParserFromLog(CTGitPath *path ,int count ,int infomask,CString *from,CString *to) +int CLogDataVector::ParserFromLog(CTGitPath *path, int count, int infomask, CString *range) { // only enable --follow on files if ((path == NULL || path->IsDirectory()) && (infomask & CGit::LOG_INFO_FOLLOW)) infomask = infomask ^ CGit::LOG_INFO_FOLLOW; - CString hash; - CString cmd=g_Git.GetLogCmd(hash,path,count,infomask,from,to,true); + CString gitrange = _T("HEAD"); + if (range != nullptr) + gitrange = *range; + CString cmd = g_Git.GetLogCmd(gitrange, path, count, infomask, true); - if (g_Git.IsOrphanBranch(hash)) + if (g_Git.IsOrphanBranch(gitrange)) return 0; git_init(); diff --git a/src/TortoiseProc/LogDlg.cpp b/src/TortoiseProc/LogDlg.cpp index 6b80cfdcf..968410445 100644 --- a/src/TortoiseProc/LogDlg.cpp +++ b/src/TortoiseProc/LogDlg.cpp @@ -178,23 +178,13 @@ enum JumpType JumpType_TagFF }; -void CLogDlg::SetParams(const CTGitPath& orgPath, const CTGitPath& path, CString hightlightRevision, CString startrev, CString endrev, int limit /* = FALSE */) +void CLogDlg::SetParams(const CTGitPath& orgPath, const CTGitPath& path, CString hightlightRevision, CString range, int limit) { m_orgPath = orgPath; m_path = path; m_hightlightRevision = hightlightRevision; - if (startrev == GIT_REV_ZERO) - startrev.Empty(); - if (endrev == GIT_REV_ZERO) - endrev.Empty(); - - this->m_LogList.m_startrev = startrev; - m_LogRevision = startrev; - this->m_LogList.m_endrev = endrev; - - if(!endrev.IsEmpty()) - this->SetStartRef(endrev); + SetRange(range); m_limit = limit; if (::IsWindow(m_hWnd)) @@ -415,8 +405,6 @@ BOOL CLogDlg::OnInitDialog() // scroll to user selected or current revision if (!m_hightlightRevision.IsEmpty() && m_hightlightRevision.GetLength() >= GIT_HASH_SIZE) m_LogList.m_lastSelectedHash = m_hightlightRevision; - else if (!m_LogList.m_endrev.IsEmpty() && m_LogList.m_endrev.GetLength() >= GIT_HASH_SIZE) - m_LogList.m_lastSelectedHash = m_hightlightRevision; else { if (g_Git.GetHash(m_LogList.m_lastSelectedHash, _T("HEAD"))) @@ -2173,11 +2161,11 @@ void CLogDlg::OnBnClickedShowTags() void CLogDlg::OnBnClickedBrowseRef() { - CString newRef = CBrowseRefsDlg::PickRef(false,m_LogList.GetStartRef()); + CString newRef = CBrowseRefsDlg::PickRef(false, m_LogList.GetRange()); if(newRef.IsEmpty()) return; - SetStartRef(newRef); + SetRange(newRef); ((CButton*)GetDlgItem(IDC_LOG_ALLBRANCH))->SetCheck(0); OnBnClickedAllBranch(); @@ -2195,9 +2183,10 @@ void CLogDlg::ShowStartRef() return; } - CString showStartRef = m_LogList.GetStartRef(); - if(showStartRef.IsEmpty()) + CString showStartRef = m_LogList.GetRange(); + if (showStartRef.IsEmpty() || showStartRef == _T("HEAD")) { + showStartRef.Empty(); //Ref name is HEAD if (g_Git.Run(L"git symbolic-ref HEAD", &showStartRef, NULL, CP_UTF8)) showStartRef = CString(MAKEINTRESOURCE(IDS_PROC_LOG_NOBRANCH)); @@ -2214,18 +2203,9 @@ void CLogDlg::ShowStartRef() m_staticRef.Invalidate(TRUE); } -void CLogDlg::SetStartRef(const CString& StartRef) +void CLogDlg::SetRange(const CString& range) { - m_LogList.SetStartRef(StartRef); - - if (m_hightlightRevision.IsEmpty()) - { - if (g_Git.GetHash(m_LogList.m_lastSelectedHash, StartRef)) - { - MessageBox(g_Git.GetGitLastErr(_T("Could not get hash of \"") + StartRef + _T("\".")), _T("TortoiseGit"), MB_ICONERROR); - } - m_hightlightRevision = m_LogList.m_lastSelectedHash; - } + m_LogList.SetRange(range); ShowStartRef(); } diff --git a/src/TortoiseProc/LogDlg.h b/src/TortoiseProc/LogDlg.h index 386829b65..3803e9f74 100644 --- a/src/TortoiseProc/LogDlg.h +++ b/src/TortoiseProc/LogDlg.h @@ -1,7 +1,7 @@ // TortoiseGit - a Windows shell extension for easy version control // Copyright (C) 2003-2008 - TortoiseSVN -// Copyright (C) 2008-2012 - TortoiseGit +// Copyright (C) 2008-2013 - TortoiseGit // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -60,14 +60,14 @@ class CLogDlg : public CResizableStandAloneDialog, IFilterEditValidator public: CLogDlg(CWnd* pParent = NULL); // standard constructor virtual ~CLogDlg(); - void SetParams(const CTGitPath& orgPath, const CTGitPath& path, CString hightlightRevision, CString startrev, CString endrev, int limit); + void SetParams(const CTGitPath& orgPath, const CTGitPath& path, CString hightlightRevision, CString range, int limit); void SetFilter(const CString& findstr, LONG findtype, bool findregex); bool IsThreadRunning() {return !!m_LogList.m_bThreadRunning;} void SetDialogTitle(const CString& sTitle) {m_sTitle = sTitle;} void SetSelect(bool bSelect) {m_bSelect = bSelect;} void ContinuousSelection(bool bCont = true) {m_bSelectionMustBeContinuous = bCont;} void SingleSelection(bool bSingle = true) {m_bSelectionMustBeSingle = bSingle;} - void SetStartRef(const CString& StartRef); + void SetRange(const CString& range); void ShowStartRef(); afx_msg LRESULT OnRefLogChanged(WPARAM wParam, LPARAM lParam); /** @@ -193,8 +193,6 @@ private: CTGitPath m_orgPath; CString m_hightlightRevision; - CString m_LogRevision; - CString m_sSelectedHash; // set to selected commit hash on OK if appropriate bool m_bSelectionMustBeContinuous; bool m_bSelectionMustBeSingle; diff --git a/src/TortoiseProc/LogDlgHelper.h b/src/TortoiseProc/LogDlgHelper.h index 5f1072a76..315ecedfb 100644 --- a/src/TortoiseProc/LogDlgHelper.h +++ b/src/TortoiseProc/LogDlgHelper.h @@ -1,7 +1,7 @@ // TortoiseGit - a Windows shell extension for easy version control // Copyright (C) 2003-2007 - TortoiseSVN -// Copyright (C) 2008-2011 - TortoiseGit +// Copyright (C) 2008-2013 - TortoiseGit // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -76,8 +76,7 @@ public: return m_pLogCache->m_HashMap[(*this)[i]]; } void ClearAll(); - int ParserFromLog(CTGitPath *path =NULL,int count = -1,int infomask=CGit::LOG_INFO_STAT|CGit::LOG_INFO_FILESTATE|CGit::LOG_INFO_SHOW_MERGEDFILE, - CString *from=NULL,CString *to=NULL); + int ParserFromLog(CTGitPath *path =NULL, int count = -1, int infomask = CGit::LOG_INFO_STAT | CGit::LOG_INFO_FILESTATE | CGit::LOG_INFO_SHOW_MERGEDFILE, CString *range = NULL); int FetchShortLog(CTGitPath *path , CString &hash,int count=-1 ,int mask=CGit::LOG_INFO_ONLY_HASH, int showWC=0 ); int ParserShortLog(CTGitPath *path ,CString &hash,int count=-1 ,int mask=CGit::LOG_INFO_ONLY_HASH ); diff --git a/src/TortoiseProc/RebaseDlg.cpp b/src/TortoiseProc/RebaseDlg.cpp index ad7646ea9..e54dffad3 100644 --- a/src/TortoiseProc/RebaseDlg.cpp +++ b/src/TortoiseProc/RebaseDlg.cpp @@ -575,10 +575,9 @@ void CRebaseDlg::FetchLogList() } m_CommitList.Clear(); - CString from,to; - from = m_UpstreamCtrl.GetString(); - to = m_BranchCtrl.GetString(); - this->m_CommitList.FillGitLog(NULL,0,&from,&to); + CString range; + range.Format(_T("%s..%s"), g_Git.FixBranchName(m_UpstreamCtrl.GetString()), g_Git.FixBranchName(m_BranchCtrl.GetString())); + this->m_CommitList.FillGitLog(nullptr, &range, 0); if( m_CommitList.GetItemCount() == 0 ) m_CommitList.ShowText(CString(MAKEINTRESOURCE(IDS_PROC_NOTHINGTOREBASE))); diff --git a/src/TortoiseProc/RevisionGraph/RevisionGraphDlgFunc.cpp b/src/TortoiseProc/RevisionGraph/RevisionGraphDlgFunc.cpp index d59764a21..88a885529 100644 --- a/src/TortoiseProc/RevisionGraph/RevisionGraphDlgFunc.cpp +++ b/src/TortoiseProc/RevisionGraph/RevisionGraphDlgFunc.cpp @@ -204,10 +204,14 @@ bool CRevisionGraphWnd::FetchRevisionData { this->m_LogCache.ClearAllParent(); this->m_logEntries.ClearAll(); - this->m_logEntries.ParserFromLog(NULL,-1, - CGit::LOG_INFO_SIMPILFY_BY_DECORATION|(this->m_bCurrentBranch? 0: CGit::LOG_INFO_ALL_BRANCH), - this->m_FromRev.IsEmpty() ? NULL : &m_FromRev, - this->m_ToRev.IsEmpty() ? NULL : &m_ToRev); + CString range; + if (!m_ToRev.IsEmpty() && !m_FromRev.IsEmpty()) + range.Format(_T("%s..%s"), g_Git.FixBranchName(m_FromRev), g_Git.FixBranchName(m_ToRev)); + else if (!m_ToRev.IsEmpty()) + range = m_ToRev; + else if (!m_FromRev.IsEmpty()) + range = m_FromRev; + this->m_logEntries.ParserFromLog(nullptr, -1, CGit::LOG_INFO_SIMPILFY_BY_DECORATION|(this->m_bCurrentBranch? 0: CGit::LOG_INFO_ALL_BRANCH), &range); ReloadHashMap(); this->m_Graph.clear(); diff --git a/src/TortoiseProc/SyncDlg.cpp b/src/TortoiseProc/SyncDlg.cpp index d68c78cc0..7434a59c3 100644 --- a/src/TortoiseProc/SyncDlg.cpp +++ b/src/TortoiseProc/SyncDlg.cpp @@ -380,10 +380,9 @@ void CSyncDlg::PullComplete() this->AddDiffFileList(&m_InChangeFileList, &m_arInChangeList, newhash.ToString(), m_oldHash.ToString()); - CString sOldHash(m_oldHash.ToString()); - CString sNewHash(newhash.ToString()); - m_InLogList.FillGitLog(NULL,CGit:: LOG_INFO_STAT| CGit::LOG_INFO_FILESTATE | CGit::LOG_INFO_SHOW_MERGEDFILE, - &sOldHash, &sNewHash); + CString range; + range.Format(_T("%s..%s"), m_oldHash.ToString(), newhash.ToString()); + m_InLogList.FillGitLog(nullptr, &range, CGit::LOG_INFO_STAT| CGit::LOG_INFO_FILESTATE | CGit::LOG_INFO_SHOW_MERGEDFILE); } this->ShowTab(IDC_IN_LOGLIST); } @@ -573,11 +572,10 @@ void CSyncDlg::OnBnClickedButtonApply() this->m_ctrlTabCtrl.ShowTab(IDC_IN_CHANGELIST-1,true); this->m_ctrlTabCtrl.ShowTab(IDC_IN_LOGLIST-1,true); - CString sOldHash(oldhash.ToString()); - CString sNewHash(newhash.ToString()); + CString range; + range.Format(_T("%s..%s"), m_oldHash.ToString(), newhash.ToString()); this->AddDiffFileList(&m_InChangeFileList, &m_arInChangeList, newhash.ToString(), oldhash.ToString()); - m_InLogList.FillGitLog(NULL,CGit:: LOG_INFO_STAT| CGit::LOG_INFO_FILESTATE | CGit::LOG_INFO_SHOW_MERGEDFILE, - &sOldHash, &sNewHash); + m_InLogList.FillGitLog(nullptr, &range, CGit::LOG_INFO_STAT| CGit::LOG_INFO_FILESTATE | CGit::LOG_INFO_SHOW_MERGEDFILE); this->FetchOutList(true); } @@ -1061,8 +1059,10 @@ void CSyncDlg::FetchOutList(bool force) } else if (isFastForward || m_bForce) { + CString range; + range.Format(_T("%s..%s"), g_Git.FixBranchName(remotebranch), g_Git.FixBranchName(localbranch)); //fast forward - m_OutLogList.FillGitLog(NULL, CGit::LOG_INFO_STAT | CGit::LOG_INFO_FILESTATE | CGit::LOG_INFO_SHOW_MERGEDFILE, &remotebranch, &localbranch); + m_OutLogList.FillGitLog(nullptr, &range, CGit::LOG_INFO_STAT | CGit::LOG_INFO_FILESTATE | CGit::LOG_INFO_SHOW_MERGEDFILE); CString str; str.Format(IDS_PROC_SYNC_COMMITSAHEAD, m_OutLogList.GetItemCount(), remotebranch); this->m_ctrlStatus.SetWindowText(str); -- 2.11.4.GIT