11package org .scm4j .vcs ;
22
3+ import java .io .ByteArrayOutputStream ;
4+ import java .io .File ;
5+ import java .io .FileWriter ;
6+ import java .io .IOException ;
7+ import java .io .InputStream ;
8+ import java .net .Authenticator ;
9+ import java .net .InetSocketAddress ;
10+ import java .net .PasswordAuthentication ;
11+ import java .net .Proxy ;
12+ import java .net .Proxy .Type ;
13+ import java .net .ProxySelector ;
14+ import java .net .SocketAddress ;
15+ import java .net .URI ;
16+ import java .nio .charset .StandardCharsets ;
17+ import java .util .ArrayList ;
18+ import java .util .Collection ;
19+ import java .util .Collections ;
20+ import java .util .HashSet ;
21+ import java .util .List ;
22+ import java .util .Set ;
23+
324import org .apache .commons .io .FileUtils ;
425import org .apache .commons .io .IOUtils ;
5- import org .eclipse .jgit .api .* ;
26+ import org .eclipse .jgit .api .CheckoutCommand ;
627import org .eclipse .jgit .api .CreateBranchCommand .SetupUpstreamMode ;
28+ import org .eclipse .jgit .api .Git ;
29+ import org .eclipse .jgit .api .LogCommand ;
30+ import org .eclipse .jgit .api .MergeResult ;
31+ import org .eclipse .jgit .api .PushCommand ;
732import org .eclipse .jgit .api .ResetCommand .ResetType ;
833import org .eclipse .jgit .api .errors .GitAPIException ;
934import org .eclipse .jgit .api .errors .RefAlreadyExistsException ;
1035import org .eclipse .jgit .diff .DiffEntry ;
1136import org .eclipse .jgit .diff .DiffEntry .ChangeType ;
1237import org .eclipse .jgit .diff .DiffEntry .Side ;
1338import org .eclipse .jgit .diff .DiffFormatter ;
14- import org .eclipse .jgit .lib .*;
15- import org .eclipse .jgit .revwalk .*;
39+ import org .eclipse .jgit .lib .Constants ;
40+ import org .eclipse .jgit .lib .ObjectId ;
41+ import org .eclipse .jgit .lib .ObjectLoader ;
42+ import org .eclipse .jgit .lib .ObjectReader ;
43+ import org .eclipse .jgit .lib .Ref ;
44+ import org .eclipse .jgit .lib .Repository ;
45+ import org .eclipse .jgit .revwalk .RevCommit ;
46+ import org .eclipse .jgit .revwalk .RevObject ;
47+ import org .eclipse .jgit .revwalk .RevSort ;
48+ import org .eclipse .jgit .revwalk .RevTag ;
49+ import org .eclipse .jgit .revwalk .RevTree ;
50+ import org .eclipse .jgit .revwalk .RevWalk ;
1651import org .eclipse .jgit .storage .file .FileRepositoryBuilder ;
1752import org .eclipse .jgit .transport .CredentialsProvider ;
1853import org .eclipse .jgit .transport .RefSpec ;
1954import org .eclipse .jgit .transport .UsernamePasswordCredentialsProvider ;
2055import org .eclipse .jgit .treewalk .CanonicalTreeParser ;
2156import org .eclipse .jgit .treewalk .TreeWalk ;
2257import org .eclipse .jgit .treewalk .filter .PathFilter ;
23- import org .scm4j .vcs .api .*;
58+ import org .scm4j .vcs .api .IVCS ;
59+ import org .scm4j .vcs .api .VCSChangeType ;
60+ import org .scm4j .vcs .api .VCSCommit ;
61+ import org .scm4j .vcs .api .VCSDiffEntry ;
62+ import org .scm4j .vcs .api .VCSMergeResult ;
63+ import org .scm4j .vcs .api .VCSTag ;
64+ import org .scm4j .vcs .api .WalkDirection ;
2465import org .scm4j .vcs .api .exceptions .EVCSBranchExists ;
2566import org .scm4j .vcs .api .exceptions .EVCSBranchNotFound ;
2667import org .scm4j .vcs .api .exceptions .EVCSException ;
3071import org .scm4j .vcs .api .workingcopy .IVCSRepositoryWorkspace ;
3172import org .scm4j .vcs .api .workingcopy .IVCSWorkspace ;
3273
33- import java .io .*;
34- import java .net .*;
35- import java .net .Proxy .Type ;
36- import java .nio .charset .StandardCharsets ;
37- import java .util .*;
38-
3974public class GitVCS implements IVCS {
4075
4176 public static final String GIT_VCS_TYPE_STRING = "git" ;
@@ -73,7 +108,7 @@ protected Git getLocalGit(String folder) throws Exception {
73108 .setDirectory (new File (folder ))
74109 .setURI (repo .getRepoUrl ())
75110 .setCredentialsProvider (credentials )
76- .setNoCheckout (true )
111+ .setNoCheckout (false )
77112 .setCloneAllBranches (true )
78113 .call ()
79114 .close ();
@@ -322,7 +357,7 @@ public String getFileContent(String branchName, String fileRelativePath, String
322357 InputStream in = loader .openStream ();
323358 return IOUtils .toString (in , StandardCharsets .UTF_8 );
324359
325- } catch (EVCSFileNotFound e ) {
360+ } catch (EVCSFileNotFound | EVCSBranchNotFound e ) {
326361 throw e ;
327362 } catch (GitAPIException e ) {
328363 throw new EVCSException (e );
@@ -585,7 +620,7 @@ public List<VCSCommit> getCommitsRange(String branchName, String afterCommitId,
585620 throw new RuntimeException (e );
586621 }
587622 }
588-
623+
589624 private RevCommit getInitialCommit (Repository gitRepo , String branchName ) throws Exception {
590625 try (RevWalk rw = new RevWalk (gitRepo )) {
591626 Ref ref = gitRepo .exactRef ("refs/heads/" + branchName );
@@ -752,6 +787,8 @@ private void updateLocalTags(Git git) throws Exception {
752787 .setCredentialsProvider (credentials )
753788 .call ();
754789 }
790+
791+
755792
756793 @ Override
757794 public List <VCSTag > getTags () {
@@ -832,21 +869,23 @@ public List<VCSTag> getTagsOnRevision(String revision) {
832869 updateLocalTags (git );
833870
834871 List <VCSTag > res = new ArrayList <>();
835- Collection <Ref > tagRefs = gitRepo .getTags ().values ();
872+
873+ Collection <Ref > refs = gitRepo .getAllRefsByPeeledObjectId ().get (gitRepo .resolve (revision ));
836874 RevCommit revCommit ;
837- for (Ref ref : tagRefs ) {
875+ for (Ref ref : refs == null ? new ArrayList <Ref >() : refs ) {
876+ if (!ref .getName ().contains ("refs/tags/" )) {
877+ continue ;
878+ }
838879 ObjectId relatedCommitObjectId = ref .getPeeledObjectId () == null ? ref .getObjectId () : ref .getPeeledObjectId ();
839880 revCommit = rw .parseCommit (relatedCommitObjectId );
840- if (revCommit .getName ().equals (revision )) {
841- VCSCommit relatedCommit = getVCSCommit (revCommit );
842- RevObject revObject = rw .parseAny (ref .getObjectId ());
843- if (revObject instanceof RevTag ) {
844- RevTag revTag = (RevTag ) revObject ;
845- res .add (new VCSTag (revTag .getTagName (), revTag .getFullMessage (), revTag .getTaggerIdent ().getName (), relatedCommit ));
846- } else {
847- res .add (new VCSTag (ref .getName ().replace ("refs/tags/" , "" ), null , null , relatedCommit ));
848- }
849- }
881+ VCSCommit relatedCommit = getVCSCommit (revCommit );
882+ RevObject revObject = rw .parseAny (ref .getObjectId ());
883+ if (revObject instanceof RevTag ) {
884+ RevTag revTag = (RevTag ) revObject ;
885+ res .add (new VCSTag (revTag .getTagName (), revTag .getFullMessage (), revTag .getTaggerIdent ().getName (), relatedCommit ));
886+ } else {
887+ res .add (new VCSTag (ref .getName ().replace ("refs/tags/" , "" ), null , null , relatedCommit ));
888+ }
850889 }
851890
852891 return res ;
@@ -856,4 +895,6 @@ public List<VCSTag> getTagsOnRevision(String revision) {
856895 throw new RuntimeException (e );
857896 }
858897 }
898+
899+
859900}
0 commit comments