OSDN Git Service

Continued work on BrowserRefsDlg
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / GitDiff.cpp
1 #include "StdAfx.h"\r
2 #include "GitDiff.h"\r
3 #include "AppUtils.h"\r
4 #include "git.h"\r
5 #include "resource.h"\r
6 \r
7 CGitDiff::CGitDiff(void)\r
8 {\r
9 }\r
10 \r
11 CGitDiff::~CGitDiff(void)\r
12 {\r
13 }\r
14 int CGitDiff::Parser(git_revnum_t &rev)\r
15 {\r
16         if(rev == GIT_REV_ZERO)\r
17                 return 0;\r
18         if(rev.GetLength() > 40)\r
19         {\r
20                 CString cmd;\r
21                 cmd.Format(_T("git.exe rev-parse %s"),rev);\r
22                 CString output;\r
23                 if(!g_Git.Run(cmd,&output,CP_UTF8))\r
24                 {\r
25                         //int start=output.Find(_T('\n'));\r
26                         rev=output.Left(40);\r
27                 }\r
28         }\r
29         return 0;\r
30 }\r
31 int CGitDiff::DiffNull(CTGitPath *pPath, git_revnum_t &rev1,bool bIsAdd)\r
32 {\r
33         CString temppath;\r
34         GetTempPath(temppath);\r
35         Parser(rev1);\r
36         CString file1;\r
37         CString nullfile;\r
38         CString cmd;\r
39         if(rev1 != GIT_REV_ZERO )\r
40         {\r
41                 file1.Format(_T("%s%s_%s%s"),\r
42                                 temppath,                                               \r
43                                 pPath->GetBaseFilename(),\r
44                                 rev1.Left(6),\r
45                                 pPath->GetFileExtension());\r
46                 cmd.Format(_T("git.exe cat-file -p %s:\"%s\""),rev1,pPath->GetGitPathString());\r
47                                 g_Git.RunLogFile(cmd,file1);\r
48         }else\r
49         {\r
50                 file1=g_Git.m_CurrentDir+_T("\\")+pPath->GetWinPathString();\r
51         }\r
52 \r
53         CString tempfile=::GetTempFile();\r
54         CStdioFile file(tempfile,CFile::modeReadWrite|CFile::modeCreate );\r
55         //file.WriteString();\r
56         file.Close();\r
57         \r
58         CAppUtils::DiffFlags flags;\r
59 \r
60         if(bIsAdd)\r
61                 CAppUtils::StartExtDiff(tempfile,file1,\r
62                                                         _T("NULL"),\r
63                                                         pPath->GetGitPathString()+_T(":")+rev1.Left(6)\r
64                                                         ,flags);\r
65         else\r
66                 CAppUtils::StartExtDiff(file1,tempfile,\r
67                                                         pPath->GetGitPathString()+_T(":")+rev1.Left(6)\r
68                                                         ,_T("NULL"),flags);\r
69 \r
70         return 0;\r
71 }\r
72 \r
73 int CGitDiff::Diff(CTGitPath * pPath,CTGitPath * pPath2, git_revnum_t & rev1, git_revnum_t & rev2, bool /*blame*/, bool /*unified*/)\r
74 {\r
75         CString temppath;\r
76         GetTempPath(temppath);\r
77         Parser(rev1);\r
78         Parser(rev2);\r
79         CString file1;\r
80         CString title1;\r
81         CString cmd;\r
82         if(rev1 != GIT_REV_ZERO )\r
83         {\r
84                 file1.Format(_T("%s%s_%s%s"),\r
85                                 temppath,                                               \r
86                                 pPath->GetBaseFilename(),\r
87                                 rev1.Left(6),\r
88                                 pPath->GetFileExtension());\r
89                 title1 = pPath->GetFileOrDirectoryName()+_T(":")+rev1.Left(6);\r
90                 cmd.Format(_T("git.exe cat-file -p %s:\"%s\""),rev1,pPath->GetGitPathString());\r
91                                 g_Git.RunLogFile(cmd,file1);\r
92         }else\r
93         {\r
94                 file1=g_Git.m_CurrentDir+_T("\\")+pPath->GetWinPathString();\r
95                 title1.Format( IDS_DIFF_WCNAME, pPath->GetFileOrDirectoryName() );\r
96         }\r
97 \r
98         CString file2;\r
99         CString title2;\r
100         if(rev2 != GIT_REV_ZERO)\r
101         {\r
102                 \r
103                 file2.Format(_T("%s%s_%s%s"),\r
104                                 temppath,                                               \r
105                                 pPath2->GetBaseFilename(),\r
106                                 rev2.Left(6),\r
107                                 pPath2->GetFileExtension());\r
108                 title2 = pPath2->GetFileOrDirectoryName()+_T(":")+rev2.Left(6);\r
109                 cmd.Format(_T("git.exe cat-file -p %s:\"%s\""),rev2,pPath2->GetGitPathString());\r
110                 g_Git.RunLogFile(cmd,file2);\r
111         }else\r
112         {\r
113                 file2=g_Git.m_CurrentDir+_T("\\")+pPath2->GetWinPathString();\r
114                 title2.Format( IDS_DIFF_WCNAME, pPath2->GetFileOrDirectoryName() );\r
115         }\r
116         \r
117         CAppUtils::DiffFlags flags;\r
118         CAppUtils::StartExtDiff(file2,file1,\r
119                                                         title2,\r
120                                                         title1\r
121                                                         ,flags);\r
122 \r
123         return 0;\r
124 }\r
125 \r