OSDN Git Service

GitBlame Use command Line argument to open file
[tortoisegit/TortoiseGitJp.git] / src / TortoiseGitBlame / TortoiseGitBlameDoc.cpp
index a04d238..32a9a63 100644 (file)
@@ -6,6 +6,12 @@
 #include "TortoiseGitBlame.h"\r
 \r
 #include "TortoiseGitBlameDoc.h"\r
+#include "GitAdminDir.h"\r
+#include "MessageBox.h"\r
+#include "Git.h"\r
+#include "MainFrm.h"\r
+#include "TGitPath.h"\r
+#include "TortoiseGitBlameView.h"\r
 \r
 #ifdef _DEBUG\r
 #define new DEBUG_NEW\r
@@ -42,9 +48,80 @@ BOOL CTortoiseGitBlameDoc::OnNewDocument()
 \r
        return TRUE;\r
 }\r
+BOOL CTortoiseGitBlameDoc::OnOpenDocument(LPCTSTR lpszPathName)\r
+{\r
+       return OnOpenDocument(lpszPathName,_T(""));\r
+}\r
+\r
+BOOL CTortoiseGitBlameDoc::OnOpenDocument(LPCTSTR lpszPathName,CString Rev)\r
+{\r
+       if (!CDocument::OnOpenDocument(lpszPathName))\r
+               return FALSE;\r
+\r
+       m_CurrentFileName=lpszPathName;\r
 \r
+       m_Rev=Rev;\r
 \r
+       // TODO: add reinitialization code here\r
+       // (SDI documents will reuse this document)\r
+       if(!CGit::CheckMsysGitDir())\r
+       {\r
+               CMessageBox::Show(NULL,_T("MsysGit have not install or config fail"),_T("TortoiseGitBlame"),MB_OK);\r
+               return FALSE;\r
+       }\r
 \r
+       GitAdminDir admindir;\r
+       CString topdir;\r
+       if(!admindir.HasAdminDir(lpszPathName,&topdir))\r
+       {\r
+               CMessageBox::Show(NULL,CString(lpszPathName)+_T(" is not controled by git\nJust Show File Context"),_T("TortoiseGitBlame"),MB_OK);\r
+       }else\r
+       {\r
+               m_IsGitFile=TRUE;\r
+               g_Git.m_CurrentDir=topdir;\r
+               GetMainFrame()->m_wndOutput.LoadHistory(lpszPathName);\r
+               \r
+               CString cmd;\r
+               CTGitPath path;\r
+               path.SetFromWin(lpszPathName);\r
+               cmd.Format(_T("git.exe blame -s -l %s -- \"%s\""),Rev,path.GetGitPathString());\r
+               m_BlameData.Empty();\r
+               if(g_Git.Run(cmd,&m_BlameData))\r
+               {\r
+                       CMessageBox::Show(NULL,CString(_T("Blame Error"))+m_BlameData,_T("TortoiseGitBlame"),MB_OK);\r
+\r
+               }\r
+               CTortoiseGitBlameView *pView=DYNAMIC_DOWNCAST(CTortoiseGitBlameView,GetMainFrame()->GetActiveView());\r
+               if(pView == NULL)\r
+               {\r
+                       CWnd* pWnd = GetMainFrame()->GetDescendantWindow(AFX_IDW_PANE_FIRST, TRUE);\r
+                       if (pWnd != NULL && pWnd->IsKindOf(RUNTIME_CLASS(CTortoiseGitBlameView)))\r
+                       {\r
+                               pView = (CTortoiseGitBlameView*)pWnd;\r
+                       }\r
+                       else\r
+                       {\r
+                               return FALSE;\r
+                       }\r
+               }\r
+               pView->UpdateInfo();            \r
+       }\r
+\r
+       return TRUE;\r
+}\r
+\r
+void CTortoiseGitBlameDoc::SetPathName(LPCTSTR lpszPathName, BOOL bAddToMRU)\r
+{\r
+       CDocument::SetPathName(lpszPathName,bAddToMRU);\r
+\r
+       CString title;\r
+       if(m_Rev.IsEmpty())\r
+               title=CString(lpszPathName)+_T(":HEAD");\r
+       else\r
+               title=CString(lpszPathName)+_T(":")+m_Rev;\r
+\r
+       this->SetTitle(title);\r
+}\r
 \r
 // CTortoiseGitBlameDoc serialization\r
 \r