2 // TortoiseGitBlameDoc.cpp : implementation of the CTortoiseGitBlameDoc class
\r
6 #include "TortoiseGitBlame.h"
\r
8 #include "TortoiseGitBlameDoc.h"
\r
9 #include "GitAdminDir.h"
\r
10 #include "MessageBox.h"
\r
12 #include "MainFrm.h"
\r
13 #include "TGitPath.h"
\r
14 #include "TortoiseGitBlameView.h"
\r
15 #include "CmdLineParser.h"
\r
18 #define new DEBUG_NEW
\r
22 // CTortoiseGitBlameDoc
\r
24 IMPLEMENT_DYNCREATE(CTortoiseGitBlameDoc, CDocument)
\r
26 BEGIN_MESSAGE_MAP(CTortoiseGitBlameDoc, CDocument)
\r
30 // CTortoiseGitBlameDoc construction/destruction
\r
32 CTortoiseGitBlameDoc::CTortoiseGitBlameDoc()
\r
34 // TODO: add one-time construction code here
\r
38 CTortoiseGitBlameDoc::~CTortoiseGitBlameDoc()
\r
42 BOOL CTortoiseGitBlameDoc::OnNewDocument()
\r
44 if (!CDocument::OnNewDocument())
\r
47 // TODO: add reinitialization code here
\r
48 // (SDI documents will reuse this document)
\r
52 BOOL CTortoiseGitBlameDoc::OnOpenDocument(LPCTSTR lpszPathName)
\r
54 CCmdLineParser parser(AfxGetApp()->m_lpCmdLine);
\r
55 if(parser.HasVal(_T("rev")))
\r
57 m_Rev=parser.GetVal(_T("rev"));
\r
63 return OnOpenDocument(lpszPathName,m_Rev);
\r
66 BOOL CTortoiseGitBlameDoc::OnOpenDocument(LPCTSTR lpszPathName,CString Rev)
\r
68 if (!CDocument::OnOpenDocument(lpszPathName))
\r
71 m_CurrentFileName=lpszPathName;
\r
74 // TODO: add reinitialization code here
\r
75 // (SDI documents will reuse this document)
\r
76 if(!CGit::CheckMsysGitDir())
\r
78 CMessageBox::Show(NULL,_T("MsysGit have not install or config fail"),_T("TortoiseGitBlame"),MB_OK);
\r
82 GitAdminDir admindir;
\r
84 if(!admindir.HasAdminDir(lpszPathName,&topdir))
\r
86 CMessageBox::Show(NULL,CString(lpszPathName)+_T(" is not controled by git\nJust Show File Context"),_T("TortoiseGitBlame"),MB_OK);
\r
90 g_Git.m_CurrentDir=topdir;
\r
92 CString PathName=lpszPathName;
\r
93 PathName=PathName.Right(PathName.GetLength()-g_Git.m_CurrentDir.GetLength()-1);
\r
95 path.SetFromWin(PathName);
\r
97 if(!g_Git.m_CurrentDir.IsEmpty())
\r
98 SetCurrentDirectory(g_Git.m_CurrentDir);
\r
101 GetMainFrame()->m_wndOutput.LoadHistory(path.GetGitPathString());
\r
105 cmd.Format(_T("git.exe blame -s -l %s -- \"%s\""),Rev,path.GetGitPathString());
\r
106 m_BlameData.Empty();
\r
107 if(g_Git.Run(cmd,&m_BlameData,CP_UTF8))
\r
109 CMessageBox::Show(NULL,CString(_T("Blame Error"))+m_BlameData,_T("TortoiseGitBlame"),MB_OK);
\r
112 CTortoiseGitBlameView *pView=DYNAMIC_DOWNCAST(CTortoiseGitBlameView,GetMainFrame()->GetActiveView());
\r
115 CWnd* pWnd = GetMainFrame()->GetDescendantWindow(AFX_IDW_PANE_FIRST, TRUE);
\r
116 if (pWnd != NULL && pWnd->IsKindOf(RUNTIME_CLASS(CTortoiseGitBlameView)))
\r
118 pView = (CTortoiseGitBlameView*)pWnd;
\r
125 pView->UpdateInfo();
\r
131 void CTortoiseGitBlameDoc::SetPathName(LPCTSTR lpszPathName, BOOL bAddToMRU)
\r
133 CDocument::SetPathName(lpszPathName,bAddToMRU);
\r
136 if(m_Rev.IsEmpty())
\r
137 title=CString(lpszPathName)+_T(":HEAD");
\r
139 title=CString(lpszPathName)+_T(":")+m_Rev;
\r
141 this->SetTitle(title);
\r
144 // CTortoiseGitBlameDoc serialization
\r
146 void CTortoiseGitBlameDoc::Serialize(CArchive& ar)
\r
148 if (ar.IsStoring())
\r
150 // TODO: add storing code here
\r
154 // TODO: add loading code here
\r
159 // CTortoiseGitBlameDoc diagnostics
\r
162 void CTortoiseGitBlameDoc::AssertValid() const
\r
164 CDocument::AssertValid();
\r
167 void CTortoiseGitBlameDoc::Dump(CDumpContext& dc) const
\r
169 CDocument::Dump(dc);
\r
174 // CTortoiseGitBlameDoc commands
\r