diff -r 80b660cf4880 versioning/apichanges.xml --- a/versioning/apichanges.xml Tue Feb 17 00:25:26 2009 +0300 +++ b/versioning/apichanges.xml Tue Feb 17 17:02:54 2009 +0100 @@ -106,6 +106,24 @@ + + + Added getCollocationQueryImplementation() method to VersioningSystem + + + + + + New method getAttribute(File file, String attrName). Provides additional VCS specific information + about versioned files. The only supported attribute at this moment is + "ProvidedExtensions.RemoteLocation" for which VCS systems + overrinding getAttribute should return the files remote repository, resp. remote origin. + (e.g. Repository URL in case of SVN or default pull in case of Mercurial). + + + + + Added getCollocationQueryImplementation() method to VersioningSystem diff -r 80b660cf4880 versioning/nbproject/project.properties --- a/versioning/nbproject/project.properties Tue Feb 17 00:25:26 2009 +0300 +++ b/versioning/nbproject/project.properties Tue Feb 17 17:02:54 2009 +0100 @@ -41,7 +41,7 @@ javac.source=1.5 javadoc.name=Versioning -spec.version.base=1.9.0 +spec.version.base=1.10.0 is.autoload=true javadoc.arch=${basedir}/arch.xml diff -r 80b660cf4880 versioning/src/org/netbeans/modules/versioning/FilesystemInterceptor.java --- a/versioning/src/org/netbeans/modules/versioning/FilesystemInterceptor.java Tue Feb 17 00:25:26 2009 +0300 +++ b/versioning/src/org/netbeans/modules/versioning/FilesystemInterceptor.java Tue Feb 17 17:02:54 2009 +0100 @@ -55,6 +55,11 @@ */ class FilesystemInterceptor extends ProvidedExtensions implements FileChangeListener { + /** + * A verioned files remote repository or origin. + */ + private static final String ATTRIBUTE_REMOTE_LOCATION = "ProvidedExtensions.RemoteLocation"; + private VersioningManager master; // === LIFECYCLE ======================================================================================= @@ -93,6 +98,15 @@ } // can be optimized by taking out local history from the search return getInterceptor(file, false).isMutable(file); + } + + @Override + public Object getAttribute(File file, String attrName) { + if(ATTRIBUTE_REMOTE_LOCATION.equals(attrName)) { + return getInterceptor(file, file.isDirectory()).getAttribute(attrName); + } else { + return null; + } } // ================================================================================================== @@ -333,6 +347,10 @@ return interceptor.isMutable(file); } + private String getAttribute(String attrName) { + return interceptor.getAttribute(file, attrName); + } + public boolean beforeDelete() { lhInterceptor.beforeDelete(file); return interceptor.beforeDelete(file); @@ -454,7 +472,6 @@ return false; } } - // VCSInterceptor getInterceptor() { // return interceptor; // } diff -r 80b660cf4880 versioning/src/org/netbeans/modules/versioning/spi/VCSInterceptor.java --- a/versioning/src/org/netbeans/modules/versioning/spi/VCSInterceptor.java Tue Feb 17 00:25:26 2009 +0300 +++ b/versioning/src/org/netbeans/modules/versioning/spi/VCSInterceptor.java Tue Feb 17 17:02:54 2009 +0100 @@ -55,7 +55,7 @@ */ protected VCSInterceptor() { } - + // ================================================================================================== // QUERIES // ================================================================================================== @@ -73,7 +73,20 @@ public boolean isMutable(File file) { return file.canWrite(); } - + + /** + * Queries the versioning system for a files VCS specific attribute. At the momement the + * only supported attribute name is ProvidedExtensions.RemoteLocation + * + * @param file a file to get the attribute for + * @param attrName te attributes name + * @return the attributes value or null if not available + * @since 1.10 + */ + public String getAttribute(File file, String attrName) { + return null; + } + // ================================================================================================== // DELETE // ================================================================================================== diff -r 80b660cf4880 versioning/test/unit/src/org/netbeans/modules/versioning/spi/VCSInterceptorTest.java --- a/versioning/test/unit/src/org/netbeans/modules/versioning/spi/VCSInterceptorTest.java Tue Feb 17 00:25:26 2009 +0300 +++ b/versioning/test/unit/src/org/netbeans/modules/versioning/spi/VCSInterceptorTest.java Tue Feb 17 17:02:54 2009 +0100 @@ -69,7 +69,8 @@ protected void setUp() throws Exception { super.setUp(); - dataRootDir = new File(System.getProperty("data.root.dir")); + dataRootDir = new File("/tmp/"); //new File(System.getProperty("data.root.dir")); + if(!dataRootDir.exists()) dataRootDir.mkdirs(); Lookup.getDefault().lookupAll(VersioningSystem.class); inteceptor = (TestVCSInterceptor) TestVCS.getInstance().getVCSInterceptor(); File f = new File(dataRootDir, "workdir/root-test-versioned/deleteme.txt"); @@ -94,6 +95,20 @@ file.setReadOnly(); fo.canWrite(); assertTrue(inteceptor.getIsMutableFiles().contains(file)); + } + + public void testGetAttribute() throws IOException { + File f = new File(dataRootDir, "workdir/root-test-versioned"); + FileObject fo = FileUtil.toFileObject(f); + fo = fo.createData("gotattr.txt"); + File file = FileUtil.toFile(fo); + + String attr = (String) fo.getAttribute("ProvidedExtensions.RemoteLocation"); + assertNotNull(attr); + assertTrue(attr.endsWith(file.getName())); + + attr = (String) fo.getAttribute("whatever"); + assertNull(attr); } public void testChangedFile() throws IOException { diff -r 80b660cf4880 versioning/test/unit/src/org/netbeans/modules/versioning/spi/testvcs/TestVCSInterceptor.java --- a/versioning/test/unit/src/org/netbeans/modules/versioning/spi/testvcs/TestVCSInterceptor.java Tue Feb 17 00:25:26 2009 +0300 +++ b/versioning/test/unit/src/org/netbeans/modules/versioning/spi/testvcs/TestVCSInterceptor.java Tue Feb 17 17:02:54 2009 +0100 @@ -70,6 +70,10 @@ public boolean isMutable(File file) { isMutableFiles.add(file); return super.isMutable(file); + } + + public String getAttribute(File file, String attrName) { + return "http://a.repository.far.far.away/" + file.getName(); } public boolean beforeCreate(File file, boolean isDirectory) {