1111import java .net .SocketAddress ;
1212import java .net .URI ;
1313import 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
2016import org .apache .commons .io .FileUtils ;
2117import org .apache .commons .io .IOUtils ;
3026import org .eclipse .jgit .diff .DiffEntry .ChangeType ;
3127import org .eclipse .jgit .diff .DiffEntry .Side ;
3228import 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 ;
4335import org .eclipse .jgit .storage .file .FileRepositoryBuilder ;
4436import org .eclipse .jgit .transport .CredentialsProvider ;
4537import 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