Skip to content

Commit 7620a61

Browse files
committed
fixed branches prefixing
1 parent eeb1207 commit 7620a61

File tree

2 files changed

+38
-50
lines changed

2 files changed

+38
-50
lines changed

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

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -437,11 +437,21 @@ public Set<String> getBranches(String path) {
437437

438438
protected List<String> listEntries(String path) throws Exception {
439439
List<String> res = new ArrayList<>();
440-
if (repository.checkPath(path , -1) == SVNNodeKind.NONE) {
440+
if (path == null) {
441441
return res;
442442
}
443+
path = path.trim();
444+
String lastFolder;
445+
String folderPrefix;
446+
int lastSlashIndex = path.lastIndexOf("/");
447+
lastFolder = lastSlashIndex > 0 ? path.substring(0, lastSlashIndex) : path;
448+
folderPrefix = lastSlashIndex > 0 ? path.substring(lastSlashIndex + 1) : "";
449+
if (repository.checkPath(lastFolder , -1) == SVNNodeKind.NONE) {
450+
return res;
451+
}
452+
443453
@SuppressWarnings("unchecked")
444-
Collection<SVNDirEntry> entries = repository.getDir(path, -1 , null , (Collection<SVNDirEntry>) null);
454+
Collection<SVNDirEntry> entries = repository.getDir(lastFolder, -1 , null , (Collection<SVNDirEntry>) null);
445455
List<SVNDirEntry> entriesList = new ArrayList<>(entries);
446456
Collections.sort(entriesList, new Comparator<SVNDirEntry>() {
447457
@Override
@@ -456,9 +466,8 @@ public int compare(SVNDirEntry o1, SVNDirEntry o2) {
456466
}
457467
});
458468
for (SVNDirEntry entry : entriesList) {
459-
if (entry.getKind() == SVNNodeKind.DIR) {
460-
res.add((path.isEmpty() ? "" : StringUtils.appendIfMissing(path, "/")) + entry.getName());
461-
res.addAll(listEntries((path.equals("")) ? entry.getName() : path + entry.getName()));
469+
if (entry.getKind() == SVNNodeKind.DIR && entry.getName().startsWith(folderPrefix)) {
470+
res.add((path.isEmpty() ? "" : StringUtils.appendIfMissing(lastFolder, "/")) + entry.getName());
462471
}
463472
}
464473

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

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

3-
import static org.junit.Assert.assertEquals;
4-
import static org.junit.Assert.assertNotNull;
5-
import static org.junit.Assert.assertNull;
6-
import static org.junit.Assert.assertTrue;
7-
import static org.junit.Assert.fail;
8-
import static org.mockito.Matchers.any;
9-
import static org.mockito.Matchers.anyBoolean;
10-
import static org.mockito.Matchers.anyLong;
11-
import static org.mockito.Matchers.anyString;
12-
import static org.mockito.Matchers.isNull;
13-
import static org.mockito.Mockito.doCallRealMethod;
14-
import static org.mockito.Mockito.doReturn;
15-
import static org.mockito.Mockito.doThrow;
16-
import static org.mockito.Mockito.mock;
17-
import static org.mockito.Mockito.reset;
18-
import static org.mockito.Mockito.spy;
19-
import static org.mockito.Mockito.verify;
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.Arrays;
29-
import java.util.Collection;
30-
import java.util.List;
31-
323
import org.junit.After;
334
import org.junit.Test;
345
import org.mockito.Matchers;
@@ -39,25 +10,32 @@
3910
import org.scm4j.vcs.api.abstracttest.VCSAbstractTest;
4011
import org.scm4j.vcs.api.exceptions.EVCSException;
4112
import org.scm4j.vcs.api.workingcopy.IVCSRepositoryWorkspace;
42-
import org.tmatesoft.svn.core.ISVNLogEntryHandler;
43-
import org.tmatesoft.svn.core.SVNDepth;
44-
import org.tmatesoft.svn.core.SVNDirEntry;
45-
import org.tmatesoft.svn.core.SVNErrorCode;
46-
import org.tmatesoft.svn.core.SVNErrorMessage;
47-
import org.tmatesoft.svn.core.SVNException;
48-
import org.tmatesoft.svn.core.SVNNodeKind;
49-
import org.tmatesoft.svn.core.SVNProperties;
50-
import org.tmatesoft.svn.core.SVNURL;
13+
import org.tmatesoft.svn.core.*;
5114
import org.tmatesoft.svn.core.auth.ISVNProxyManager;
5215
import org.tmatesoft.svn.core.auth.SVNAuthentication;
5316
import org.tmatesoft.svn.core.auth.SVNPasswordAuthentication;
5417
import org.tmatesoft.svn.core.internal.wc.DefaultSVNOptions;
5518
import org.tmatesoft.svn.core.io.SVNRepository;
56-
import org.tmatesoft.svn.core.wc.SVNClientManager;
57-
import org.tmatesoft.svn.core.wc.SVNCommitClient;
58-
import org.tmatesoft.svn.core.wc.SVNStatusClient;
59-
import org.tmatesoft.svn.core.wc.SVNStatusType;
60-
import org.tmatesoft.svn.core.wc.SVNWCClient;
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.Arrays;
29+
import java.util.Collection;
30+
import java.util.List;
31+
32+
import static org.junit.Assert.*;
33+
import static org.mockito.Matchers.any;
34+
import static org.mockito.Matchers.anyBoolean;
35+
import static org.mockito.Matchers.anyLong;
36+
import static org.mockito.Matchers.anyString;
37+
import static org.mockito.Matchers.isNull;
38+
import static org.mockito.Mockito.*;
6139

6240
public class SVNVCSTest extends VCSAbstractTest {
6341

@@ -435,8 +413,9 @@ public void testSVNVCSUtilsCreation() {
435413
public void testListEntriesNone() throws Exception {
436414
SVNRepository mockedRepo = spy(svn.getSVNRepository());
437415
svn.setSVNRepository(mockedRepo);
438-
doReturn(SVNNodeKind.NONE).when(mockedRepo).checkPath((String) isNull(), anyLong());
439-
svn.listEntries(null); // expecting no NPE
416+
doReturn(SVNNodeKind.NONE).when(mockedRepo).checkPath(anyString(), anyLong());
417+
assertTrue(svn.listEntries("").isEmpty());
418+
assertTrue(svn.listEntries(null).isEmpty()); // expecting no NPE
440419
}
441420

442421
@Test

0 commit comments

Comments
 (0)