Skip to content

Commit 92234e1

Browse files
committed
getCommitsRange() fixed
1 parent 2026794 commit 92234e1

File tree

1 file changed

+29
-37
lines changed

1 file changed

+29
-37
lines changed

src/main/java/org/scm4j/vcs/GitVCS.java

Lines changed: 29 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,7 @@
1111
import java.net.SocketAddress;
1212
import java.net.URI;
1313
import java.nio.charset.StandardCharsets;
14-
import java.util.ArrayList;
15-
import java.util.Collections;
16-
import java.util.HashSet;
17-
import java.util.List;
18-
import java.util.Set;
14+
import java.util.*;
1915

2016
import org.apache.commons.io.FileUtils;
2117
import org.apache.commons.io.IOUtils;
@@ -30,16 +26,12 @@
3026
import org.eclipse.jgit.diff.DiffEntry.ChangeType;
3127
import org.eclipse.jgit.diff.DiffEntry.Side;
3228
import org.eclipse.jgit.diff.DiffFormatter;
33-
import org.eclipse.jgit.lib.AnyObjectId;
34-
import org.eclipse.jgit.lib.Constants;
35-
import org.eclipse.jgit.lib.ObjectId;
36-
import org.eclipse.jgit.lib.ObjectReader;
37-
import org.eclipse.jgit.lib.Ref;
38-
import org.eclipse.jgit.lib.Repository;
39-
import org.eclipse.jgit.revwalk.RevCommit;
40-
import org.eclipse.jgit.revwalk.RevObject;
41-
import org.eclipse.jgit.revwalk.RevSort;
42-
import org.eclipse.jgit.revwalk.RevWalk;
29+
import org.eclipse.jgit.errors.IncorrectObjectTypeException;
30+
import org.eclipse.jgit.errors.MissingObjectException;
31+
import org.eclipse.jgit.errors.StopWalkException;
32+
import org.eclipse.jgit.lib.*;
33+
import org.eclipse.jgit.revwalk.*;
34+
import org.eclipse.jgit.revwalk.filter.RevFilter;
4335
import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
4436
import org.eclipse.jgit.transport.CredentialsProvider;
4537
import org.eclipse.jgit.transport.RefSpec;
@@ -557,7 +549,7 @@ public List<VCSCommit> getCommitsRange(String branchName, String afterCommitId,
557549
.call();
558550

559551
ObjectId sinceCommit = afterCommitId == null ?
560-
getInitialCommit(git).getId() :
552+
getInitialCommit(git, gitRepo, bn).getId() :
561553
ObjectId.fromString(afterCommitId);
562554

563555
ObjectId untilCommit = untilCommitId == null ?
@@ -586,16 +578,15 @@ public List<VCSCommit> getCommitsRange(String branchName, String afterCommitId,
586578
}
587579
}
588580

589-
private RevObject getInitialCommit(Git git) throws Exception {
590-
try (RevWalk rw = new RevWalk(git.getRepository())) {
591-
AnyObjectId headId;
592-
headId = git.getRepository().resolve(Constants.HEAD);
593-
RevCommit root = rw.parseCommit(headId);
594-
rw.sort(RevSort.REVERSE);
595-
rw.markStart(root);
581+
private RevCommit getInitialCommit(Git git, Repository gitRepo, String branchName) throws Exception {
582+
try (RevWalk rw = new RevWalk(gitRepo)) {
583+
Ref ref = gitRepo.exactRef("refs/heads/" + branchName);
584+
ObjectId headCommitId = ref.getObjectId();
585+
RevCommit root = rw.parseCommit(headCommitId);
586+
rw.markStart(root);
587+
rw.sort(RevSort.REVERSE);
596588
return rw.next();
597589
}
598-
599590
}
600591

601592
@Override
@@ -626,20 +617,15 @@ public List<VCSCommit> getCommitsRange(String branchName, String startFromCommit
626617
ObjectId headCommitId = ref.getObjectId();
627618
startCommit = rw.parseCommit( headCommitId );
628619
ObjectId sinceCommit = startFromCommitId == null ?
629-
getInitialCommit(git).getId() :
620+
getInitialCommit(git, gitRepo, bn).getId() :
630621
ObjectId.fromString(startFromCommitId);
631622
endCommit = rw.parseCommit(sinceCommit);
632623
} else {
633624
ObjectId sinceCommit = startFromCommitId == null ?
634625
gitRepo.exactRef("refs/heads/" + bn).getObjectId() :
635626
ObjectId.fromString(startFromCommitId);
636627
startCommit = rw.parseCommit( sinceCommit );
637-
Ref ref = gitRepo.exactRef("refs/heads/" + bn);
638-
ObjectId headCommitId = ref.getObjectId();
639-
RevCommit root = rw.parseCommit(headCommitId);
640-
rw.sort(RevSort.REVERSE);
641-
rw.markStart(root);
642-
endCommit = rw.next(); // initial commit
628+
endCommit = getInitialCommit(git, gitRepo, bn);
643629
}
644630

645631
rw.markStart(startCommit);
@@ -656,7 +642,9 @@ public List<VCSCommit> getCommitsRange(String branchName, String startFromCommit
656642
}
657643
}
658644

659-
Collections.reverse(res);
645+
if (direction == WalkDirection.ASC) {
646+
Collections.reverse(res);
647+
}
660648
if (limit != 0) {
661649
res = res.subList(0, limit);
662650
}
@@ -669,8 +657,7 @@ public List<VCSCommit> getCommitsRange(String branchName, String startFromCommit
669657
}
670658
}
671659

672-
@Override
673-
public VCSCommit getHeadCommit(String branchName) {
660+
private RevCommit getBranchHeadCommit (String branchName) {
674661
try (IVCSLockedWorkingCopy wc = repo.getVCSLockedWorkingCopy();
675662
Git git = getLocalGit(wc);
676663
Repository gitRepo = git.getRepository();
@@ -684,15 +671,20 @@ public VCSCommit getHeadCommit(String branchName) {
684671
.call();
685672
Ref ref = gitRepo.exactRef("refs/heads/" + bn);
686673
ObjectId commitId = ref.getObjectId();
687-
RevCommit commit = rw.parseCommit( commitId );
688-
return new VCSCommit(commit.getName(), commit.getFullMessage(),
689-
commit.getAuthorIdent().getName());
674+
return rw.parseCommit( commitId );
690675
} catch (GitAPIException e) {
691676
throw new EVCSException(e);
692677
} catch (Exception e) {
693678
throw new RuntimeException(e);
694679
}
695680
}
681+
682+
@Override
683+
public VCSCommit getHeadCommit(String branchName) {
684+
RevCommit branchHeadCommit = getBranchHeadCommit(getRealBranchName(branchName));
685+
return new VCSCommit(branchHeadCommit.getName(), branchHeadCommit.getFullMessage(),
686+
branchHeadCommit.getAuthorIdent().getName());
687+
}
696688

697689
@Override
698690
public String toString() {

0 commit comments

Comments
 (0)