1 // TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2008-2016 - TortoiseGit
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License
7 // as published by the Free Software Foundation; either version 2
8 // of the License, or (at your option) any later version.
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software Foundation,
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 #include "SVNFetchCommand.h"
22 #include "SysProgressDlg.h"
23 #include "ProgressDlg.h"
26 #include "FileDiffDlg.h"
28 bool SVNFetchCommand::Execute()
31 if (!g_Git
.Run(L
"git.exe config svn-remote.svn.fetch", &out
, &err
, CP_UTF8
))
33 int start
= out
.Find(L
':');
37 if (CStringUtils::StartsWith(out
, L
":refs"))
41 out
= out
.Tokenize(L
"\n", start
);
45 MessageBox(hwndExplorer
, L
"Found no SVN remote.", L
"TortoiseGit", MB_OK
| MB_ICONERROR
);
49 CGitHash upstreamOldHash
;
50 if (g_Git
.GetHash(upstreamOldHash
, out
))
52 MessageBox(hwndExplorer
, g_Git
.GetGitLastErr(L
"Could not get upstream hash."), L
"TortoiseGit", MB_ICONERROR
);
56 CProgressDlg progress
;
57 progress
.m_GitCmd
= L
"git.exe svn fetch";
59 CGitHash upstreamNewHash
; // declare outside lambda, because it is captured by reference
60 progress
.m_PostCmdCallback
= [&](DWORD status
, PostCmdList
& postCmdList
)
65 if (g_Git
.GetHash(upstreamNewHash
, out
))
67 MessageBox(hwndExplorer
, g_Git
.GetGitLastErr(L
"Could not get upstream hash after fetching."), L
"TortoiseGit", MB_ICONERROR
);
70 if (upstreamOldHash
== upstreamNewHash
)
73 postCmdList
.emplace_back(IDI_DIFF
, L
"Fetched Diff", [&]
76 dlg
.SetDiff(nullptr, upstreamOldHash
.ToString(), upstreamNewHash
.ToString());
80 postCmdList
.emplace_back(IDI_LOG
, L
"Fetched Log", [&]
83 dlg
.SetParams(CTGitPath(L
""), CTGitPath(L
""), L
"", upstreamOldHash
.ToString() + L
".." + upstreamNewHash
.ToString(), 0);
88 return progress
.DoModal() == IDOK
;