summaryrefslogtreecommitdiffstats
path: root/sched
diff options
context:
space:
mode:
authorBenoit Lamarche <benoitlamarche@google.com>2015-05-20 15:44:41 +0200
committerBenoit Lamarche <benoitlamarche@google.com>2015-05-29 11:53:49 +0200
commit6007144b3ab9a8c59648fa35a0af920d2a64356e (patch)
tree7f41b302e5727ad374e06ba5e3944e77fc4a3a02 /sched
parente4ad6f2404104556a4c7c4c356fd922117418c3c (diff)
downloadtoolchain_jack-6007144b3ab9a8c59648fa35a0af920d2a64356e.zip
toolchain_jack-6007144b3ab9a8c59648fa35a0af920d2a64356e.tar.gz
toolchain_jack-6007144b3ab9a8c59648fa35a0af920d2a64356e.tar.bz2
Add support to append in VFS
(cherry picked from commit 9495b1087a937a6175dda075bdd082864c09dc21) Change-Id: Iccece3057dcac434c24c29c152ed65e32d6ba18f
Diffstat (limited to 'sched')
-rw-r--r--sched/src/com/android/sched/vfs/BaseVFS.java4
-rw-r--r--sched/src/com/android/sched/vfs/BaseVFile.java13
-rw-r--r--sched/src/com/android/sched/vfs/CachedDirectFS.java9
-rw-r--r--sched/src/com/android/sched/vfs/CaseInsensitiveFS.java9
-rw-r--r--sched/src/com/android/sched/vfs/DeflateFS.java8
-rw-r--r--sched/src/com/android/sched/vfs/DirectFS.java10
-rw-r--r--sched/src/com/android/sched/vfs/GenericInputOutputVFile.java14
-rw-r--r--sched/src/com/android/sched/vfs/GenericOutputVFile.java12
-rw-r--r--sched/src/com/android/sched/vfs/MessageDigestFS.java17
-rw-r--r--sched/src/com/android/sched/vfs/MessageDigestOutputVFS.java12
-rw-r--r--sched/src/com/android/sched/vfs/OutputVFile.java13
-rw-r--r--sched/src/com/android/sched/vfs/PrefixedFS.java8
-rw-r--r--sched/src/com/android/sched/vfs/ReadWriteZipFS.java8
-rw-r--r--sched/src/com/android/sched/vfs/ReadZipFS.java6
-rw-r--r--sched/src/com/android/sched/vfs/VFSToVFSWrapper.java8
-rw-r--r--sched/src/com/android/sched/vfs/VFile.java6
-rw-r--r--sched/src/com/android/sched/vfs/WriteZipFS.java10
17 files changed, 158 insertions, 9 deletions
diff --git a/sched/src/com/android/sched/vfs/BaseVFS.java b/sched/src/com/android/sched/vfs/BaseVFS.java
index 935a0e5..c316641 100644
--- a/sched/src/com/android/sched/vfs/BaseVFS.java
+++ b/sched/src/com/android/sched/vfs/BaseVFS.java
@@ -51,6 +51,10 @@ abstract class BaseVFS<DIR extends BaseVDir, FILE extends BaseVFile> implements
@Nonnull
abstract OutputStream openWrite(@Nonnull FILE file) throws WrongPermissionException;
+ @Nonnull
+ abstract OutputStream openWrite(@Nonnull FILE file, boolean append)
+ throws WrongPermissionException;
+
//
// VElement related
//
diff --git a/sched/src/com/android/sched/vfs/BaseVFile.java b/sched/src/com/android/sched/vfs/BaseVFile.java
index 896a556..8147c13 100644
--- a/sched/src/com/android/sched/vfs/BaseVFile.java
+++ b/sched/src/com/android/sched/vfs/BaseVFile.java
@@ -50,7 +50,13 @@ abstract class BaseVFile extends BaseVElement implements VFile {
@Override
@Nonnull
public OutputStream getOutputStream() throws WrongPermissionException {
- return vfs.openWrite(this);
+ return getOutputStream(false);
+ }
+
+ @Override
+ @Nonnull
+ public OutputStream getOutputStream(boolean append) throws WrongPermissionException {
+ return vfs.openWrite(this, append);
}
@Override
@@ -59,6 +65,11 @@ abstract class BaseVFile extends BaseVElement implements VFile {
return new PrintStream(getOutputStream());
}
+ @Nonnull
+ public PrintStream getPrintStream(boolean append) throws WrongPermissionException {
+ return new PrintStream(getOutputStream(append));
+ }
+
@Override
@Nonnull
public Location getLocation() {
diff --git a/sched/src/com/android/sched/vfs/CachedDirectFS.java b/sched/src/com/android/sched/vfs/CachedDirectFS.java
index 19affc3..9cafd3c 100644
--- a/sched/src/com/android/sched/vfs/CachedDirectFS.java
+++ b/sched/src/com/android/sched/vfs/CachedDirectFS.java
@@ -228,12 +228,19 @@ public class CachedDirectFS extends BaseVFS<CachedParentVDir, CachedParentVFile>
@Nonnull
@Override
OutputStream openWrite(@Nonnull CachedParentVFile file) throws WrongPermissionException {
+ return openWrite(file, false);
+ }
+
+ @Nonnull
+ @Override
+ OutputStream openWrite(@Nonnull CachedParentVFile file, boolean append)
+ throws WrongPermissionException {
assert !isClosed();
assert capabilities.contains(Capabilities.WRITE);
File path = getNativeFile(file.getPath());
try {
- return new FileOutputStream(path);
+ return new FileOutputStream(path, append);
} catch (FileNotFoundException e) {
FileOrDirectory.checkPermissions(path, file.getLocation(), Permission.WRITE);
throw new ConcurrentIOException(e);
diff --git a/sched/src/com/android/sched/vfs/CaseInsensitiveFS.java b/sched/src/com/android/sched/vfs/CaseInsensitiveFS.java
index 46b18ea..2c4bb61 100644
--- a/sched/src/com/android/sched/vfs/CaseInsensitiveFS.java
+++ b/sched/src/com/android/sched/vfs/CaseInsensitiveFS.java
@@ -368,9 +368,16 @@ public class CaseInsensitiveFS extends BaseVFS<CaseInsensitiveVDir, CaseInsensit
@Override
@Nonnull
OutputStream openWrite(@Nonnull CaseInsensitiveVFile file) throws WrongPermissionException {
+ return openWrite(file, false);
+ }
+
+ @Override
+ @Nonnull
+ OutputStream openWrite(@Nonnull CaseInsensitiveVFile file, boolean append)
+ throws WrongPermissionException {
assert !isClosed();
- return file.getEncodedFile().getOutputStream();
+ return file.getEncodedFile().getOutputStream(append);
}
//
diff --git a/sched/src/com/android/sched/vfs/DeflateFS.java b/sched/src/com/android/sched/vfs/DeflateFS.java
index 70fc31d..3bb9e81 100644
--- a/sched/src/com/android/sched/vfs/DeflateFS.java
+++ b/sched/src/com/android/sched/vfs/DeflateFS.java
@@ -93,7 +93,13 @@ public class DeflateFS extends BaseVFS<BaseVDir, BaseVFile> implements VFS{
@Override
@Nonnull
OutputStream openWrite(@Nonnull BaseVFile file) throws WrongPermissionException {
- return new DeflaterOutputStream(vfs.openWrite(file), new Deflater());
+ return openWrite(file, false);
+ }
+
+ @Override
+ @Nonnull
+ OutputStream openWrite(@Nonnull BaseVFile file, boolean append) throws WrongPermissionException {
+ return new DeflaterOutputStream(vfs.openWrite(file, append), new Deflater());
}
@Override
diff --git a/sched/src/com/android/sched/vfs/DirectFS.java b/sched/src/com/android/sched/vfs/DirectFS.java
index 1464cb3..01c1e24 100644
--- a/sched/src/com/android/sched/vfs/DirectFS.java
+++ b/sched/src/com/android/sched/vfs/DirectFS.java
@@ -125,12 +125,20 @@ public class DirectFS extends BaseVFS<ParentVDir, ParentVFile> implements VFS {
@Nonnull
@Override
OutputStream openWrite(@Nonnull ParentVFile file) throws WrongPermissionException {
+ return openWrite(file, false);
+ }
+
+
+ @Override
+ @Nonnull
+ OutputStream openWrite(@Nonnull ParentVFile file, boolean append)
+ throws WrongPermissionException {
assert !isClosed();
assert capabilities.contains(Capabilities.WRITE);
File path = getNativeFile(file.getPath());
try {
- return new FileOutputStream(path);
+ return new FileOutputStream(path, append);
} catch (FileNotFoundException e) {
FileOrDirectory.checkPermissions(path, file.getLocation(), Permission.WRITE);
throw new ConcurrentIOException(e);
diff --git a/sched/src/com/android/sched/vfs/GenericInputOutputVFile.java b/sched/src/com/android/sched/vfs/GenericInputOutputVFile.java
index d5fab6f..f7bf045 100644
--- a/sched/src/com/android/sched/vfs/GenericInputOutputVFile.java
+++ b/sched/src/com/android/sched/vfs/GenericInputOutputVFile.java
@@ -64,7 +64,7 @@ public class GenericInputOutputVFile implements InputOutputVFile {
@Override
@Nonnull
public OutputStream getOutputStream() throws WrongPermissionException {
- return file.getOutputStream();
+ return getOutputStream(false);
}
@Override
@@ -74,6 +74,18 @@ public class GenericInputOutputVFile implements InputOutputVFile {
}
@Override
+ @Nonnull
+ public OutputStream getOutputStream(boolean append) throws WrongPermissionException {
+ return file.getOutputStream(append);
+ }
+
+ @Override
+ @Nonnull
+ public PrintStream getPrintStream(boolean append) throws WrongPermissionException {
+ return new PrintStream(getOutputStream(append));
+ }
+
+ @Override
public void delete() throws CannotDeleteFileException {
file.delete();
}
diff --git a/sched/src/com/android/sched/vfs/GenericOutputVFile.java b/sched/src/com/android/sched/vfs/GenericOutputVFile.java
index 87cbeb8..434c4b9 100644
--- a/sched/src/com/android/sched/vfs/GenericOutputVFile.java
+++ b/sched/src/com/android/sched/vfs/GenericOutputVFile.java
@@ -60,7 +60,19 @@ public class GenericOutputVFile implements OutputVFile {
@Override
@Nonnull
+ public OutputStream getOutputStream(boolean append) throws WrongPermissionException {
+ return file.getOutputStream(append);
+ }
+
+ @Override
+ @Nonnull
public PrintStream getPrintStream() throws WrongPermissionException {
return new PrintStream(getOutputStream());
}
+
+ @Override
+ @Nonnull
+ public PrintStream getPrintStream(boolean append) throws WrongPermissionException {
+ return new PrintStream(getOutputStream(append));
+ }
} \ No newline at end of file
diff --git a/sched/src/com/android/sched/vfs/MessageDigestFS.java b/sched/src/com/android/sched/vfs/MessageDigestFS.java
index 7a181a1..e1d76fd 100644
--- a/sched/src/com/android/sched/vfs/MessageDigestFS.java
+++ b/sched/src/com/android/sched/vfs/MessageDigestFS.java
@@ -139,6 +139,16 @@ public class MessageDigestFS extends BaseVFS<MessageDigestVDir, MessageDigestVFi
}
};
}
+
+ @Override
+ @Nonnull
+ public OutputStream getOutputStream(boolean append) throws WrongPermissionException {
+ if (append) {
+ throw new UnsupportedOperationException();
+ } else {
+ return getOutputStream();
+ }
+ }
}
static class MessageDigestVDir extends BaseVDir {
@@ -363,6 +373,13 @@ public class MessageDigestFS extends BaseVFS<MessageDigestVDir, MessageDigestVFi
@Override
@Nonnull
+ OutputStream openWrite(@Nonnull MessageDigestVFile file, boolean append) {
+ // should be implemented in MessageDigestVFile
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ @Nonnull
synchronized void delete(@Nonnull MessageDigestVFile file) throws CannotDeleteFileException {
file.getWrappedFile().delete();
digests.remove(file.getPath());
diff --git a/sched/src/com/android/sched/vfs/MessageDigestOutputVFS.java b/sched/src/com/android/sched/vfs/MessageDigestOutputVFS.java
index 6b2ba61..8664162 100644
--- a/sched/src/com/android/sched/vfs/MessageDigestOutputVFS.java
+++ b/sched/src/com/android/sched/vfs/MessageDigestOutputVFS.java
@@ -95,10 +95,22 @@ public class MessageDigestOutputVFS extends MessageDigestVFS implements OutputVF
@Override
@Nonnull
+ public OutputStream getOutputStream(boolean append) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ @Nonnull
public PrintStream getPrintStream() throws WrongPermissionException {
return new PrintStream(getOutputStream());
}
+ @Override
+ @Nonnull
+ public PrintStream getPrintStream(boolean append) {
+ throw new UnsupportedOperationException();
+ }
+
@CheckForNull
public String getDigest() {
return digest;
diff --git a/sched/src/com/android/sched/vfs/OutputVFile.java b/sched/src/com/android/sched/vfs/OutputVFile.java
index 9e2de04..afd528d 100644
--- a/sched/src/com/android/sched/vfs/OutputVFile.java
+++ b/sched/src/com/android/sched/vfs/OutputVFile.java
@@ -16,9 +16,22 @@
package com.android.sched.vfs;
+import com.android.sched.util.file.WrongPermissionException;
+
+import java.io.OutputStream;
+import java.io.PrintStream;
+
+import javax.annotation.Nonnull;
+
/**
* Virtual file to write to.
*/
public interface OutputVFile extends OutputVElement, OutputStreamProvider {
+ @Nonnull
+ OutputStream getOutputStream(boolean append) throws WrongPermissionException;
+
+ @Nonnull
+ PrintStream getPrintStream(boolean append) throws WrongPermissionException;
+
}
diff --git a/sched/src/com/android/sched/vfs/PrefixedFS.java b/sched/src/com/android/sched/vfs/PrefixedFS.java
index 7b8bc3f..c85178f 100644
--- a/sched/src/com/android/sched/vfs/PrefixedFS.java
+++ b/sched/src/com/android/sched/vfs/PrefixedFS.java
@@ -87,7 +87,13 @@ public class PrefixedFS extends BaseVFS<BaseVDir, BaseVFile> implements VFS {
@Override
@Nonnull
OutputStream openWrite(@Nonnull BaseVFile file) throws WrongPermissionException {
- return vfs.openWrite(file);
+ return openWrite(file, false);
+ }
+
+ @Override
+ @Nonnull
+ OutputStream openWrite(@Nonnull BaseVFile file, boolean append) throws WrongPermissionException {
+ return vfs.openWrite(file, append);
}
@Override
diff --git a/sched/src/com/android/sched/vfs/ReadWriteZipFS.java b/sched/src/com/android/sched/vfs/ReadWriteZipFS.java
index 2ee080b..228e7f2 100644
--- a/sched/src/com/android/sched/vfs/ReadWriteZipFS.java
+++ b/sched/src/com/android/sched/vfs/ReadWriteZipFS.java
@@ -119,7 +119,13 @@ public class ReadWriteZipFS extends BaseVFS<BaseVDir, BaseVFile> implements VFS
@Override
@Nonnull
OutputStream openWrite(@Nonnull BaseVFile file) throws WrongPermissionException {
- return vfs.openWrite(file);
+ return openWrite(file, false);
+ }
+
+ @Override
+ @Nonnull
+ OutputStream openWrite(@Nonnull BaseVFile file, boolean append) throws WrongPermissionException {
+ return vfs.openWrite(file, append);
}
@Override
diff --git a/sched/src/com/android/sched/vfs/ReadZipFS.java b/sched/src/com/android/sched/vfs/ReadZipFS.java
index eeb3a6e..8851255 100644
--- a/sched/src/com/android/sched/vfs/ReadZipFS.java
+++ b/sched/src/com/android/sched/vfs/ReadZipFS.java
@@ -204,6 +204,12 @@ public class ReadZipFS extends BaseVFS<ZipVDir, ZipVFile> implements VFS {
throw new UnsupportedOperationException();
}
+ @Override
+ @Nonnull
+ OutputStream openWrite(@Nonnull ZipVFile file, boolean append) {
+ throw new UnsupportedOperationException();
+ }
+
//
// VElement
//
diff --git a/sched/src/com/android/sched/vfs/VFSToVFSWrapper.java b/sched/src/com/android/sched/vfs/VFSToVFSWrapper.java
index df733f4..b0a61f1 100644
--- a/sched/src/com/android/sched/vfs/VFSToVFSWrapper.java
+++ b/sched/src/com/android/sched/vfs/VFSToVFSWrapper.java
@@ -170,7 +170,13 @@ public class VFSToVFSWrapper extends BaseVFS<BaseVDir, BaseVFile> implements VFS
@Override
@Nonnull
OutputStream openWrite(@Nonnull BaseVFile file) throws WrongPermissionException {
- return workVFS.openWrite(file);
+ return openWrite(file, false);
+ }
+
+ @Override
+ @Nonnull
+ OutputStream openWrite(@Nonnull BaseVFile file, boolean append) throws WrongPermissionException {
+ return workVFS.openWrite(file, append);
}
@Override
diff --git a/sched/src/com/android/sched/vfs/VFile.java b/sched/src/com/android/sched/vfs/VFile.java
index 5e172d3..beef656 100644
--- a/sched/src/com/android/sched/vfs/VFile.java
+++ b/sched/src/com/android/sched/vfs/VFile.java
@@ -17,6 +17,9 @@
package com.android.sched.vfs;
import com.android.sched.util.file.CannotDeleteFileException;
+import com.android.sched.util.file.WrongPermissionException;
+
+import java.io.OutputStream;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
@@ -28,6 +31,9 @@ public interface VFile extends VElement, InputStreamProvider, OutputStreamProvid
@Nonnull
VPath getPath();
+ @Nonnull
+ OutputStream getOutputStream(boolean append) throws WrongPermissionException;
+
@CheckForNull
String getDigest();
diff --git a/sched/src/com/android/sched/vfs/WriteZipFS.java b/sched/src/com/android/sched/vfs/WriteZipFS.java
index 2370117..b43b3d6 100644
--- a/sched/src/com/android/sched/vfs/WriteZipFS.java
+++ b/sched/src/com/android/sched/vfs/WriteZipFS.java
@@ -171,6 +171,16 @@ public class WriteZipFS extends BaseVFS<ZipVDir, ZipVFile> implements VFS {
return new ZipEntryOutputStream(this, file.getZipEntry());
}
+ @Override
+ @Nonnull
+ OutputStream openWrite(@Nonnull ZipVFile file, boolean append) {
+ if (append) {
+ throw new UnsupportedOperationException();
+ } else {
+ return openWrite(file);
+ }
+ }
+
//
// VElement
//