Skip to content

Commit 5508682

Browse files
committed
fix: parsing newest commits first (refs #147)
1 parent 8722814 commit 5508682

File tree

4 files changed

+32
-92
lines changed

4 files changed

+32
-92
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ dependencies {
2121
implementation 'org.eclipse.jgit:org.eclipse.jgit:5.13.1.202206130422-r'
2222
implementation 'org.gitlab:java-gitlab-api:4.1.1'
2323

24-
testImplementation 'org.slf4j:slf4j-simple:2.0.6'
24+
testImplementation 'org.slf4j:slf4j-simple:1.7.30' // Same as JGit
2525
testImplementation 'junit:junit:4.13.2'
2626
testImplementation 'org.assertj:assertj-core:3.23.1'
2727
testImplementation 'com.approvaltests:approvaltests:18.5.0'

src/main/java/se/bjurr/gitchangelog/internal/git/GitRepo.java

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import java.util.List;
1717
import java.util.Map;
1818
import java.util.Optional;
19+
import java.util.PriorityQueue;
1920
import java.util.Set;
2021
import java.util.TreeMap;
2122
import java.util.TreeSet;
@@ -425,45 +426,46 @@ private boolean notFirstIncludedCommit(final ObjectId from, final ObjectId to) {
425426
/** This can be done recursively but will result in {@link StackOverflowError} for large repos. */
426427
private void populateComitPerTag(
427428
final RevCommit from,
428-
final ObjectId to,
429+
final RevCommit to,
429430
final Map<String, Ref> tagPerCommitHash,
430431
final Map<String, String> tagPerCommitsHash,
431432
final Map<String, Set<GitCommit>> commitsPerTag,
432433
final Map<String, Date> datePerTag,
433434
final String startingTagName)
434435
throws Exception {
435-
final Set<TraversalWork> moreWork =
436-
this.populateCommitPerTag(
437-
from,
438-
to,
439-
commitsPerTag,
440-
tagPerCommitHash,
441-
tagPerCommitsHash,
442-
datePerTag,
443-
startingTagName);
444-
do {
445-
final Set<TraversalWork> evenMoreWork = new TreeSet<>();
446-
for (final TraversalWork tw : new ArrayList<>(moreWork)) {
447-
moreWork.remove(tw);
448-
final Set<TraversalWork> newWork =
436+
437+
final RevCommit thisCommit = this.revWalk.lookupCommit(to);
438+
this.revWalk.parseHeaders(thisCommit);
439+
440+
final PriorityQueue<TraversalWork> moreWork =
441+
new PriorityQueue<>(
449442
this.populateCommitPerTag(
450443
from,
451-
tw.getTo(),
444+
to,
452445
commitsPerTag,
453446
tagPerCommitHash,
454447
tagPerCommitsHash,
455448
datePerTag,
456-
tw.getCurrentTagName());
457-
evenMoreWork.addAll(newWork);
458-
}
459-
moreWork.addAll(evenMoreWork);
449+
startingTagName));
450+
451+
while (!moreWork.isEmpty()) {
452+
final TraversalWork next = moreWork.remove();
453+
moreWork.addAll(
454+
this.populateCommitPerTag(
455+
from,
456+
next.getTo(),
457+
commitsPerTag,
458+
tagPerCommitHash,
459+
tagPerCommitsHash,
460+
datePerTag,
461+
next.getCurrentTagName()));
460462
LOG.debug("Work left: " + moreWork.size());
461-
} while (!moreWork.isEmpty());
463+
}
462464
}
463465

464466
private Set<TraversalWork> populateCommitPerTag(
465467
final RevCommit from,
466-
final ObjectId to,
468+
final RevCommit to,
467469
final Map<String, Set<GitCommit>> commitsPerTagName,
468470
final Map<String, Ref> tagPerCommitHash,
469471
final Map<String, String> tagPerCommitsHash,
@@ -474,21 +476,20 @@ private Set<TraversalWork> populateCommitPerTag(
474476
if (this.isMappedToAnotherTag(tagPerCommitsHash, thisCommitHash)) {
475477
return new TreeSet<>();
476478
}
477-
final RevCommit thisCommit = this.revWalk.lookupCommit(to);
478-
this.revWalk.parseHeaders(thisCommit);
479479
if (this.thisIsANewTag(tagPerCommitHash, thisCommitHash)) {
480480
currentTagName = this.getTagName(tagPerCommitHash, thisCommitHash);
481481
}
482482
if (currentTagName != null) {
483-
if (this.addCommitToCurrentTag(commitsPerTagName, currentTagName, thisCommit)) {
484-
datePerTag.put(currentTagName, new Date(thisCommit.getCommitTime() * 1000L));
483+
if (this.addCommitToCurrentTag(commitsPerTagName, currentTagName, to)) {
484+
datePerTag.put(currentTagName, new Date(to.getCommitTime() * 1000L));
485485
}
486486
this.noteThatTheCommitWasMapped(tagPerCommitsHash, currentTagName, thisCommitHash);
487487
}
488488
if (this.notFirstIncludedCommit(from, to)) {
489489
final Set<TraversalWork> work = new TreeSet<>();
490-
for (final RevCommit parent : thisCommit.getParents()) {
490+
for (final RevCommit parent : to.getParents()) {
491491
if (this.shouldInclude(parent)) {
492+
this.revWalk.parseHeaders(parent);
492493
work.add(new TraversalWork(parent, currentTagName));
493494
}
494495
}
@@ -541,9 +542,7 @@ private GitCommit toGitCommit(final RevCommit revCommit) {
541542
merge);
542543
}
543544

544-
/**
545-
* @param pathFilter use when filtering commits
546-
*/
545+
/** @param pathFilter use when filtering commits */
547546
public void setTreeFilter(final String pathFilter) {
548547
this.pathFilter = pathFilter == null ? "" : pathFilter;
549548
}

src/main/java/se/bjurr/gitchangelog/internal/git/TraversalWork.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ public int compareTo(final TraversalWork o) {
6969
}
7070

7171
int compareTo(final int selfCommitTime, final int otherCommitTime) {
72-
return Integer.valueOf(selfCommitTime) //
73-
.compareTo(otherCommitTime);
72+
return Integer.valueOf(otherCommitTime) //
73+
.compareTo(selfCommitTime);
7474
}
7575

7676
@Override

src/test/java/se/bjurr/gitchangelog/internal/git/TraversalWorkTest.java

Lines changed: 0 additions & 59 deletions
This file was deleted.

0 commit comments

Comments
 (0)