Skip to content

Commit 8c898a8

Browse files
committed
getTagByName() added
1 parent 4f38ce8 commit 8c898a8

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

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

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ protected Git getLocalGit(String folder) throws Exception {
105105
.setURI(repo.getRepoUrl())
106106
.setCredentialsProvider(credentials)
107107
.setNoCheckout(true)
108+
.setCloneAllBranches(true)
108109
//.setBranch(Constants.R_HEADS + Constants.MASTER)
109110
.call()
110111
.close();
@@ -853,4 +854,37 @@ public Boolean isRevisionTagged(String revision) {
853854
throw new RuntimeException(e);
854855
}
855856
}
857+
858+
@Override
859+
public VCSTag getTagByName(String tagName) {
860+
try (IVCSLockedWorkingCopy wc = repo.getVCSLockedWorkingCopy();
861+
Git git = getLocalGit(wc);
862+
Repository gitRepo = git.getRepository();
863+
RevWalk rw = new RevWalk(gitRepo)) {
864+
865+
List<Ref> tagRefs = getTagRefs();
866+
RevCommit revCommit;
867+
for (Ref ref : tagRefs) {
868+
ObjectId relatedCommitObjectId = ref.getPeeledObjectId() == null ? ref.getObjectId() : ref.getPeeledObjectId();
869+
revCommit = rw.parseCommit(relatedCommitObjectId);
870+
VCSCommit relatedCommit = getVCSCommit(revCommit);
871+
RevObject revObject = rw.parseAny(ref.getObjectId());
872+
if (revObject instanceof RevTag) {
873+
RevTag revTag = (RevTag) revObject;
874+
if (revTag.getTagName().equals(tagName)) {
875+
return new VCSTag(revTag.getTagName(), revTag.getFullMessage(), revTag.getTaggerIdent().getName(), relatedCommit);
876+
}
877+
} else {
878+
if (ref.getName().equals(tagName)) {
879+
return new VCSTag(ref.getName().replace("refs/tags/", ""), null, null, relatedCommit);
880+
}
881+
}
882+
}
883+
return null;
884+
} catch (GitAPIException e) {
885+
throw new EVCSException(e);
886+
} catch (Exception e) {
887+
throw new RuntimeException(e);
888+
}
889+
}
856890
}

0 commit comments

Comments
 (0)