Skip to content

Commit 3f404e8

Browse files
committed
getRevHeadCommit() and getTags() fix, compilation fix
1 parent c2d4f4c commit 3f404e8

File tree

2 files changed

+64
-36
lines changed

2 files changed

+64
-36
lines changed

src/main/java/org/scm4j/vcs/svn/SVNVCS.java

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import java.io.ByteArrayOutputStream;
44
import java.io.File;
55
import java.io.FileWriter;
6-
import java.io.UnsupportedEncodingException;
76
import java.nio.charset.StandardCharsets;
87
import java.util.ArrayList;
98
import java.util.Collection;
@@ -53,7 +52,6 @@
5352
import org.tmatesoft.svn.core.wc.SVNCopyClient;
5453
import org.tmatesoft.svn.core.wc.SVNCopySource;
5554
import org.tmatesoft.svn.core.wc.SVNDiffClient;
56-
import org.tmatesoft.svn.core.wc.SVNInfo;
5755
import org.tmatesoft.svn.core.wc.SVNRevision;
5856
import org.tmatesoft.svn.core.wc.SVNRevisionRange;
5957
import org.tmatesoft.svn.core.wc.SVNStatusType;
@@ -67,12 +65,6 @@
6765
import org.tmatesoft.svn.core.wc2.SvnOperationFactory;
6866
import org.tmatesoft.svn.core.wc2.SvnTarget;
6967

