1
// TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2015-2017 - 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.
21 #include "RepositoryFixtures.h"
22 #include "GitRevLoglist.h"
25 class GitRevLoglistCBasicGitWithTestRepoFixture
: public CBasicGitWithTestRepoFixture
29 class GitRevLoglistCBasicGitWithTestRepoBareFixture
: public CBasicGitWithTestRepoBareFixture
33 class GitRevLoglistCBasicGitWithSubmoduleRepoFixture
: public CBasicGitWithSubmoduleRepositoryFixture
37 class GitRevLoglistCBasicGitWithSubmoduleRepoBareFixture
: public CBasicGitWithSubmodulRepoeBareFixture
41 class GitRevLoglist2CBasicGitWithTestRepoFixture
: public CBasicGitWithTestRepoFixture
45 class GitRevLoglist2CBasicGitWithTestRepoBareFixture
: public CBasicGitWithTestRepoBareFixture
49 INSTANTIATE_TEST_CASE_P(GitRevLoglist
, GitRevLoglistCBasicGitWithTestRepoFixture
, testing::Values(LIBGIT
, LIBGIT2
, LIBGIT2_ALL
));
50 INSTANTIATE_TEST_CASE_P(GitRevLoglist
, GitRevLoglistCBasicGitWithTestRepoBareFixture
, testing::Values(LIBGIT
, LIBGIT2
, LIBGIT2_ALL
));
51 INSTANTIATE_TEST_CASE_P(GitRevLoglist
, GitRevLoglistCBasicGitWithSubmoduleRepoFixture
, testing::Values(LIBGIT
, LIBGIT2
, LIBGIT2_ALL
));
52 INSTANTIATE_TEST_CASE_P(GitRevLoglist
, GitRevLoglistCBasicGitWithSubmoduleRepoBareFixture
, testing::Values(LIBGIT
, LIBGIT2
, LIBGIT2_ALL
));
54 INSTANTIATE_TEST_CASE_P(GitRevLoglist
, GitRevLoglist2CBasicGitWithTestRepoFixture
, testing::Values(GIT_CLI
, LIBGIT
, LIBGIT2
, LIBGIT2_ALL
));
55 INSTANTIATE_TEST_CASE_P(GitRevLoglist
, GitRevLoglist2CBasicGitWithTestRepoBareFixture
, testing::Values(GIT_CLI
, LIBGIT
, LIBGIT2
, LIBGIT2_ALL
));
57 static void SafeFetchFullInfo(CGit
* cGit
)
60 EXPECT_EQ(FALSE
, rev
.m_IsSimpleListReady
);
61 EXPECT_EQ(1, rev
.CheckAndDiff());
62 EXPECT_STREQ(L
"", rev
.GetAuthorName());
63 EXPECT_EQ(FALSE
, rev
.m_IsSimpleListReady
);
64 EXPECT_EQ(FALSE
, rev
.m_IsFull
);
65 EXPECT_EQ(FALSE
, rev
.m_IsUpdateing
);
66 EXPECT_EQ(FALSE
, rev
.m_IsDiffFiles
);
67 EXPECT_EQ(FALSE
, rev
.m_IsCommitParsed
);
68 rev
.m_IsDiffFiles
= 1;
69 EXPECT_EQ(0, rev
.GetFiles(nullptr).GetCount());
70 EXPECT_EQ(-1, rev
.SafeFetchFullInfo(cGit
));
71 EXPECT_STREQ(L
"", rev
.GetAuthorName());
72 EXPECT_EQ(FALSE
, rev
.m_IsSimpleListReady
);
73 EXPECT_EQ(TRUE
, rev
.m_IsUpdateing
);
74 EXPECT_EQ(FALSE
, rev
.m_IsFull
);
75 EXPECT_EQ(TRUE
, rev
.m_IsDiffFiles
);
76 EXPECT_EQ(FALSE
, rev
.m_IsCommitParsed
);
78 rev
.m_CommitHash
= L
"7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6";
79 rev
.m_IsDiffFiles
= TRUE
;
80 EXPECT_EQ(1, rev
.CheckAndDiff());
81 EXPECT_EQ(FALSE
, rev
.m_IsSimpleListReady
);
82 EXPECT_EQ(FALSE
, rev
.m_IsUpdateing
);
83 EXPECT_EQ(FALSE
, rev
.m_IsFull
);
84 EXPECT_EQ(FALSE
, rev
.m_IsCommitParsed
);
85 EXPECT_STREQ(L
"", rev
.GetAuthorName());
86 rev
.m_IsDiffFiles
= FALSE
;
87 EXPECT_EQ(FALSE
, rev
.m_IsSimpleListReady
);
88 EXPECT_EQ(FALSE
, rev
.m_IsUpdateing
);
89 EXPECT_EQ(FALSE
, rev
.m_IsFull
);
90 EXPECT_EQ(FALSE
, rev
.m_IsDiffFiles
);
91 EXPECT_EQ(FALSE
, rev
.m_IsCommitParsed
);
92 EXPECT_EQ(0, rev
.CheckAndDiff());
93 EXPECT_STREQ(L
"", rev
.GetAuthorName());
94 EXPECT_EQ(FALSE
, rev
.m_IsSimpleListReady
);
95 EXPECT_EQ(FALSE
, rev
.m_IsUpdateing
);
96 EXPECT_EQ(TRUE
, rev
.m_IsFull
);
97 EXPECT_EQ(TRUE
, rev
.m_IsDiffFiles
);
98 EXPECT_EQ(FALSE
, rev
.m_IsCommitParsed
);
99 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED
, rev
.GetAction(nullptr));
100 ASSERT_EQ(1, rev
.GetFiles(nullptr).GetCount());
102 list
= rev
.GetFiles(nullptr);
103 EXPECT_STREQ(L
"ascii.txt", list
[0].GetGitPathString());
104 EXPECT_STREQ(L
"", list
[0].GetGitOldPathString());
105 EXPECT_STREQ(L
"2", list
[0].m_StatAdd
);
106 EXPECT_STREQ(L
"2", list
[0].m_StatDel
);
107 EXPECT_EQ(0, list
[0].m_ParentNo
);
108 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED
, list
[0].m_Action
);
109 EXPECT_FALSE(list
[0].IsDirectory());
111 rev
.m_CommitHash
= L
"7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6";
112 rev
.m_IsUpdateing
= TRUE
; // do nothing
113 EXPECT_EQ(0, rev
.SafeFetchFullInfo(cGit
));
114 EXPECT_STREQ(L
"", rev
.GetAuthorName());
115 EXPECT_EQ(FALSE
, rev
.m_IsSimpleListReady
);
116 EXPECT_EQ(TRUE
, rev
.m_IsUpdateing
);
117 EXPECT_EQ(FALSE
, rev
.m_IsFull
);
118 EXPECT_EQ(FALSE
, rev
.m_IsDiffFiles
);
119 EXPECT_EQ(FALSE
, rev
.m_IsCommitParsed
);
120 EXPECT_EQ(0, rev
.GetAction(nullptr));
121 EXPECT_EQ(0, rev
.GetFiles(nullptr).GetCount());
123 rev
.m_CommitHash
= L
"7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6";
124 EXPECT_EQ(0, rev
.SafeFetchFullInfo(cGit
));
125 EXPECT_STREQ(L
"", rev
.GetAuthorName());
126 EXPECT_EQ(FALSE
, rev
.m_IsSimpleListReady
);
127 EXPECT_EQ(FALSE
, rev
.m_IsUpdateing
);
128 EXPECT_EQ(TRUE
, rev
.m_IsFull
);
129 EXPECT_EQ(FALSE
, rev
.m_IsDiffFiles
);
130 EXPECT_EQ(FALSE
, rev
.m_IsCommitParsed
);
131 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED
, rev
.GetAction(nullptr));
132 ASSERT_EQ(1, rev
.GetFiles(nullptr).GetCount());
133 list
= rev
.GetFiles(nullptr);
134 EXPECT_STREQ(L
"ascii.txt", list
[0].GetGitPathString());
135 EXPECT_STREQ(L
"", list
[0].GetGitOldPathString());
136 EXPECT_STREQ(L
"2", list
[0].m_StatAdd
);
137 EXPECT_STREQ(L
"2", list
[0].m_StatDel
);
138 EXPECT_EQ(0, list
[0].m_ParentNo
);
139 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED
, list
[0].m_Action
);
141 EXPECT_EQ(0, rev
.GetFiles(nullptr).GetCount());
142 rev
.m_CommitHash
= L
"dead91b4aedeaddeaddead2a56d3c473c705dead"; // non-existent commit
143 EXPECT_EQ(-1, rev
.SafeFetchFullInfo(cGit
));
144 EXPECT_EQ(FALSE
, rev
.m_IsSimpleListReady
);
145 EXPECT_EQ(TRUE
, rev
.m_IsUpdateing
);
146 EXPECT_EQ(FALSE
, rev
.m_IsFull
);
147 EXPECT_EQ(FALSE
, rev
.m_IsDiffFiles
);
148 EXPECT_EQ(FALSE
, rev
.m_IsCommitParsed
);
150 rev
.m_CommitHash
= L
"35c91b4ae2f77f4f21a7aba56d3c473c705d89e6";
151 EXPECT_EQ(0, rev
.SafeFetchFullInfo(cGit
));
152 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED
, rev
.GetAction(nullptr));
153 ASSERT_EQ(4, rev
.GetFiles(nullptr).GetCount());
154 list
= rev
.GetFiles(nullptr);
155 EXPECT_STREQ(L
"copy/ansi.txt", list
[0].GetGitPathString());
156 EXPECT_STREQ(L
"", list
[0].GetGitOldPathString());
157 EXPECT_STREQ(L
"1", list
[0].m_StatAdd
);
158 EXPECT_STREQ(L
"1", list
[0].m_StatDel
);
159 EXPECT_EQ(0, list
[0].m_ParentNo
);
160 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED
, list
[0].m_Action
);
161 EXPECT_STREQ(L
"copy/utf16-be-nobom.txt", list
[1].GetGitPathString());
162 EXPECT_STREQ(L
"", list
[1].GetGitOldPathString());
163 EXPECT_STREQ(L
"-", list
[1].m_StatAdd
);
164 EXPECT_STREQ(L
"-", list
[1].m_StatDel
);
165 EXPECT_EQ(0, list
[1].m_ParentNo
);
166 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED
, list
[1].m_Action
);
167 EXPECT_STREQ(L
"copy/utf8-bom.txt", list
[2].GetGitPathString());
168 EXPECT_STREQ(L
"", list
[2].GetGitOldPathString());
169 EXPECT_STREQ(L
"1", list
[2].m_StatAdd
);
170 EXPECT_STREQ(L
"1", list
[2].m_StatDel
);
171 EXPECT_EQ(0, list
[2].m_ParentNo
);
172 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED
, list
[2].m_Action
);
173 EXPECT_STREQ(L
"copy/utf8-nobom.txt", list
[3].GetGitPathString());
174 EXPECT_STREQ(L
"", list
[3].GetGitOldPathString());
175 EXPECT_STREQ(L
"1", list
[3].m_StatAdd
);
176 EXPECT_STREQ(L
"1", list
[3].m_StatDel
);
177 EXPECT_EQ(0, list
[3].m_ParentNo
);
178 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED
, list
[3].m_Action
);
180 rev
.m_CommitHash
= L
"8d1ebbcc7eeb63af10ff8bcf7712afb9fcc90b8a"; // merge commit
181 EXPECT_EQ(0, rev
.SafeFetchFullInfo(cGit
));
182 EXPECT_EQ(CTGitPath::LOGACTIONS_ADDED
, rev
.GetAction(nullptr));
183 ASSERT_EQ(1, rev
.GetFiles(nullptr).GetCount());
184 list
= rev
.GetFiles(nullptr);
185 EXPECT_STREQ(L
"newfiles3.txt", list
[0].GetGitPathString());
186 EXPECT_STREQ(L
"", list
[0].GetGitOldPathString());
187 EXPECT_STREQ(L
"1", list
[0].m_StatAdd
);
188 EXPECT_STREQ(L
"0", list
[0].m_StatDel
);
189 EXPECT_EQ(0, list
[0].m_ParentNo
);
190 EXPECT_EQ(CTGitPath::LOGACTIONS_ADDED
, list
[0].m_Action
);
191 EXPECT_FALSE(list
[0].IsDirectory());
193 rev
.m_CommitHash
= L
"18da7c332dcad0f37f9977d9176dce0b0c66f3eb"; // stash commit
194 EXPECT_EQ(0, rev
.SafeFetchFullInfo(cGit
));
195 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED
, rev
.GetAction(nullptr));
196 ASSERT_EQ(2, rev
.GetFiles(nullptr).GetCount());
197 list
= rev
.GetFiles(nullptr);
198 EXPECT_STREQ(L
"newfiles.txt", list
[0].GetGitPathString());
199 EXPECT_STREQ(L
"", list
[0].GetGitOldPathString());
200 EXPECT_STREQ(L
"1", list
[0].m_StatAdd
);
201 EXPECT_STREQ(L
"1", list
[0].m_StatDel
);
202 EXPECT_EQ(0, list
[0].m_ParentNo
);
203 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED
, list
[0].m_Action
);
204 EXPECT_FALSE(list
[0].IsDirectory());
205 EXPECT_STREQ(L
"newfiles.txt", list
[1].GetGitPathString());
206 EXPECT_STREQ(L
"", list
[1].GetGitOldPathString());
207 EXPECT_STREQ(L
"1", list
[1].m_StatAdd
);
208 EXPECT_STREQ(L
"1", list
[1].m_StatDel
);
209 EXPECT_EQ(1, list
[1].m_ParentNo
);
210 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED
, list
[1].m_Action
);
211 EXPECT_FALSE(list
[1].IsDirectory());
213 rev
.m_CommitHash
= L
"844309789a13614b52d5e7cbfe6350dd73d1dc72"; // root commit
214 EXPECT_EQ(0, rev
.SafeFetchFullInfo(cGit
));
215 EXPECT_EQ(CTGitPath::LOGACTIONS_ADDED
, rev
.GetAction(nullptr));
216 ASSERT_EQ(1, rev
.GetFiles(nullptr).GetCount());
217 EXPECT_STREQ(L
"ansi.txt", rev
.GetFiles(nullptr)[0].GetGitPathString());
218 EXPECT_STREQ(L
"", rev
.GetFiles(nullptr)[0].GetGitOldPathString());
220 rev
.m_CommitHash
= L
"4c5c93d2a0b368bc4570d5ec02ab03b9c4334d44";
221 EXPECT_EQ(0, rev
.SafeFetchFullInfo(cGit
));
222 EXPECT_EQ(CTGitPath::LOGACTIONS_ADDED
| CTGitPath::LOGACTIONS_MODIFIED
| CTGitPath::LOGACTIONS_REPLACED
| CTGitPath::LOGACTIONS_DELETED
, rev
.GetAction(nullptr));
223 ASSERT_EQ(4, rev
.GetFiles(nullptr).GetCount());
224 list
= rev
.GetFiles(nullptr);
225 EXPECT_STREQ(L
"newfiles2 - Cöpy.txt", list
[0].GetGitPathString());
226 EXPECT_STREQ(L
"", list
[0].GetGitOldPathString());
227 EXPECT_STREQ(L
"1", list
[0].m_StatAdd
);
228 EXPECT_STREQ(L
"0", list
[0].m_StatDel
);
229 EXPECT_EQ(0, list
[0].m_ParentNo
);
230 EXPECT_EQ(CTGitPath::LOGACTIONS_ADDED
, list
[0].m_Action
);
231 EXPECT_FALSE(list
[0].IsDirectory());
232 EXPECT_STREQ(L
"utf16-be-nobom.txt", list
[1].GetGitPathString()); // changed from file to symlink
233 EXPECT_STREQ(L
"", list
[1].GetGitOldPathString());
234 EXPECT_STREQ(L
"-", list
[1].m_StatAdd
);
235 EXPECT_STREQ(L
"-", list
[1].m_StatDel
);
236 EXPECT_EQ(0, list
[1].m_ParentNo
);
237 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED
, list
[1].m_Action
);
238 EXPECT_FALSE(list
[1].IsDirectory());
239 EXPECT_STREQ(L
"utf8-bom.txt", list
[2].GetGitPathString());
240 EXPECT_STREQ(L
"", list
[2].GetGitOldPathString());
241 EXPECT_STREQ(L
"0", list
[2].m_StatAdd
);
242 EXPECT_STREQ(L
"9", list
[2].m_StatDel
);
243 EXPECT_EQ(0, list
[2].m_ParentNo
);
244 EXPECT_EQ(CTGitPath::LOGACTIONS_DELETED
, list
[2].m_Action
);
245 EXPECT_FALSE(list
[2].IsDirectory());
246 EXPECT_STREQ(L
"was-ansi.txt", list
[3].GetGitPathString());
247 EXPECT_STREQ(L
"ansi.txt", list
[3].GetGitOldPathString());
248 EXPECT_STREQ(L
"0", list
[3].m_StatAdd
);
249 EXPECT_STREQ(L
"0", list
[3].m_StatDel
);
250 EXPECT_EQ(0, list
[3].m_ParentNo
);
251 EXPECT_EQ(CTGitPath::LOGACTIONS_REPLACED
, list
[3].m_Action
);
252 EXPECT_FALSE(list
[3].IsDirectory());
255 TEST_P(GitRevLoglistCBasicGitWithTestRepoFixture
, SafeFetchFullInfo
)
257 SafeFetchFullInfo(&g_Git
);
260 TEST_P(GitRevLoglistCBasicGitWithTestRepoBareFixture
, SafeFetchFullInfo
)
262 SafeFetchFullInfo(&g_Git
);
265 static void SafeFetchFullInfo_Submodule(CGit
* cGit
, config testConfig
)
269 // for "easy" tests see SafeFetchFullInfo
270 rev
.m_CommitHash
= L
"900539cd24776a94d1b642358ccfdb9d897c8254"; // added submodule
271 EXPECT_EQ(0, rev
.SafeFetchFullInfo(cGit
));
272 EXPECT_EQ(TRUE
, rev
.m_IsFull
);
273 EXPECT_EQ(FALSE
, rev
.m_IsDiffFiles
);
274 EXPECT_EQ(FALSE
, rev
.m_IsCommitParsed
);
275 EXPECT_EQ(CTGitPath::LOGACTIONS_ADDED
, rev
.GetAction(nullptr));
276 ASSERT_EQ(1, rev
.GetFiles(nullptr).GetCount());
277 list
= rev
.GetFiles(nullptr);
278 EXPECT_STREQ(L
"something", list
[0].GetGitPathString());
279 EXPECT_STREQ(L
"", list
[0].GetGitOldPathString());
280 EXPECT_STREQ(L
"1", list
[0].m_StatAdd
);
281 EXPECT_STREQ(L
"0", list
[0].m_StatDel
);
282 EXPECT_EQ(0, list
[0].m_ParentNo
);
283 EXPECT_EQ(CTGitPath::LOGACTIONS_ADDED
, list
[0].m_Action
);
284 EXPECT_TRUE(list
[0].IsDirectory());
286 rev
.m_CommitHash
= L
"c8d17f57c7b511aff4aa2fbfae158902281cad8e"; // modified submodule
287 EXPECT_EQ(0, rev
.SafeFetchFullInfo(cGit
));
288 EXPECT_EQ(TRUE
, rev
.m_IsFull
);
289 EXPECT_EQ(FALSE
, rev
.m_IsDiffFiles
);
290 EXPECT_EQ(FALSE
, rev
.m_IsCommitParsed
);
291 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED
, rev
.GetAction(nullptr));
292 ASSERT_EQ(1, rev
.GetFiles(nullptr).GetCount());
293 list
= rev
.GetFiles(nullptr);
294 EXPECT_STREQ(L
"something", list
[0].GetGitPathString());
295 EXPECT_STREQ(L
"", list
[0].GetGitOldPathString());
296 EXPECT_STREQ(L
"1", list
[0].m_StatAdd
);
297 EXPECT_STREQ(L
"1", list
[0].m_StatDel
);
298 EXPECT_EQ(0, list
[0].m_ParentNo
);
299 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED
, list
[0].m_Action
);
300 EXPECT_TRUE(list
[0].IsDirectory());
302 rev
.m_CommitHash
= L
"4ed8d1f9ce9aedc6ad044d9051cb584a8bc294ac"; // deleted submodule
303 EXPECT_EQ(0, rev
.SafeFetchFullInfo(cGit
));
304 EXPECT_EQ(TRUE
, rev
.m_IsFull
);
305 EXPECT_EQ(FALSE
, rev
.m_IsDiffFiles
);
306 EXPECT_EQ(FALSE
, rev
.m_IsCommitParsed
);
307 EXPECT_EQ(CTGitPath::LOGACTIONS_DELETED
, rev
.GetAction(nullptr));
308 ASSERT_EQ(1, rev
.GetFiles(nullptr).GetCount());
309 list
= rev
.GetFiles(nullptr);
310 EXPECT_STREQ(L
"something", list
[0].GetGitPathString());
311 EXPECT_STREQ(L
"", list
[0].GetGitOldPathString());
312 EXPECT_STREQ(L
"0", list
[0].m_StatAdd
);
313 EXPECT_STREQ(L
"1", list
[0].m_StatDel
);
314 EXPECT_EQ(0, list
[0].m_ParentNo
);
315 EXPECT_EQ(CTGitPath::LOGACTIONS_DELETED
, list
[0].m_Action
);
316 EXPECT_TRUE(list
[0].IsDirectory());
318 rev
.m_CommitHash
= L
"2e63f1a55bc3dce074897200b226009f575fbcae"; // submodule to file
319 EXPECT_EQ(0, rev
.SafeFetchFullInfo(cGit
));
320 EXPECT_EQ(TRUE
, rev
.m_IsFull
);
321 EXPECT_EQ(FALSE
, rev
.m_IsDiffFiles
);
322 EXPECT_EQ(FALSE
, rev
.m_IsCommitParsed
);
323 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED
, rev
.GetAction(nullptr));
324 ASSERT_EQ(1, rev
.GetFiles(nullptr).GetCount());
325 list
= rev
.GetFiles(nullptr);
326 EXPECT_STREQ(L
"something", list
[0].GetGitPathString());
327 EXPECT_STREQ(L
"", list
[0].GetGitOldPathString());
328 if (testConfig
== LIBGIT2_ALL
) // TODO: libgit behaves differently here
330 EXPECT_STREQ(L
"-", list
[0].m_StatAdd
);
331 EXPECT_STREQ(L
"-", list
[0].m_StatDel
);
335 EXPECT_STREQ(L
"1", list
[0].m_StatAdd
);
336 EXPECT_STREQ(L
"1", list
[0].m_StatDel
);
338 EXPECT_EQ(0, list
[0].m_ParentNo
);
339 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED
, list
[0].m_Action
);
340 EXPECT_FALSE(list
[0].IsDirectory());
342 rev
.m_CommitHash
= L
"07ac6e5916c03747f7485195deb7ec9100d1c2ef"; // file to submodule
343 EXPECT_EQ(0, rev
.SafeFetchFullInfo(cGit
));
344 EXPECT_EQ(TRUE
, rev
.m_IsFull
);
345 EXPECT_EQ(FALSE
, rev
.m_IsDiffFiles
);
346 EXPECT_EQ(FALSE
, rev
.m_IsCommitParsed
);
347 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED
, rev
.GetAction(nullptr));
348 ASSERT_EQ(1, rev
.GetFiles(nullptr).GetCount());
349 list
= rev
.GetFiles(nullptr);
350 EXPECT_STREQ(L
"something", list
[0].GetGitPathString());
351 EXPECT_STREQ(L
"", list
[0].GetGitOldPathString());
352 if (testConfig
== LIBGIT2_ALL
) // TODO: libgit behaves differently here
354 EXPECT_STREQ(L
"-", list
[0].m_StatAdd
);
355 EXPECT_STREQ(L
"-", list
[0].m_StatDel
);
359 EXPECT_STREQ(L
"1", list
[0].m_StatAdd
);
360 EXPECT_STREQ(L
"1", list
[0].m_StatDel
);
362 EXPECT_EQ(0, list
[0].m_ParentNo
);
363 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED
, list
[0].m_Action
);
364 EXPECT_FALSE(list
[0].IsDirectory());
366 rev
.m_CommitHash
= L
"2d2017245cf3d016c64e5ad4eb6b0f1bccd1cf7f"; // merge use third
367 EXPECT_EQ(0, rev
.SafeFetchFullInfo(cGit
));
368 EXPECT_EQ(TRUE
, rev
.m_IsFull
);
369 EXPECT_EQ(FALSE
, rev
.m_IsDiffFiles
);
370 EXPECT_EQ(FALSE
, rev
.m_IsCommitParsed
);
371 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED
, rev
.GetAction(nullptr));
372 ASSERT_EQ(2, rev
.GetFiles(nullptr).GetCount());
373 list
= rev
.GetFiles(nullptr);
374 EXPECT_STREQ(L
"something", list
[0].GetGitPathString());
375 EXPECT_STREQ(L
"", list
[0].GetGitOldPathString());
376 EXPECT_STREQ(L
"1", list
[0].m_StatAdd
);
377 EXPECT_STREQ(L
"1", list
[0].m_StatDel
);
378 EXPECT_EQ(0, list
[0].m_ParentNo
);
379 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED
, list
[0].m_Action
);
380 EXPECT_TRUE(list
[0].IsDirectory());
381 EXPECT_STREQ(L
"something", list
[1].GetGitPathString());
382 EXPECT_STREQ(L
"", list
[1].GetGitOldPathString());
383 EXPECT_STREQ(L
"1", list
[1].m_StatAdd
);
384 EXPECT_STREQ(L
"1", list
[1].m_StatDel
);
385 EXPECT_EQ(1, list
[1].m_ParentNo
);
386 EXPECT_EQ(CTGitPath::LOGACTIONS_MODIFIED
, list
[1].m_Action
);
387 EXPECT_TRUE(list
[1].IsDirectory());
390 TEST_P(GitRevLoglistCBasicGitWithSubmoduleRepoBareFixture
, SafeFetchFullInfo
)
392 SafeFetchFullInfo_Submodule(&g_Git
, GetParam());
395 TEST_P(GitRevLoglistCBasicGitWithSubmoduleRepoFixture
, SafeFetchFullInfo
)
397 SafeFetchFullInfo_Submodule(&g_Git
, GetParam());
400 static void SafeGetSimpleList(CGit
* cGit
)
403 EXPECT_EQ(-1, rev
.SafeGetSimpleList(cGit
));
404 EXPECT_STREQ(L
"", rev
.GetAuthorName());
405 EXPECT_EQ(FALSE
, rev
.m_IsSimpleListReady
);
406 EXPECT_EQ(TRUE
, rev
.m_IsUpdateing
);
407 EXPECT_EQ(FALSE
, rev
.m_IsFull
);
408 EXPECT_EQ(FALSE
, rev
.m_IsDiffFiles
);
409 EXPECT_EQ(FALSE
, rev
.m_IsCommitParsed
);
410 EXPECT_TRUE(rev
.m_SimpleFileList
.empty());
412 rev
.m_CommitHash
= L
"7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6";
413 rev
.m_IsUpdateing
= TRUE
; // do nothing
414 EXPECT_EQ(0, rev
.SafeGetSimpleList(cGit
));
415 EXPECT_STREQ(L
"", rev
.GetAuthorName());
416 EXPECT_EQ(FALSE
, rev
.m_IsSimpleListReady
);
417 EXPECT_EQ(TRUE
, rev
.m_IsUpdateing
);
418 EXPECT_EQ(FALSE
, rev
.m_IsFull
);
419 EXPECT_EQ(FALSE
, rev
.m_IsDiffFiles
);
420 EXPECT_EQ(FALSE
, rev
.m_IsCommitParsed
);
421 EXPECT_TRUE(rev
.m_SimpleFileList
.empty());
423 rev
.m_CommitHash
= L
"7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6";
424 EXPECT_EQ(0, rev
.SafeGetSimpleList(cGit
));
425 EXPECT_STREQ(L
"", rev
.GetAuthorName());
426 EXPECT_EQ(TRUE
, rev
.m_IsSimpleListReady
);
427 EXPECT_EQ(FALSE
, rev
.m_IsUpdateing
);
428 EXPECT_EQ(FALSE
, rev
.m_IsFull
);
429 EXPECT_EQ(FALSE
, rev
.m_IsDiffFiles
);
430 EXPECT_EQ(FALSE
, rev
.m_IsCommitParsed
);
431 ASSERT_EQ(1, rev
.m_SimpleFileList
.size());
432 EXPECT_STREQ(L
"ascii.txt", rev
.m_SimpleFileList
[0]);
434 rev
.m_CommitHash
= L
"dead91b4aedeaddeaddead2a56d3c473c705dead"; // non-existent commit
435 EXPECT_EQ(-1, rev
.SafeGetSimpleList(cGit
));
436 EXPECT_EQ(FALSE
, rev
.m_IsSimpleListReady
);
437 EXPECT_EQ(TRUE
, rev
.m_IsUpdateing
);
438 EXPECT_EQ(FALSE
, rev
.m_IsFull
);
439 EXPECT_EQ(FALSE
, rev
.m_IsDiffFiles
);
440 EXPECT_EQ(FALSE
, rev
.m_IsCommitParsed
);
441 EXPECT_TRUE(rev
.m_SimpleFileList
.empty());
443 rev
.m_CommitHash
= L
"35c91b4ae2f77f4f21a7aba56d3c473c705d89e6";
444 EXPECT_EQ(0, rev
.SafeGetSimpleList(cGit
));
445 EXPECT_EQ(TRUE
, rev
.m_IsSimpleListReady
);
446 ASSERT_EQ(4, rev
.m_SimpleFileList
.size());
447 EXPECT_STREQ(L
"copy/ansi.txt", rev
.m_SimpleFileList
[0]);
448 EXPECT_STREQ(L
"copy/utf16-be-nobom.txt", rev
.m_SimpleFileList
[1]);
449 EXPECT_STREQ(L
"copy/utf8-bom.txt", rev
.m_SimpleFileList
[2]);
450 EXPECT_STREQ(L
"copy/utf8-nobom.txt", rev
.m_SimpleFileList
[3]);
452 rev
.m_CommitHash
= L
"8d1ebbcc7eeb63af10ff8bcf7712afb9fcc90b8a"; // merge commit
453 EXPECT_EQ(0, rev
.SafeGetSimpleList(cGit
));
454 ASSERT_EQ(1, rev
.m_SimpleFileList
.size());
455 EXPECT_STREQ(L
"newfiles3.txt", rev
.m_SimpleFileList
[0]);
457 rev
.m_CommitHash
= L
"18da7c332dcad0f37f9977d9176dce0b0c66f3eb"; // stash commit
458 EXPECT_EQ(0, rev
.SafeGetSimpleList(cGit
));
459 ASSERT_EQ(1, rev
.m_SimpleFileList
.size());
460 EXPECT_STREQ(L
"newfiles.txt", rev
.m_SimpleFileList
[0]);
462 rev
.m_CommitHash
= L
"844309789a13614b52d5e7cbfe6350dd73d1dc72"; // root commit
463 EXPECT_EQ(0, rev
.SafeGetSimpleList(cGit
));
464 ASSERT_EQ(1, rev
.m_SimpleFileList
.size());
465 EXPECT_STREQ(L
"ansi.txt", rev
.m_SimpleFileList
[0]);
467 rev
.m_CommitHash
= L
"4c5c93d2a0b368bc4570d5ec02ab03b9c4334d44";
468 EXPECT_EQ(0, rev
.SafeGetSimpleList(cGit
));
469 ASSERT_EQ(5, rev
.m_SimpleFileList
.size());
470 EXPECT_STREQ(L
"ansi.txt", rev
.m_SimpleFileList
[0]); // has same hash as was-ansi.txt?!
471 EXPECT_STREQ(L
"newfiles2 - Cöpy.txt", rev
.m_SimpleFileList
[1]);
472 EXPECT_STREQ(L
"utf16-be-nobom.txt", rev
.m_SimpleFileList
[2]);
473 EXPECT_STREQ(L
"utf8-bom.txt", rev
.m_SimpleFileList
[3]);
474 EXPECT_STREQ(L
"was-ansi.txt", rev
.m_SimpleFileList
[4]);
477 TEST_P(GitRevLoglistCBasicGitWithTestRepoFixture
, SafeGetSimpleList
)
479 SafeGetSimpleList(&g_Git
);
482 TEST_P(GitRevLoglistCBasicGitWithTestRepoBareFixture
, SafeGetSimpleList
)
484 SafeGetSimpleList(&g_Git
);
487 static void SafeGetSimpleList_Submodule(CGit
* cGit
)
490 // for "easy" tests see SafeGetSimpleList
491 rev
.m_CommitHash
= L
"900539cd24776a94d1b642358ccfdb9d897c8254"; // added submodule
492 EXPECT_EQ(0, rev
.SafeGetSimpleList(cGit
));
493 ASSERT_EQ(1, rev
.m_SimpleFileList
.size());
494 EXPECT_STREQ(L
"something", rev
.m_SimpleFileList
[0]);
496 rev
.m_CommitHash
= L
"c8d17f57c7b511aff4aa2fbfae158902281cad8e"; // modified submodule
497 EXPECT_EQ(0, rev
.SafeGetSimpleList(cGit
));
498 ASSERT_EQ(1, rev
.m_SimpleFileList
.size());
499 EXPECT_STREQ(L
"something", rev
.m_SimpleFileList
[0]);
501 rev
.m_CommitHash
= L
"4ed8d1f9ce9aedc6ad044d9051cb584a8bc294ac"; // deleted submodule
502 EXPECT_EQ(0, rev
.SafeGetSimpleList(cGit
));
503 ASSERT_EQ(1, rev
.m_SimpleFileList
.size());
504 EXPECT_STREQ(L
"something", rev
.m_SimpleFileList
[0]);
506 rev
.m_CommitHash
= L
"2e63f1a55bc3dce074897200b226009f575fbcae"; // submodule to file
507 EXPECT_EQ(0, rev
.SafeGetSimpleList(cGit
));
508 ASSERT_EQ(1, rev
.m_SimpleFileList
.size());
509 EXPECT_STREQ(L
"something", rev
.m_SimpleFileList
[0]);
511 rev
.m_CommitHash
= L
"07ac6e5916c03747f7485195deb7ec9100d1c2ef"; // file to submodule
512 EXPECT_EQ(0, rev
.SafeGetSimpleList(cGit
));
513 ASSERT_EQ(1, rev
.m_SimpleFileList
.size());
514 EXPECT_STREQ(L
"something", rev
.m_SimpleFileList
[0]);
516 rev
.m_CommitHash
= L
"2d2017245cf3d016c64e5ad4eb6b0f1bccd1cf7f"; // merge use third
517 EXPECT_EQ(0, rev
.SafeGetSimpleList(cGit
));
518 ASSERT_EQ(1, rev
.m_SimpleFileList
.size());
519 EXPECT_STREQ(L
"something", rev
.m_SimpleFileList
[0]);
522 TEST_P(GitRevLoglistCBasicGitWithSubmoduleRepoFixture
, SafeGetSimpleList
)
524 SafeGetSimpleList_Submodule(&g_Git
);
527 TEST_P(GitRevLoglistCBasicGitWithSubmoduleRepoBareFixture
, SafeGetSimpleList
)
529 SafeGetSimpleList_Submodule(&g_Git
);
532 TEST(GitRevLoglist
, IsBoundary
)
535 EXPECT_EQ(FALSE
, rev
.IsBoundary());
537 EXPECT_EQ(TRUE
, rev
.IsBoundary());
539 EXPECT_EQ(FALSE
, rev
.IsBoundary());
542 TEST(GitRevLoglist
, GetUnRevFiles
)
545 EXPECT_EQ(0, rev
.GetUnRevFiles().GetCount());
546 CTGitPathList
& list
= rev
.GetUnRevFiles();
547 list
.AddPath(CTGitPath("file.txt"));
548 EXPECT_EQ(1, rev
.GetUnRevFiles().GetCount());
550 EXPECT_EQ(0, list
.GetCount());
551 EXPECT_EQ(0, rev
.GetUnRevFiles().GetCount());
554 TEST(GitRevLoglist
, GetAction
)
557 EXPECT_EQ(0, rev
.GetAction(nullptr));
558 int& action
= rev
.GetAction(nullptr);
560 EXPECT_EQ(5, rev
.GetAction(nullptr));
562 EXPECT_EQ(0, action
);
563 EXPECT_EQ(0, rev
.GetAction(nullptr));
566 static void GetReflog()
569 std::vector
<GitRevLoglist
> revloglist
;
570 EXPECT_EQ(0, GitRevLoglist::GetRefLog(L
"refs/stash", revloglist
, err
));
571 EXPECT_EQ(0, revloglist
.size());
572 EXPECT_STREQ(L
"", err
);
574 EXPECT_EQ(0, GitRevLoglist::GetRefLog(L
"HEAD", revloglist
, err
));
575 EXPECT_EQ(12, revloglist
.size());
576 EXPECT_STREQ(L
"", err
);
579 EXPECT_EQ(0, GitRevLoglist::GetRefLog(L
"refs/heads/does-not-exist", revloglist
, err
));
580 EXPECT_EQ(0, revloglist
.size());
581 EXPECT_STREQ(L
"", err
);
584 EXPECT_EQ(0, GitRevLoglist::GetRefLog(L
"refs/heads/master", revloglist
, err
));
585 ASSERT_EQ(7, revloglist
.size());
586 EXPECT_STREQ(L
"", err
);
588 EXPECT_STREQ(L
"7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6", revloglist
[0].m_CommitHash
.ToString());
589 EXPECT_STREQ(L
"refs/heads/master@{0}", revloglist
[0].m_Ref
);
590 EXPECT_STREQ(L
"reset", revloglist
[0].m_RefAction
);
591 //EXPECT_STREQ(L"Sven Strickroth", revloglist[0].GetCommitterName());
592 //EXPECT_STREQ(L"email@cs-ware.de", revloglist[0].GetCommitterEmail());
593 EXPECT_STREQ(L
"2015-03-16 12:59:51", revloglist
[0].GetCommitterDate().FormatGmt(L
"%Y-%m-%d %H:%M:%S"));
594 EXPECT_STREQ(L
"moving to 7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6", revloglist
[0].GetSubject());
596 EXPECT_STREQ(L
"aa5b97f89cea6863222823c8289ce392d06d1691", revloglist
[2].m_CommitHash
.ToString());
597 EXPECT_STREQ(L
"refs/heads/master@{2}", revloglist
[2].m_Ref
);
598 EXPECT_STREQ(L
"reset", revloglist
[2].m_RefAction
);
599 //EXPECT_STREQ(L"Dümmy User", revloglist[2].GetCommitterName());
600 //EXPECT_STREQ(L"dummy@example.com", revloglist[2].GetCommitterEmail());
601 EXPECT_STREQ(L
"2015-03-16 12:59:07", revloglist
[2].GetCommitterDate().FormatGmt(L
"%Y-%m-%d %H:%M:%S"));
602 EXPECT_STREQ(L
"moving to aa5b97f89cea6863222823c8289ce392d06d1691", revloglist
[2].GetSubject());
604 EXPECT_STREQ(L
"df8019413c88d2aedbf33fc2dac3544312da4c18", revloglist
[3].m_CommitHash
.ToString());
605 EXPECT_STREQ(L
"refs/heads/master@{3}", revloglist
[3].m_Ref
);
606 EXPECT_STREQ(L
"commit (amend)", revloglist
[3].m_RefAction
);
607 //EXPECT_STREQ(L"Sven Strickroth", revloglist[3].GetCommitterName());
608 //EXPECT_STREQ(L"email@cs-ware.de", revloglist[3].GetCommitterEmail());
609 EXPECT_STREQ(L
"2015-03-16 12:55:00", revloglist
[3].GetCommitterDate().FormatGmt(L
"%Y-%m-%d %H:%M:%S"));
610 EXPECT_STREQ(L
"Several actions", revloglist
[3].GetSubject());
612 EXPECT_STREQ(L
"32c344625f14ecb16b6f003a77eb7a3d2c15d470", revloglist
[4].m_CommitHash
.ToString());
613 EXPECT_STREQ(L
"refs/heads/master@{4}", revloglist
[4].m_Ref
);
614 EXPECT_STREQ(L
"commit", revloglist
[4].m_RefAction
);
615 //EXPECT_STREQ(L"Sven Strickroth", revloglist[4].GetCommitterName());
616 //EXPECT_STREQ(L"email@cs-ware.de", revloglist[4].GetCommitterEmail());
617 EXPECT_STREQ(L
"2015-03-16 12:52:22", revloglist
[4].GetCommitterDate().FormatGmt(L
"%Y-%m-%d %H:%M:%S"));
618 EXPECT_STREQ(L
"renamed a file", revloglist
[4].GetSubject());
620 EXPECT_STREQ(L
"7c3cbfe13a929d2291a574dca45e4fd2d2ac1aa6", revloglist
[5].m_CommitHash
.ToString());
621 EXPECT_STREQ(L
"refs/heads/master@{5}", revloglist
[5].m_Ref
);
622 EXPECT_STREQ(L
"fetch origin +refs/heads/*:refs/heads/*", revloglist
[5].m_RefAction
);
623 //EXPECT_STREQ(L"Dummy author", revloglist[5].GetCommitterName());
624 //EXPECT_STREQ(L"a@example.com", revloglist[5].GetCommitterEmail());
625 EXPECT_STREQ(L
"2015-03-16 12:52:10", revloglist
[5].GetCommitterDate().FormatGmt(L
"%Y-%m-%d %H:%M:%S"));
626 EXPECT_STREQ(L
"forced-update", revloglist
[5].GetSubject());
628 EXPECT_STREQ(L
"560deea87853158b22d0c0fd73f60a458d47838a", revloglist
[6].m_CommitHash
.ToString());
629 EXPECT_STREQ(L
"refs/heads/master@{6}", revloglist
[6].m_Ref
);
630 EXPECT_STREQ(L
"push", revloglist
[6].m_RefAction
);
631 //EXPECT_STREQ(L"Sven Strickroth", revloglist[6].GetCommitterName());
632 //EXPECT_STREQ(L"email@cs-ware.de", revloglist[6].GetCommitterEmail());
633 EXPECT_STREQ(L
"2015-03-16 12:51:40", revloglist
[6].GetCommitterDate().FormatGmt(L
"%Y-%m-%d %H:%M:%S"));
634 EXPECT_STREQ(L
"", revloglist
[6].GetSubject());
637 TEST_P(GitRevLoglist2CBasicGitWithTestRepoFixture
, GetReflog
)
642 TEST_P(GitRevLoglist2CBasicGitWithTestRepoBareFixture
, GetReflog
)