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
91 GetMainFrame()->m_wndOutput.LoadHistory(lpszPathName);
\r
95 path.SetFromWin(lpszPathName);
\r
96 cmd.Format(_T("git.exe blame -s -l %s -- \"%s\""),Rev,path.GetGitPathString());
\r
97 m_BlameData.Empty();
\r
98 if(g_Git.Run(cmd,&m_BlameData))
\r
100 CMessageBox::Show(NULL,CString(_T("Blame Error"))+m_BlameData,_T("TortoiseGitBlame"),MB_OK);
\r
103 CTortoiseGitBlameView *pView=DYNAMIC_DOWNCAST(CTortoiseGitBlameView,GetMainFrame()->GetActiveView());
\r
106 CWnd* pWnd = GetMainFrame()->GetDescendantWindow(AFX_IDW_PANE_FIRST, TRUE);
\r
107 if (pWnd != NULL && pWnd->IsKindOf(RUNTIME_CLASS(CTortoiseGitBlameView)))
\r
109 pView = (CTortoiseGitBlameView*)pWnd;
\r
116 pView->UpdateInfo();
\r
122 void CTortoiseGitBlameDoc::SetPathName(LPCTSTR lpszPathName, BOOL bAddToMRU)
\r
124 CDocument::SetPathName(lpszPathName,bAddToMRU);
\r
127 if(m_Rev.IsEmpty())
\r
128 title=CString(lpszPathName)+_T(":HEAD");
\r
130 title=CString(lpszPathName)+_T(":")+m_Rev;
\r
132 this->SetTitle(title);
\r
135 // CTortoiseGitBlameDoc serialization
\r
137 void CTortoiseGitBlameDoc::Serialize(CArchive& ar)
\r
139 if (ar.IsStoring())
\r
141 // TODO: add storing code here
\r
145 // TODO: add loading code here
\r
150 // CTortoiseGitBlameDoc diagnostics
\r
153 void CTortoiseGitBlameDoc::AssertValid() const
\r
155 CDocument::AssertValid();
\r
158 void CTortoiseGitBlameDoc::Dump(CDumpContext& dc) const
\r
160 CDocument::Dump(dc);
\r
165 // CTortoiseGitBlameDoc commands
\r