summaryrefslogtreecommitdiffstats
path: root/sched
diff options
context:
space:
mode:
authorJean-Philippe Lesot <jplesot@google.com>2015-01-22 19:08:32 +0100
committerJean-Philippe Lesot <jplesot@google.com>2015-01-22 19:08:32 +0100
commitaa09abff92b437af1dab07a65ed9c2e5b101312c (patch)
tree8f416066eea6eb629e686b097e1277042bee491d /sched
parent75f5c833e30ca131eaaf4331e320b3affdbe1c03 (diff)
downloadtoolchain_jack-aa09abff92b437af1dab07a65ed9c2e5b101312c.tar.gz
toolchain_jack-aa09abff92b437af1dab07a65ed9c2e5b101312c.tar.bz2
toolchain_jack-aa09abff92b437af1dab07a65ed9c2e5b101312c.zip
Add VDir.isEmpty() method
- Add also in VFSBase - Add implementations everywhere - Use in CaseInsensitiveFS to differentiate between a clean new VFS or a VFS without the index file Change-Id: I699afbb6c0ca5985a2e6424ebcc0899033a6f6a7
Diffstat (limited to 'sched')
-rw-r--r--sched/src/com/android/sched/vfs/BaseVDir.java5
-rw-r--r--sched/src/com/android/sched/vfs/BaseVFS.java4
-rw-r--r--sched/src/com/android/sched/vfs/CaseInsensitiveFS.java15
-rw-r--r--sched/src/com/android/sched/vfs/DeflateFS.java5
-rw-r--r--sched/src/com/android/sched/vfs/DirectFS.java8
-rw-r--r--sched/src/com/android/sched/vfs/InMemoryVDir.java9
-rw-r--r--sched/src/com/android/sched/vfs/VDir.java2
7 files changed, 40 insertions, 8 deletions
diff --git a/sched/src/com/android/sched/vfs/BaseVDir.java b/sched/src/com/android/sched/vfs/BaseVDir.java
index 73dd3796..8ee6a96f 100644
--- a/sched/src/com/android/sched/vfs/BaseVDir.java
+++ b/sched/src/com/android/sched/vfs/BaseVDir.java
@@ -129,6 +129,11 @@ abstract class BaseVDir extends BaseVElement implements VDir {
}
@Override
+ public boolean isEmpty() {
+ return vfs.isEmpty(this);
+ }
+
+ @Override
public boolean isVDir() {
return true;
}
diff --git a/sched/src/com/android/sched/vfs/BaseVFS.java b/sched/src/com/android/sched/vfs/BaseVFS.java
index a5c5ba9a..e5ba32bb 100644
--- a/sched/src/com/android/sched/vfs/BaseVFS.java
+++ b/sched/src/com/android/sched/vfs/BaseVFS.java
@@ -74,7 +74,9 @@ abstract class BaseVFS<DIR extends BaseVDir, FILE extends BaseVFile> implements
abstract void delete(@Nonnull FILE file) throws CannotDeleteFileException;
@Nonnull
- abstract Collection<? extends BaseVElement> list(DIR dir);
+ abstract Collection<? extends BaseVElement> list(@Nonnull DIR dir);
+
+ abstract boolean isEmpty(@Nonnull DIR dir);
//
// Location related
diff --git a/sched/src/com/android/sched/vfs/CaseInsensitiveFS.java b/sched/src/com/android/sched/vfs/CaseInsensitiveFS.java
index 4a021e75..acd3bf86 100644
--- a/sched/src/com/android/sched/vfs/CaseInsensitiveFS.java
+++ b/sched/src/com/android/sched/vfs/CaseInsensitiveFS.java
@@ -150,7 +150,11 @@ public class CaseInsensitiveFS extends BaseVFS<CaseInsensitiveVDir, CaseInsensit
try {
file = vfs.getRootDir().getVFile(INDEX_NAME);
} catch (NoSuchFileException e) {
- // No file index, consider FS empty
+ if (!vfs.getRootDir().isEmpty()) {
+ // If VFS is not empty, index file is missing
+ throw new WrongVFSFormatException(this, vfs.getLocation(), e);
+ }
+
return;
} catch (NotFileException e) {
throw new WrongVFSFormatException(this, vfs.getLocation(), e);
@@ -366,6 +370,11 @@ public class CaseInsensitiveFS extends BaseVFS<CaseInsensitiveVDir, CaseInsensit
throw new UnsupportedOperationException();
}
+ @Override
+ boolean isEmpty(@Nonnull CaseInsensitiveVDir dir) {
+ throw new UnsupportedOperationException();
+ }
+
//
// Location
//
@@ -417,10 +426,6 @@ public class CaseInsensitiveFS extends BaseVFS<CaseInsensitiveVDir, CaseInsensit
return vfs.needsSequentialWriting();
}
- synchronized boolean isClosed() {
- return closed;
- }
-
//
// Encode / Decode
//
diff --git a/sched/src/com/android/sched/vfs/DeflateFS.java b/sched/src/com/android/sched/vfs/DeflateFS.java
index 3a362d9c..84815813 100644
--- a/sched/src/com/android/sched/vfs/DeflateFS.java
+++ b/sched/src/com/android/sched/vfs/DeflateFS.java
@@ -106,6 +106,11 @@ public class DeflateFS extends BaseVFS<BaseVDir, BaseVFile> implements VFS{
}
@Override
+ boolean isEmpty(@Nonnull BaseVDir dir) {
+ return vfs.isEmpty(dir);
+ }
+
+ @Override
@Nonnull
BaseVFile createVFile(@Nonnull BaseVDir parent, @Nonnull String name)
throws CannotCreateFileException {
diff --git a/sched/src/com/android/sched/vfs/DirectFS.java b/sched/src/com/android/sched/vfs/DirectFS.java
index 030c30e1..fbf1f9c9 100644
--- a/sched/src/com/android/sched/vfs/DirectFS.java
+++ b/sched/src/com/android/sched/vfs/DirectFS.java
@@ -147,6 +147,14 @@ public class DirectFS extends BaseVFS<ParentVDir, ParentVFile> implements VFS {
}
@Override
+ boolean isEmpty(@Nonnull ParentVDir dir) {
+ assert !isClosed();
+ assert (permissions & Permission.READ) != 0;
+
+ return getNativeFile(dir.getPath()).listFiles().length == 0;
+ }
+
+ @Override
@Nonnull
ParentVFile createVFile(@Nonnull ParentVDir parent, @Nonnull String name)
throws CannotCreateFileException {
diff --git a/sched/src/com/android/sched/vfs/InMemoryVDir.java b/sched/src/com/android/sched/vfs/InMemoryVDir.java
index 43809ad0..8d476b52 100644
--- a/sched/src/com/android/sched/vfs/InMemoryVDir.java
+++ b/sched/src/com/android/sched/vfs/InMemoryVDir.java
@@ -33,8 +33,8 @@ import javax.annotation.Nonnull;
* A 'in-memory' implementation of a {@link VDir}. All sub-elements are cached in-memory for ever.
*
* When using this {@link VDir} implementation, a {@link BaseVFS} implementation has no need to
- * implement {@link BaseVFS#getVFile(BaseVDir, String)}, {@link BaseVFS#getVDir(BaseVDir, String)}
- * and {@link BaseVFS#list(BaseVDir)}.
+ * implement {@link BaseVFS#getVFile(BaseVDir, String)}, {@link BaseVFS#getVDir(BaseVDir, String)},
+ * {@link BaseVFS#isEmpty(BaseVDir)} and {@link BaseVFS#list(BaseVDir)}.
*/
abstract class InMemoryVDir extends BaseVDir {
@Nonnull
@@ -132,5 +132,10 @@ abstract class InMemoryVDir extends BaseVDir {
return Collections.unmodifiableCollection(map.values());
}
+
+ @Override
+ public boolean isEmpty() {
+ return map.isEmpty();
+ }
}
diff --git a/sched/src/com/android/sched/vfs/VDir.java b/sched/src/com/android/sched/vfs/VDir.java
index 63792e75..2720ecdf 100644
--- a/sched/src/com/android/sched/vfs/VDir.java
+++ b/sched/src/com/android/sched/vfs/VDir.java
@@ -34,6 +34,8 @@ public interface VDir extends VElement, HasLocation {
@Nonnull
VPath getPath();
+ boolean isEmpty();
+
@Nonnull
Collection<? extends VElement> list();