diff -r cdd693dc844c versioning/apichanges.xml
--- a/versioning/apichanges.xml Thu Mar 13 10:31:56 2008 +0100
+++ b/versioning/apichanges.xml Thu Mar 13 18:31:45 2008 +0100
@@ -108,6 +108,21 @@ is the proper place.
+ Added isMutable() method to VCSInterceptor
+
+
+
+
+
+ This new method provides ability to override default File.canWrite() query for versioning systems that
+ keep files read-only on disk and are able to make them read-write on demand in the interceptor (eg. in doDelete()).
+
+
+
+
+
+
+
Added getFiles() method to VCSContext
diff -r cdd693dc844c versioning/nbproject/project.properties
--- a/versioning/nbproject/project.properties Thu Mar 13 10:31:56 2008 +0100
+++ b/versioning/nbproject/project.properties Thu Mar 13 18:31:45 2008 +0100
@@ -41,14 +41,14 @@ javac.source=1.5
javac.source=1.5
javadoc.name=Versioning
-spec.version.base=1.6.0
+spec.version.base=1.7.0
is.autoload=true
javadoc.arch=${basedir}/arch.xml
javadoc.apichanges=${basedir}/apichanges.xml
# unit tests extra setup
-test-unit-sys-prop.data.root.dir=${basedir}/test/work/sys/data
+test-unit-sys-prop.data.root.dir=${basedir}/work/sys/data
test.unit.cp.extra=${openide.util.dir}/lib/org-openide-util.jar:\
${core.startup.dir}/core/core.jar:\
diff -r cdd693dc844c versioning/nbproject/project.xml
--- a/versioning/nbproject/project.xml Thu Mar 13 10:31:56 2008 +0100
+++ b/versioning/nbproject/project.xml Thu Mar 13 18:31:45 2008 +0100
@@ -96,7 +96,7 @@ made subject to such option by the copyr
2
- 1.2
+ 1.14
diff -r cdd693dc844c versioning/src/org/netbeans/modules/versioning/FilesystemInterceptor.java
--- a/versioning/src/org/netbeans/modules/versioning/FilesystemInterceptor.java Thu Mar 13 10:31:56 2008 +0100
+++ b/versioning/src/org/netbeans/modules/versioning/FilesystemInterceptor.java Thu Mar 13 18:31:45 2008 +0100
@@ -106,6 +106,22 @@ class FilesystemInterceptor extends Prov
return filesystems;
}
+ // ==================================================================================================
+ // QUERIES
+ // ==================================================================================================
+
+ @Override
+ public boolean canWrite(File file) {
+ if (file.canWrite()) {
+ return true;
+ }
+ if (!file.exists()) {
+ return false;
+ }
+ // can be optimized by taking out local history from the search
+ return getInterceptor(file, false).isMutable(file);
+ }
+
// ==================================================================================================
// CHANGE
// ==================================================================================================
@@ -362,6 +378,10 @@ class FilesystemInterceptor extends Prov
this.isDirectory = isDirectory;
}
+ public boolean isMutable(File file) {
+ return interceptor.isMutable(file);
+ }
+
public boolean beforeDelete() {
lhInterceptor.beforeDelete(file);
return interceptor.beforeDelete(file);
diff -r cdd693dc844c versioning/src/org/netbeans/modules/versioning/spi/VCSInterceptor.java
--- a/versioning/src/org/netbeans/modules/versioning/spi/VCSInterceptor.java Thu Mar 13 10:31:56 2008 +0100
+++ b/versioning/src/org/netbeans/modules/versioning/spi/VCSInterceptor.java Thu Mar 13 18:31:45 2008 +0100
@@ -54,6 +54,24 @@ public abstract class VCSInterceptor {
* Protected constructor, does nothing.
*/
protected VCSInterceptor() {
+ }
+
+ // ==================================================================================================
+ // QUERIES
+ // ==================================================================================================
+
+ /**
+ * Queries the versioning system for file mutability (write, delete, move). Versioning systems that keep files
+ * read-only in working copy can override this method to signal that such files are in fact mutable even if
+ * they appear read-only on local file system. When IDE eventually tries to delete or write to these files then
+ * the Versioning system should intercept these calls and make requested files writable on-demand.
+ *
+ * @param file a file to query
+ * @return true if the file is mutable (writable, deletable and movable), false otherwise
+ * @since 1.7
+ */
+ public boolean isMutable(File file) {
+ return file.canWrite();
}
// ==================================================================================================
diff -r cdd693dc844c versioning/test/unit/src/org/netbeans/modules/versioning/spi/VCSInterceptorTest.java
--- a/versioning/test/unit/src/org/netbeans/modules/versioning/spi/VCSInterceptorTest.java Thu Mar 13 10:31:56 2008 +0100
+++ b/versioning/test/unit/src/org/netbeans/modules/versioning/spi/VCSInterceptorTest.java Thu Mar 13 18:31:45 2008 +0100
@@ -80,6 +80,22 @@ public class VCSInterceptorTest extends
inteceptor.clearTestData();
}
+ public void testIsMutable() throws IOException {
+ File f = new File(dataRootDir, "workdir/root-test-versioned");
+ FileObject fo = FileUtil.toFileObject(f);
+ fo = fo.createData("checkme.txt");
+ File file = FileUtil.toFile(fo);
+ fo.canWrite();
+ assertTrue(inteceptor.getBeforeCreateFiles().contains(file));
+ assertTrue(inteceptor.getDoCreateFiles().contains(file));
+ assertTrue(inteceptor.getCreatedFiles().contains(file));
+ assertFalse(inteceptor.getIsMutableFiles().contains(file));
+
+ file.setReadOnly();
+ fo.canWrite();
+ assertTrue(inteceptor.getIsMutableFiles().contains(file));
+ }
+
public void testChangedFile() throws IOException {
File f = new File(dataRootDir, "workdir/root-test-versioned");
FileObject fo = FileUtil.toFileObject(f);
diff -r cdd693dc844c 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 Thu Mar 13 10:31:56 2008 +0100
+++ b/versioning/test/unit/src/org/netbeans/modules/versioning/spi/testvcs/TestVCSInterceptor.java Thu Mar 13 18:31:45 2008 +0100
@@ -62,8 +62,14 @@ public class TestVCSInterceptor extends
private final List beforeEditFiles = new ArrayList();
private final List beforeChangeFiles = new ArrayList();
private final List afterChangeFiles = new ArrayList();
+ private final List isMutableFiles = new ArrayList();
public TestVCSInterceptor() {
+ }
+
+ public boolean isMutable(File file) {
+ isMutableFiles.add(file);
+ return super.isMutable(file);
}
public boolean beforeCreate(File file, boolean isDirectory) {
@@ -127,6 +133,10 @@ public class TestVCSInterceptor extends
beforeEditFiles.add(file);
}
+ public List getIsMutableFiles() {
+ return isMutableFiles;
+ }
+
public List getBeforeCreateFiles() {
return beforeCreateFiles;
}
@@ -183,5 +193,6 @@ public class TestVCSInterceptor extends
beforeEditFiles.clear();
beforeChangeFiles.clear();
afterChangeFiles.clear();
+ isMutableFiles.clear();
}
}