/* * Copyright (C) 2022, Tencent. * * 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.internal.storage.commitgraph; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import org.eclipse.jgit.internal.storage.commitgraph.CommitGraph.CommitData; import org.eclipse.jgit.junit.JGitTestUtil; import org.eclipse.jgit.lib.ObjectId; import org.junit.Test; /** * Test CommitGraphLoader by reading the commit-graph file generated by Cgit. */ public class CommitGraphLoaderTest { private CommitGraph commitGraph; @Test public void readCommitGraphV1() throws Exception { commitGraph = CommitGraphLoader .open(JGitTestUtil.getTestResourceFile("commit-graph.v1")); assertNotNull(commitGraph); assertEquals(10, commitGraph.getCommitCnt()); verifyGraphObjectIndex(); assertCommitData("85b0176af27fa1640868f061f224d01e0b295f59", new int[] { 5, 6 }, 1670570408L, 3, 0); assertCommitData("d4f7c00aab3f0160168c9e5991abb6194a4e0d9e", new int[] {}, 1670569901L, 1, 1); assertCommitData("4d03aaf9c20c97d6ccdc05cb7f146b1deb6c01d5", new int[] { 5 }, 1670570119L, 3, 2); assertCommitData("a2f409b753880bf83b18bfb433dd340a6185e8be", new int[] { 7 }, 1670569935L, 3, 3); assertCommitData("431343847343979bbe31127ed905a24fed9a636c", new int[] { 3, 2, 8 }, 1670570644L, 4, 4); assertCommitData("c3f745ad8928ef56b5dbf33740fc8ede6b598290", new int[] { 1 }, 1670570106L, 2, 5); assertCommitData("95b12422c8ea4371e54cd58925eeed9d960ff1f0", new int[] { 1 }, 1670570163L, 2, 6); assertCommitData("de0ea882503cdd9c984c0a43238014569a123cac", new int[] { 1 }, 1670569921L, 2, 7); assertCommitData("102c9d6481559b1a113eb66bf55085903de6fb00", new int[] { 6 }, 1670570616L, 3, 8); assertCommitData("b5de2a84867f8ffc6321649dabf8c0680661ec03", new int[] { 7, 5 }, 1670570364L, 3, 9); } private void verifyGraphObjectIndex() { for (int i = 0; i < commitGraph.getCommitCnt(); i++) { ObjectId id = commitGraph.getObjectId(i); int pos = commitGraph.findGraphPosition(id); assertEquals(i, pos); } } private void assertCommitData(String expectedTree, int[] expectedParents, long expectedCommitTime, int expectedGeneration, int graphPos) { CommitData commitData = commitGraph.getCommitData(graphPos); assertEquals(ObjectId.fromString(expectedTree), commitData.getTree()); assertArrayEquals(expectedParents, commitData.getParents()); assertEquals(expectedCommitTime, commitData.getCommitTime()); assertEquals(expectedGeneration, commitData.getGeneration()); } }