summaryrefslogtreecommitdiff
path: root/plugins/git4idea/src/git4idea/history/GitHistoryUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/git4idea/src/git4idea/history/GitHistoryUtils.java')
-rw-r--r--plugins/git4idea/src/git4idea/history/GitHistoryUtils.java25
1 files changed, 19 insertions, 6 deletions
diff --git a/plugins/git4idea/src/git4idea/history/GitHistoryUtils.java b/plugins/git4idea/src/git4idea/history/GitHistoryUtils.java
index 114b4beb5435..8273c3e1abdc 100644
--- a/plugins/git4idea/src/git4idea/history/GitHistoryUtils.java
+++ b/plugins/git4idea/src/git4idea/history/GitHistoryUtils.java
@@ -520,9 +520,19 @@ public class GitHistoryUtils {
@NotNull VirtualFile root,
@NotNull final Consumer<VcsUser> userRegistry,
@NotNull List<String> parameters) throws VcsException {
+ List<TimedVcsCommit> collector = ContainerUtil.newArrayList();
+ readCommits(project, root, userRegistry, parameters, new CollectConsumer<TimedVcsCommit>(collector));
+ return collector;
+ }
+
+ public static void readCommits(@NotNull final Project project,
+ @NotNull VirtualFile root,
+ @NotNull final Consumer<VcsUser> userRegistry,
+ @NotNull List<String> parameters,
+ @NotNull final Consumer<TimedVcsCommit> commitConsumer) throws VcsException {
final VcsLogObjectsFactory factory = getObjectsFactoryWithDisposeCheck(project);
if (factory == null) {
- return Collections.emptyList();
+ return;
}
final int COMMIT_BUFFER = 1000;
@@ -536,8 +546,6 @@ public class GitHistoryUtils {
h.addParameters(parameters);
h.endOptions();
- final List<TimedVcsCommit> commits = ContainerUtil.newArrayList();
-
final StringBuilder record = new StringBuilder();
final AtomicInteger records = new AtomicInteger();
final Ref<VcsException> ex = new Ref<VcsException>();
@@ -560,7 +568,10 @@ public class GitHistoryUtils {
afterParseRemainder = line.substring(recordEnd + 1);
}
if (afterParseRemainder != null && records.incrementAndGet() > COMMIT_BUFFER) { // null means can't parse now
- commits.addAll(parseCommit(parser, record, userRegistry, factory));
+ List<TimedVcsCommit> commits = parseCommit(parser, record, userRegistry, factory);
+ for (TimedVcsCommit commit : commits) {
+ commitConsumer.consume(commit);
+ }
record.setLength(0);
record.append(afterParseRemainder);
}
@@ -573,7 +584,10 @@ public class GitHistoryUtils {
@Override
public void processTerminated(int exitCode) {
try {
- commits.addAll(parseCommit(parser, record, userRegistry, factory));
+ List<TimedVcsCommit> commits = parseCommit(parser, record, userRegistry, factory);
+ for (TimedVcsCommit commit : commits) {
+ commitConsumer.consume(commit);
+ }
}
catch (Exception e) {
ex.set(new VcsException(e));
@@ -589,7 +603,6 @@ public class GitHistoryUtils {
if (!ex.isNull()) {
throw ex.get();
}
- return commits;
}
@NotNull