OSDN Git Service

8c186844234cd2150503a6fcb72384aad3c4346b
[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 \r
6 CGitDiff::CGitDiff(void)\r
7 {\r
8 }\r
9 \r
10 CGitDiff::~CGitDiff(void)\r
11 {\r
12 }\r
13 int CGitDiff::Parser(git_revnum_t &rev)\r
14 {\r
15         if(rev == GIT_REV_ZERO)\r
16                 return 0;\r
17         if(rev.GetLength() > 40)\r
18         {\r
19                 CString cmd;\r
20                 cmd.Format(_T("git.exe rev-parse %s"),rev);\r
21                 CString output;\r
22                 if(!g_Git.Run(cmd,&output))\r
23                 {\r
24                         //int start=output.Find(_T('\n'));\r
25                         rev=output.Left(40);\r
26                 }\r
27         }\r
28         return 0;\r
29 }\r
30 \r
31 int CGitDiff::Diff(CTGitPath * pPath, git_revnum_t & rev1, git_revnum_t & rev2, bool blame, bool unified)\r
32 {\r
33         CString temppath;\r
34         GetTempPath(temppath);\r
35         Parser(rev1);\r
36         Parser(rev2);\r
37         CString file1;\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 file2;\r
54         if(rev2 != GIT_REV_ZERO)\r
55         {\r
56                 \r
57                 file2.Format(_T("%s\\%s_%s%s"),\r
58                                 temppath,                                               \r
59                                 pPath->GetBaseFilename(),\r
60                                 rev2.Left(6),\r
61                                 pPath->GetFileExtension());\r
62                 cmd.Format(_T("git.exe cat-file -p %s:%s"),rev2,pPath->GetGitPathString());\r
63                 g_Git.RunLogFile(cmd,file2);\r
64         }else\r
65         {\r
66                 file2=g_Git.m_CurrentDir+_T("\\")+pPath->GetWinPathString();\r
67         }\r
68         \r
69         CAppUtils::DiffFlags flags;\r
70         CAppUtils::StartExtDiff(file1,file2,\r
71                                                         pPath->GetGitPathString()+_T(":")+rev2.Left(6),\r
72                                                         pPath->GetGitPathString()+_T(":")+rev1.Left(6)\r
73                                                         ,flags);\r
74 \r
75         return 0;\r
76 }\r