Skip to content

Commit d3be82d

Browse files
committed
getLastTag() implemented
1 parent 32e4bad commit d3be82d

File tree

1 file changed

+40
-9
lines changed

1 file changed

+40
-9
lines changed

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

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -757,6 +757,29 @@ public VCSTag createTag(String branchName, String tagName, String tagMessage) th
757757

758758
@Override
759759
public List<VCSTag> getTags() {
760+
try (IVCSLockedWorkingCopy wc = repo.getVCSLockedWorkingCopy();
761+
Git git = getLocalGit(wc);
762+
Repository gitRepo = git.getRepository();
763+
RevWalk rw = new RevWalk(gitRepo)) {
764+
List<Ref> tagRefs = getTagRefs();
765+
List<VCSTag> res = new ArrayList<>();
766+
RevTag revTag;
767+
RevCommit revCommit;
768+
for (Ref ref : tagRefs) {
769+
revTag = rw.parseTag(ref.getObjectId());
770+
revCommit = rw.parseCommit(ref.getObjectId());
771+
VCSCommit relatedCommit = new VCSCommit(revCommit.getName(), revCommit.getFullMessage(), revCommit.getAuthorIdent().getName());
772+
VCSTag tag = new VCSTag(revTag.getTagName(), revTag.getFullMessage(), revTag.getTaggerIdent().getName(), relatedCommit);
773+
res.add(tag);
774+
}
775+
return res;
776+
} catch (Exception e) {
777+
throw new RuntimeException(e);
778+
}
779+
780+
}
781+
782+
private List<Ref> getTagRefs() throws Exception {
760783
try (IVCSLockedWorkingCopy wc = repo.getVCSLockedWorkingCopy();
761784
Git git = getLocalGit(wc);
762785
Repository gitRepo = git.getRepository();
@@ -776,17 +799,25 @@ public List<VCSTag> getTags() {
776799
.tagList()
777800
.call();
778801

802+
return refs;
803+
}
804+
}
805+
806+
@Override
807+
public VCSTag getLastTag() {
808+
try (IVCSLockedWorkingCopy wc = repo.getVCSLockedWorkingCopy();
809+
Git git = getLocalGit(wc);
810+
Repository gitRepo = git.getRepository();
811+
RevWalk rw = new RevWalk(gitRepo)) {
812+
813+
List<Ref> tagRefs = getTagRefs();
779814
RevTag revTag;
780815
RevCommit revCommit;
781-
List<VCSTag> res = new ArrayList<>();
782-
for (Ref ref : refs) {
783-
revTag = rw.parseTag(ref.getObjectId());
784-
revCommit = rw.parseCommit(ref.getObjectId());
785-
VCSCommit relatedCommit = new VCSCommit(revCommit.getName(), revCommit.getFullMessage(), revCommit.getAuthorIdent().getName());
786-
VCSTag tag = new VCSTag(revTag.getTagName(), revTag.getFullMessage(), revTag.getTaggerIdent().getName(), relatedCommit);
787-
res.add(tag);
788-
}
789-
return res;
816+
Ref ref = tagRefs.get(0);
817+
revTag = rw.parseTag(ref.getObjectId());
818+
revCommit = rw.parseCommit(ref.getObjectId());
819+
VCSCommit relatedCommit = new VCSCommit(revCommit.getName(), revCommit.getFullMessage(), revCommit.getAuthorIdent().getName());
820+
return new VCSTag(revTag.getTagName(), revTag.getFullMessage(), revTag.getTaggerIdent().getName(), relatedCommit);
790821
} catch (GitAPIException e) {
791822
throw new EVCSException(e);
792823
} catch (Exception e) {

0 commit comments

Comments
 (0)