Author: echatellier Date: 2012-06-07 14:54:19 +0200 (Thu, 07 Jun 2012) New Revision: 3705 Url: http://forge.codelutin.com/repositories/revision/isis-fish/3705 Log: fixes #654 : Update to svnkit 1.7.0 Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/vcs/VCSSVN.java branches/4.0.1/src/test/java/fr/ifremer/isisfish/vcs/VCSSVNTest.java Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/vcs/VCSSVN.java =================================================================== --- branches/4.0.1/src/main/java/fr/ifremer/isisfish/vcs/VCSSVN.java 2012-06-07 12:26:38 UTC (rev 3704) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/vcs/VCSSVN.java 2012-06-07 12:54:19 UTC (rev 3705) @@ -961,12 +961,31 @@ localFile = getLocalRepository(); } - boolean result = false; + boolean isOnRemote = false; try { SVNStatusClient statusClient = getSVNManager().getStatusClient(); - SVNStatus status = statusClient.doStatus(localFile, true /*remote*/); + + // TODO echatellier 20120606 broken since 1.7.4, but code is ok + //SVNStatus status = statusClient.doStatus(localFile, true /*remote*/); + final SVNStatus[] result = new SVNStatus[] {null}; + final File absPath = localFile.getAbsoluteFile(); + ISVNStatusHandler handler = new ISVNStatusHandler() { + public void handleStatus(SVNStatus status) { + if (absPath.equals(status.getFile())) { + if (result[0] != null && result[0].getContentsStatus() == SVNStatusType.STATUS_EXTERNAL && absPath.isDirectory()) { + result[0] = status; + result[0].markExternal(); + } else if (result[0] == null) { + result[0] = status; + } + } + } + }; + statusClient.doStatus(absPath, SVNRevision.HEAD, SVNDepth.IMMEDIATES, true, true, true, false, handler, null); + // end svnkit code copy + SVNStatus status = result[0]; SVNStatusType localStatus = status.getNodeStatus(); SVNStatusType remoteStatus = status.getRemoteNodeStatus(); @@ -982,7 +1001,7 @@ if (!localStatus.equals(SVNStatusType.STATUS_ADDED) && !remoteStatus.equals(SVNStatusType.STATUS_UNVERSIONED) && !remoteStatus.equals(SVNStatusType.STATUS_DELETED)) { - result = true; + isOnRemote = true; } } catch (SVNException e) { @@ -995,7 +1014,7 @@ } } - return result; + return isOnRemote; } /** @@ -1013,13 +1032,31 @@ localFile = getLocalRepository(); } - boolean result = false; + boolean isUpToDate = false; try { SVNStatusClient statusClient = getSVNManager().getStatusClient(); - SVNStatus status = statusClient - .doStatus(localFile, true /*remote*/); + // TODO echatellier 20120606 broken since 1.7.4, but code is ok + //SVNStatus status = statusClient.doStatus(localFile, true /*remote*/); + final SVNStatus[] result = new SVNStatus[] {null}; + final File absPath = localFile.getAbsoluteFile(); + ISVNStatusHandler handler = new ISVNStatusHandler() { + public void handleStatus(SVNStatus status) { + if (absPath.equals(status.getFile())) { + if (result[0] != null && result[0].getContentsStatus() == SVNStatusType.STATUS_EXTERNAL && absPath.isDirectory()) { + result[0] = status; + result[0].markExternal(); + } else if (result[0] == null) { + result[0] = status; + } + } + } + }; + statusClient.doStatus(absPath, SVNRevision.HEAD, SVNDepth.IMMEDIATES, true, true, true, false, handler, null); + // end svnkit code copy + SVNStatus status = result[0]; + SVNStatusType localStatus = status.getNodeStatus(); SVNStatusType remoteStatus = status.getRemoteNodeStatus(); @@ -1027,7 +1064,7 @@ // si le status local est normal et le distant est none if (localStatus == SVNStatusType.STATUS_NORMAL && remoteStatus == SVNStatusType.STATUS_NONE) { - result = true; + isUpToDate = true; } } catch (SVNException eee) { @@ -1035,7 +1072,7 @@ eee); } - return result; + return isUpToDate; } /* Modified: branches/4.0.1/src/test/java/fr/ifremer/isisfish/vcs/VCSSVNTest.java =================================================================== --- branches/4.0.1/src/test/java/fr/ifremer/isisfish/vcs/VCSSVNTest.java 2012-06-07 12:26:38 UTC (rev 3704) +++ branches/4.0.1/src/test/java/fr/ifremer/isisfish/vcs/VCSSVNTest.java 2012-06-07 12:54:19 UTC (rev 3705) @@ -434,10 +434,10 @@ /** * Return all changelog between local file version and remote repository * file version. + * * @throws VCSException * @throws IOException * @throws SVNException - * */ @Test public void testGetChanglog() throws VCSException, IOException,