CommitGraph: add core.commitGraph config

Change-Id: I3b5e735ebafba09ca18fd83da479c7950fa3ea8d
Signed-off-by: kylezhao <kylezhao@tencent.com>
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ConfigTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ConfigTest.java
index a85a4f4..8f9d105 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ConfigTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ConfigTest.java
@@ -1581,6 +1581,20 @@ public void testCommitTemplateWithInvalidPath()
 		config.get(CommitConfig.KEY).getCommitTemplateContent(repo);
 	}
 
+	@Test
+	public void testCoreCommitGraphConfig() {
+		Config config = new Config();
+		assertFalse(config.get(CoreConfig.KEY).enableCommitGraph());
+
+		config.setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null,
+				ConfigConstants.CONFIG_COMMIT_GRAPH, true);
+		assertTrue(config.get(CoreConfig.KEY).enableCommitGraph());
+
+		config.setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null,
+				ConfigConstants.CONFIG_COMMIT_GRAPH, false);
+		assertFalse(config.get(CoreConfig.KEY).enableCommitGraph());
+	}
+
 	private static void assertValueRoundTrip(String value)
 			throws ConfigInvalidException {
 		assertValueRoundTrip(value, value);
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java
index 203533d..d0ec479 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java
@@ -892,4 +892,11 @@ public final class ConfigConstants {
 	 * @since 6.5
 	 */
 	public static final String CONFIG_KEY_WRITE_COMMIT_GRAPH = "writeCommitGraph";
+
+	/**
+	 * The "commitGraph" used by commit-graph feature
+	 *
+	 * @since 6.5
+	 */
+	public static final String CONFIG_COMMIT_GRAPH = "commitGraph";
 }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/CoreConfig.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/CoreConfig.java
index f23c6e0..b1ace6e 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/CoreConfig.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/CoreConfig.java
@@ -116,6 +116,13 @@ public enum LogRefUpdates {
 		ALWAYS
 	}
 
+	/**
+	 * Default value of commit graph enable option: {@value}
+	 *
+	 * @since 6.5
+	 */
+	public static final boolean DEFAULT_COMMIT_GRAPH_ENABLE = false;
+
 	private final int compression;
 
 	private final int packIndexVersion;
@@ -126,6 +133,8 @@ public enum LogRefUpdates {
 
 	private final String attributesfile;
 
+	private final boolean commitGraph;
+
 	/**
 	 * Options for symlink handling
 	 *
@@ -167,6 +176,9 @@ private CoreConfig(Config rc) {
 				ConfigConstants.CONFIG_KEY_EXCLUDESFILE);
 		attributesfile = rc.getString(ConfigConstants.CONFIG_CORE_SECTION,
 				null, ConfigConstants.CONFIG_KEY_ATTRIBUTESFILE);
+		commitGraph = rc.getBoolean(ConfigConstants.CONFIG_CORE_SECTION,
+				ConfigConstants.CONFIG_COMMIT_GRAPH,
+				DEFAULT_COMMIT_GRAPH_ENABLE);
 	}
 
 	/**
@@ -219,4 +231,16 @@ public String getExcludesFile() {
 	public String getAttributesFile() {
 		return attributesfile;
 	}
+
+	/**
+	 * Whether to read the commit-graph file (if it exists) to parse the graph
+	 * structure of commits. Default to
+	 * {@value org.eclipse.jgit.lib.CoreConfig#DEFAULT_COMMIT_GRAPH_ENABLE}.
+	 *
+	 * @return whether to read the commit-graph file
+	 * @since 6.5
+	 */
+	public boolean enableCommitGraph() {
+		return commitGraph;
+	}
 }