123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- /*
- * Copyright (C) 2014, Sven Selberg <sven.selberg@sonymobile.com> and others
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Distribution License v. 1.0 which is available at
- * https://www.eclipse.org/org/documents/edl-v10.php.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
- package org.eclipse.jgit.revwalk;
-
- import static org.junit.Assert.assertTrue;
-
- import java.util.List;
- import java.util.stream.Collectors;
- import org.eclipse.jgit.lib.Ref;
- import org.junit.Test;
-
- public class RevWalkMergedIntoTest extends RevWalkTestCase {
-
- @Test
- public void testOldCommitWalk() throws Exception {
- /*
- * Sometimes a merge is performed on a machine with faulty time.
- * This makes the traversal of the graph, when trying to find out if B
- * is merged into T, complex since the algorithm uses the time stamps
- * of commits to find the best route.
- * When for example O(ld) has a very old time stamp compared to one of the
- * commits (N(ew)) on the upper route between T and F(alse base), the route
- * to False is deemed the better option even though the alternate route leeds
- * to B(ase) which was the commit we were after.
- *
- * o---o---o---o---N
- * / \
- * / o---o---o---O---T
- * / /
- * ---F---B
- *
- * This test is asserting that isMergedInto(B, T) returns true even
- * under those circumstances.
- */
- final int threeDaysInSecs = 3 * 24 * 60 * 60;
- final RevCommit f = commit();
- final RevCommit b = commit(f);
- final RevCommit o = commit(-threeDaysInSecs, commit(commit(commit(b))));
- final RevCommit n = commit(commit(commit(commit(commit(f)))));
- final RevCommit t = commit(n, o);
- assertTrue(rw.isMergedInto(b, t));
- }
-
- @Test
- public void testGetMergedInto() throws Exception {
- /*
- * i
- * / \
- * A o
- * / \ \
- * o1 o2 E
- * / \ / \
- * B C D
- */
- String b = "refs/heads/b";
- String c = "refs/heads/c";
- String d = "refs/heads/d";
- String e = "refs/heads/e";
- final RevCommit i = commit();
- final RevCommit a = commit(i);
- final RevCommit o1 = commit(a);
- final RevCommit o2 = commit(a);
- createBranch(commit(o1), b);
- createBranch(commit(o1, o2), c);
- createBranch(commit(o2), d);
- createBranch(commit(commit(i)), e);
-
- List<String> modifiedResult = rw.getMergedInto(a, getRefs())
- .stream().map(Ref::getName).collect(Collectors.toList());
-
- assertTrue(modifiedResult.size() == 3);
- assertTrue(modifiedResult.contains(b));
- assertTrue(modifiedResult.contains(c));
- assertTrue(modifiedResult.contains(d));
- }
-
- @Test
- public void testIsMergedIntoAny() throws Exception {
- /*
- * i
- * / \
- * A o
- * / \
- * o C
- * /
- * B
- */
- String b = "refs/heads/b";
- String c = "refs/heads/c";
- final RevCommit i = commit();
- final RevCommit a = commit(i);
- createBranch(commit(commit(a)), b);
- createBranch(commit(commit(i)), c);
-
- assertTrue( rw.isMergedIntoAny(a, getRefs()));
- }
-
- @Test
- public void testIsMergedIntoAll() throws Exception {
- /*
- *
- * A
- * / \
- * o1 o2
- * / \ / \
- * B C D
- */
-
- String b = "refs/heads/b";
- String c = "refs/heads/c";
- String d = "refs/heads/c";
- final RevCommit a = commit();
- final RevCommit o1 = commit(a);
- final RevCommit o2 = commit(a);
- createBranch(commit(o1), b);
- createBranch(commit(o1, o2), c);
- createBranch(commit(o2), d);
-
- assertTrue(rw.isMergedIntoAll(a, getRefs()));
- }
- }
|