70-
import java.io.ByteArrayOutputStream;
71-
import java.io.File;
72-
import java.io.FileWriter;
73-
import java.nio.charset.StandardCharsets;
74-
import java.util.*;
75-
7668
public class SVNVCS implements IVCS {
7769
private static final int SVN_PATH_IS_NOT_WORKING_COPY_ERROR_CODE = 155007;
7870
private static final int SVN_ITEM_EXISTS_ERROR_CODE = 160020;
@@ -88,9 +80,8 @@ public class SVNVCS implements IVCS {
8880

8981
public static final String MASTER_PATH= "trunk/";
9082
public static final String BRANCHES_PATH = "branches/";
91-
public static final String SVN_VCS_TYPE_STRING = "svn";
9283
public static final String TAGS_PATH = "tags/";
93-
private static final String SVN_VCS_TYPE_STRING = "svn";
84+
public static final String SVN_VCS_TYPE_STRING = "svn";
9485

9586
public void setClientManager(SVNClientManager clientManager) {
9687
this.clientManager = clientManager;
@@ -610,9 +601,12 @@ public IVCSWorkspace getWorkspace() {
610601
@Override
611602
public VCSCommit getHeadCommit(String branchName) {
612603
try {
613-
SVNDirEntry entry = repository.info(getBranchName(branchName), -1);
614-
return new VCSCommit(Long.toString(entry.getRevision()), entry.getCommitMessage(),
615-
entry.getAuthor());
604+
SVNLogEntry entry = revToSVNEntry(getBranchName(branchName), -1L);
605+
if (entry != null) {
606+
return new VCSCommit(Long.toString(entry.getRevision()), entry.getMessage(),
607+
entry.getAuthor());
608+
}
609+
return null;
616610
} catch (SVNException e) {
617611
throw new EVCSException(e);
618612
} catch (Exception e) {
@@ -663,18 +657,26 @@ public VCSTag createTag(String branchName, String tagName, String tagMessage) th
663657
}
664658
}
665659

660+
private SVNLogEntry revToSVNEntry(String branchName, Long rev) throws Exception {
661+
@SuppressWarnings("unchecked")
662+
663+
Collection<SVNLogEntry> entries = repository.log(new String[] {branchName}, null, 0, rev, true, true);
664+
if (entries != null) {
665+
return entries.iterator().next();
666+
}
667+
return null;
668+
}
669+
666670
@Override
667671
public List<VCSTag> getTags() {
668672
Set<String> entries = new HashSet<>();
669673
try {
670674
listEntries(entries, TAGS_PATH);
671675
List<VCSTag> res = new ArrayList<>();
672676
for (String entryStr : entries) {
673-
SVNDirEntry entry = repository.info(entryStr, -1);
674-
SVNInfo info = clientManager.getWCClient().doInfo(SVNURL.parseURIEncoded(repoUrl + entryStr), SVNRevision.HEAD, SVNRevision.HEAD);
675-
676-
info.getCommittedRevision(); // tag revision number
677677

678+
SVNLogEntry entry = revToSVNEntry(entryStr, -1L);
679+
678680
class SVNTagBaseCommit implements ISVNLogEntryHandler {
679681

680682
public Long copyFromRevision;
@@ -695,12 +697,14 @@ public void handleLogEntry(SVNLogEntry logEntry) throws SVNException {
695697

696698
SVNDirEntry copyFromEntry = repository.info("", handler.copyFromRevision);
697699

698-
res.add(new VCSTag(entry.getName(), entry.getCommitMessage(), entry.getAuthor(), new VCSCommit(Long.toString(copyFromEntry.getRevision()),
700+
res.add(new VCSTag(Long.toString(entry.getRevision()), entry.getMessage(), entry.getAuthor(), new VCSCommit(Long.toString(copyFromEntry.getRevision()),
699701
copyFromEntry.getCommitMessage(), copyFromEntry.getAuthor())));
700702
}
701703
return res;
702704
} catch (SVNException e) {
703705
throw new EVCSException(e);
704-
}
706+
} catch (Exception e) {
707+
throw new RuntimeException(e);
708+
}
705709
}
706710
}

src/test/java/org/scm4j/vcs/svn/SVNVCSTest.java

Lines changed: 41 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,32 @@
11
package org.scm4j.vcs.svn;
22

3+
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertTrue;
5+
import static org.junit.Assert.fail;
6+
import static org.mockito.Matchers.any;
7+
import static org.mockito.Matchers.anyBoolean;
8+
import static org.mockito.Matchers.anyInt;
9+
import static org.mockito.Matchers.anyLong;
10+
import static org.mockito.Matchers.anyString;
11+
import static org.mockito.Matchers.isNull;
12+
import static org.mockito.Mockito.doCallRealMethod;
13+
import static org.mockito.Mockito.doReturn;
14+
import static org.mockito.Mockito.doThrow;
15+
import static org.mockito.Mockito.mock;
16+
import static org.mockito.Mockito.reset;
17+
import static org.mockito.Mockito.spy;
18+
import static org.mockito.Mockito.verify;
19+
20+
import java.io.File;
21+
import java.io.IOException;
22+
import java.io.OutputStream;
23+
import java.lang.reflect.Field;
24+
import java.lang.reflect.InvocationTargetException;
25+
import java.lang.reflect.Method;
26+
import java.lang.reflect.Modifier;
27+
import java.util.Collection;
28+
import java.util.Set;
29+
330
import org.junit.After;
431
import org.junit.Test;
532
import org.mockito.Matchers;
@@ -10,26 +37,23 @@
1037
import org.scm4j.vcs.api.abstracttest.VCSAbstractTest;
1138
import org.scm4j.vcs.api.exceptions.EVCSException;
1239
import org.scm4j.vcs.api.workingcopy.IVCSRepositoryWorkspace;
13-
import org.tmatesoft.svn.core.*;
40+
import org.tmatesoft.svn.core.ISVNLogEntryHandler;
41+
import org.tmatesoft.svn.core.SVNDepth;
42+
import org.tmatesoft.svn.core.SVNErrorCode;
43+
import org.tmatesoft.svn.core.SVNErrorMessage;
44+
import org.tmatesoft.svn.core.SVNException;
45+
import org.tmatesoft.svn.core.SVNProperties;
46+
import org.tmatesoft.svn.core.SVNURL;
1447
import org.tmatesoft.svn.core.auth.ISVNProxyManager;
1548
import org.tmatesoft.svn.core.auth.SVNAuthentication;
1649
import org.tmatesoft.svn.core.auth.SVNPasswordAuthentication;
1750
import org.tmatesoft.svn.core.internal.wc.DefaultSVNOptions;
1851
import org.tmatesoft.svn.core.io.SVNRepository;
19-
import org.tmatesoft.svn.core.wc.*;
20-
21-
import java.io.File;
22-
import java.io.IOException;
23-
import java.io.OutputStream;
24-
import java.lang.reflect.Field;
25-
import java.lang.reflect.InvocationTargetException;
26-
import java.lang.reflect.Method;
27-
import java.lang.reflect.Modifier;
28-
import java.util.Collection;
29-
import java.util.Set;
30-
31-
import static org.junit.Assert.*;
32-
import static org.mockito.Mockito.*;
52+
import org.tmatesoft.svn.core.wc.SVNClientManager;
53+
import org.tmatesoft.svn.core.wc.SVNCommitClient;
54+
import org.tmatesoft.svn.core.wc.SVNStatusClient;
55+
import org.tmatesoft.svn.core.wc.SVNStatusType;
56+
import org.tmatesoft.svn.core.wc.SVNWCClient;
3357

3458
public class SVNVCSTest extends VCSAbstractTest {
3559

@@ -96,7 +120,7 @@ public void testSVNVCSCreation() {
96120
IVCSRepositoryWorkspace mockedWS = mock(IVCSRepositoryWorkspace.class);
97121
doReturn("wrong_protocol://www.ru").when(mockedWS).getRepoUrl();
98122
try {
99-
IVCS vcs = new SVNVCS(mockedWS, "", "");
123+
new SVNVCS(mockedWS, "", "");
100124
fail();
101125
} catch (EVCSException e) {
102126
assertTrue(e.getCause() instanceof SVNException);
@@ -133,7 +157,7 @@ public void testExceptions() throws Exception {
133157
for (Method m : IVCS.class.getDeclaredMethods()) {
134158
Object[] params = new Object[m.getParameterTypes().length];
135159
Integer i = 0;
136-
for (Class clazz : m.getParameterTypes()) {
160+
for (Class<?> clazz : m.getParameterTypes()) {
137161
params[i] = clazz.isPrimitive() ? 0: null;
138162
i++;
139163
}

0 commit comments

Comments
 (0)