Author: chatellier Date: 2009-10-15 13:23:02 +0000 (Thu, 15 Oct 2009) New Revision: 2664 Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/vcs/VCS.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/vcs/VCSNone.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/vcs/VCSSVN.java Log: Add get local file status operation Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/vcs/VCS.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/vcs/VCS.java 2009-10-14 16:45:10 UTC (rev 2663) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/vcs/VCS.java 2009-10-15 13:23:02 UTC (rev 2664) @@ -45,6 +45,16 @@ public static final String TYPE_SVN = "svn"; /** + * VCS Status type. + */ + public enum Status { + STATUS_NORMAL, + STATUS_ADDED, + STATUS_MODIFIED, + STATUS_DELETED, + } + + /** * can be None, CVS or SVN. only None or SVN work */ public static final String VCS_TYPE = "vcs.type"; @@ -188,6 +198,15 @@ String getDiff(File file) throws VCSException; /** + * Get file local status. + * + * @param file file to get status + * @return file status + * @throws VCSException + */ + Status getLocalStatus(File file) throws VCSException; + + /** * Return list of all file on directory on remote server. * * @param directory Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/vcs/VCSNone.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/vcs/VCSNone.java 2009-10-14 16:45:10 UTC (rev 2663) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/vcs/VCSNone.java 2009-10-15 13:23:02 UTC (rev 2664) @@ -136,6 +136,14 @@ throw new VCSException("Can't diff with dummy VCS"); } + /* + * @see fr.ifremer.isisfish.vcs.VCS#getLocalStatus(java.io.File) + */ + @Override + public Status getLocalStatus(File file) throws VCSException { + return Status.STATUS_NORMAL; + } + /** * Return list of all file on directory on remote server. * Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/vcs/VCSSVN.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/vcs/VCSSVN.java 2009-10-14 16:45:10 UTC (rev 2663) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/vcs/VCSSVN.java 2009-10-15 13:23:02 UTC (rev 2664) @@ -567,6 +567,35 @@ } } + /* + * @see fr.ifremer.isisfish.vcs.VCS#getLocalStatus(java.io.File) + */ + @Override + public Status getLocalStatus(File file) throws VCSException { + + Status resultStatus = Status.STATUS_NORMAL; + + try { + SVNStatusClient statusClient = getSVNManager().getStatusClient(); + SVNStatusType svnStatus = statusClient.doStatus(file, false).getContentsStatus(); + + if (svnStatus == SVNStatusType.STATUS_MODIFIED) { + resultStatus = Status.STATUS_MODIFIED; + } + else if (svnStatus == SVNStatusType.STATUS_DELETED) { + resultStatus = Status.STATUS_DELETED; + } + else if (svnStatus == SVNStatusType.STATUS_ADDED || svnStatus == SVNStatusType.STATUS_UNVERSIONED) { + resultStatus = Status.STATUS_ADDED; + } + + } catch (SVNException e) { + throw new VCSException("Can't get local status", e); + } + + return resultStatus; + } + /** * Recherche le statut des fichiers locaux, ne retourne jamais les fichiers * NORMAL ou NONE sauf si demandé explicitement via wanted @@ -946,8 +975,7 @@ try { SVNStatusClient statusClient = getSVNManager().getStatusClient(); - SVNStatus status = statusClient - .doStatus(localFile, true /*remote*/); + SVNStatus status = statusClient.doStatus(localFile, true /*remote*/); SVNStatusType localStatus = status.getContentsStatus(); SVNStatusType remoteStatus = status.getRemoteContentsStatus(); @@ -957,12 +985,12 @@ localFile.getAbsolutePath(), localStatus, remoteStatus)); } - + // don't return true if: // - file is locally added // - file is remotely deleted - if (!localStatus.equals(SVNStatusType.STATUS_ADDED) - && !remoteStatus.equals(SVNStatusType.STATUS_DELETED)) { + if (!localStatus.equals(SVNStatusType.STATUS_ADDED) && + !remoteStatus.equals(SVNStatusType.STATUS_UNVERSIONED)) { result = true; }