Skip to content

Commit 3b678eb

Browse files
committed
refactor
1 parent 51cfbd3 commit 3b678eb

File tree

1 file changed

+66
-25
lines changed

1 file changed

+66
-25
lines changed

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

Lines changed: 66 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,67 @@
11
package 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+
324
import org.apache.commons.io.FileUtils;
425
import org.apache.commons.io.IOUtils;
5-
import org.eclipse.jgit.api.*;
26+
import org.eclipse.jgit.api.CheckoutCommand;
627
import 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;
732
import org.eclipse.jgit.api.ResetCommand.ResetType;
833
import org.eclipse.jgit.api.errors.GitAPIException;
934
import org.eclipse.jgit.api.errors.RefAlreadyExistsException;
1035
import org.eclipse.jgit.diff.DiffEntry;
1136
import org.eclipse.jgit.diff.DiffEntry.ChangeType;
1237
import org.eclipse.jgit.diff.DiffEntry.Side;
1338
import 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;
1651
import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
1752
import org.eclipse.jgit.transport.CredentialsProvider;
1853
import org.eclipse.jgit.transport.RefSpec;
1954
import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;
2055
import org.eclipse.jgit.treewalk.CanonicalTreeParser;
2156
import org.eclipse.jgit.treewalk.TreeWalk;
2257
import 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;
2465
import org.scm4j.vcs.api.exceptions.EVCSBranchExists;
2566
import org.scm4j.vcs.api.exceptions.EVCSBranchNotFound;
2667
import org.scm4j.vcs.api.exceptions.EVCSException;
@@ -30,12 +71,6 @@
3071
import org.scm4j.vcs.api.workingcopy.IVCSRepositoryWorkspace;
3172
import 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-
3974
public 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

Comments
 (0)