CommitGraph: teach ObjectReader to get commit-graph
FileRepository's ObjectReader#getCommitGraph will return commit-graph when it exists and core.commitGraph is true. DfsRepository is not supported currently. Change-Id: I992d43d104cf542797e6949470e95e56de025107 Signed-off-by: kylezhao <kylezhao@tencent.com>
This commit is contained in:
parent
93ac99b52a
commit
414bfe05ff
|
@ -236,6 +236,26 @@ public void testOpenLooseObjectPropagatesIOExceptions() throws Exception {
|
||||||
assertThrows(IOException.class, () -> mock.open(curs, id));
|
assertThrows(IOException.class, () -> mock.open(curs, id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testWindowCursorGetCommitGraph() throws Exception {
|
||||||
|
db.getConfig().setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null,
|
||||||
|
ConfigConstants.CONFIG_COMMIT_GRAPH, true);
|
||||||
|
db.getConfig().setBoolean(ConfigConstants.CONFIG_GC_SECTION, null,
|
||||||
|
ConfigConstants.CONFIG_KEY_WRITE_COMMIT_GRAPH, true);
|
||||||
|
|
||||||
|
WindowCursor curs = new WindowCursor(db.getObjectDatabase());
|
||||||
|
assertTrue(curs.getCommitGraph().isEmpty());
|
||||||
|
commitFile("file.txt", "content", "master");
|
||||||
|
GC gc = new GC(db);
|
||||||
|
gc.gc();
|
||||||
|
assertTrue(curs.getCommitGraph().isPresent());
|
||||||
|
|
||||||
|
db.getConfig().setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null,
|
||||||
|
ConfigConstants.CONFIG_COMMIT_GRAPH, false);
|
||||||
|
|
||||||
|
assertTrue(curs.getCommitGraph().isEmpty());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testShallowFileCorrupt() throws Exception {
|
public void testShallowFileCorrupt() throws Exception {
|
||||||
FileRepository repository = createBareRepository();
|
FileRepository repository = createBareRepository();
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
import org.eclipse.jgit.internal.storage.commitgraph.CommitGraph;
|
import org.eclipse.jgit.internal.storage.commitgraph.CommitGraph;
|
||||||
import org.eclipse.jgit.lib.Config;
|
import org.eclipse.jgit.lib.Config;
|
||||||
import org.eclipse.jgit.lib.Constants;
|
import org.eclipse.jgit.lib.Constants;
|
||||||
|
import org.eclipse.jgit.lib.CoreConfig;
|
||||||
import org.eclipse.jgit.lib.ObjectDatabase;
|
import org.eclipse.jgit.lib.ObjectDatabase;
|
||||||
import org.eclipse.jgit.lib.ObjectId;
|
import org.eclipse.jgit.lib.ObjectId;
|
||||||
import org.eclipse.jgit.lib.ObjectLoader;
|
import org.eclipse.jgit.lib.ObjectLoader;
|
||||||
|
@ -235,8 +236,11 @@ public long getApproximateObjectCount() {
|
||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public Optional<CommitGraph> getCommitGraph() {
|
public Optional<CommitGraph> getCommitGraph() {
|
||||||
|
if (config.get(CoreConfig.KEY).enableCommitGraph()) {
|
||||||
return Optional.ofNullable(fileCommitGraph.get());
|
return Optional.ofNullable(fileCommitGraph.get());
|
||||||
}
|
}
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.zip.DataFormatException;
|
import java.util.zip.DataFormatException;
|
||||||
import java.util.zip.Inflater;
|
import java.util.zip.Inflater;
|
||||||
|
@ -34,6 +35,7 @@
|
||||||
import org.eclipse.jgit.lib.AnyObjectId;
|
import org.eclipse.jgit.lib.AnyObjectId;
|
||||||
import org.eclipse.jgit.lib.BitmapIndex;
|
import org.eclipse.jgit.lib.BitmapIndex;
|
||||||
import org.eclipse.jgit.lib.BitmapIndex.BitmapBuilder;
|
import org.eclipse.jgit.lib.BitmapIndex.BitmapBuilder;
|
||||||
|
import org.eclipse.jgit.internal.storage.commitgraph.CommitGraph;
|
||||||
import org.eclipse.jgit.lib.Constants;
|
import org.eclipse.jgit.lib.Constants;
|
||||||
import org.eclipse.jgit.lib.InflaterCache;
|
import org.eclipse.jgit.lib.InflaterCache;
|
||||||
import org.eclipse.jgit.lib.ObjectId;
|
import org.eclipse.jgit.lib.ObjectId;
|
||||||
|
@ -94,6 +96,12 @@ public BitmapIndex getBitmapIndex() throws IOException {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** {@inheritDoc} */
|
||||||
|
@Override
|
||||||
|
public Optional<CommitGraph> getCommitGraph() {
|
||||||
|
return db.getCommitGraph();
|
||||||
|
}
|
||||||
|
|
||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public Collection<CachedPack> getCachedPacksAndUpdate(
|
public Collection<CachedPack> getCachedPacksAndUpdate(
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.eclipse.jgit.annotations.NonNull;
|
import org.eclipse.jgit.annotations.NonNull;
|
||||||
|
@ -27,6 +28,7 @@
|
||||||
import org.eclipse.jgit.internal.revwalk.BitmappedReachabilityChecker;
|
import org.eclipse.jgit.internal.revwalk.BitmappedReachabilityChecker;
|
||||||
import org.eclipse.jgit.internal.revwalk.PedestrianObjectReachabilityChecker;
|
import org.eclipse.jgit.internal.revwalk.PedestrianObjectReachabilityChecker;
|
||||||
import org.eclipse.jgit.internal.revwalk.PedestrianReachabilityChecker;
|
import org.eclipse.jgit.internal.revwalk.PedestrianReachabilityChecker;
|
||||||
|
import org.eclipse.jgit.internal.storage.commitgraph.CommitGraph;
|
||||||
import org.eclipse.jgit.revwalk.ObjectReachabilityChecker;
|
import org.eclipse.jgit.revwalk.ObjectReachabilityChecker;
|
||||||
import org.eclipse.jgit.revwalk.ObjectWalk;
|
import org.eclipse.jgit.revwalk.ObjectWalk;
|
||||||
import org.eclipse.jgit.revwalk.ReachabilityChecker;
|
import org.eclipse.jgit.revwalk.ReachabilityChecker;
|
||||||
|
@ -499,6 +501,23 @@ public ObjectReachabilityChecker createObjectReachabilityChecker(
|
||||||
return new PedestrianObjectReachabilityChecker(ow);
|
return new PedestrianObjectReachabilityChecker(ow);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the commit-graph for this repository if available.
|
||||||
|
* <p>
|
||||||
|
* The commit graph can be created/modified/deleted while the repository is
|
||||||
|
* open and specific implementations decide when to refresh it.
|
||||||
|
*
|
||||||
|
* @return the commit-graph or empty if the commit-graph does not exist or
|
||||||
|
* is invalid; always returns empty when core.commitGraph is false
|
||||||
|
* (default is
|
||||||
|
* {@value org.eclipse.jgit.lib.CoreConfig#DEFAULT_COMMIT_GRAPH_ENABLE}).
|
||||||
|
*
|
||||||
|
* @since 6.5
|
||||||
|
*/
|
||||||
|
public Optional<CommitGraph> getCommitGraph() {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the {@link org.eclipse.jgit.lib.ObjectInserter} from which this
|
* Get the {@link org.eclipse.jgit.lib.ObjectInserter} from which this
|
||||||
* reader was created using {@code inserter.newReader()}
|
* reader was created using {@code inserter.newReader()}
|
||||||
|
@ -641,6 +660,11 @@ public BitmapIndex getBitmapIndex() throws IOException {
|
||||||
return delegate().getBitmapIndex();
|
return delegate().getBitmapIndex();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<CommitGraph> getCommitGraph() {
|
||||||
|
return delegate().getCommitGraph();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public ObjectInserter getCreatedFromInserter() {
|
public ObjectInserter getCreatedFromInserter() {
|
||||||
|
|
Loading…
Reference in New Issue