diff options
author | Benoit Lamarche <benoitlamarche@google.com> | 2015-05-20 15:44:41 +0200 |
---|---|---|
committer | Benoit Lamarche <benoitlamarche@google.com> | 2015-05-29 11:53:49 +0200 |
commit | 6007144b3ab9a8c59648fa35a0af920d2a64356e (patch) | |
tree | 7f41b302e5727ad374e06ba5e3944e77fc4a3a02 /sched/src/com/android/sched | |
parent | e4ad6f2404104556a4c7c4c356fd922117418c3c (diff) | |
download | toolchain_jack-6007144b3ab9a8c59648fa35a0af920d2a64356e.tar.gz toolchain_jack-6007144b3ab9a8c59648fa35a0af920d2a64356e.tar.bz2 toolchain_jack-6007144b3ab9a8c59648fa35a0af920d2a64356e.zip |
Add support to append in VFS
(cherry picked from commit 9495b1087a937a6175dda075bdd082864c09dc21)
Change-Id: Iccece3057dcac434c24c29c152ed65e32d6ba18f
Diffstat (limited to 'sched/src/com/android/sched')
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 935a0e56..c316641b 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 896a5562..8147c137 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 19affc30..9cafd3cd 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 46b18eae..2c4bb61d 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 70fc31d2..3bb9e818 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 1464cb31..01c1e249 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 d5fab6f1..f7bf0454 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 87cbeb88..434c4b98 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 7a181a15..e1d76fd1 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 6b2ba617..86641620 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 9e2de04b..afd528de 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 7b8bc3f2..c85178fd 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 2ee080b7..228e7f29 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 eeb3a6e2..8851255f 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 df733f4d..b0a61f10 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 5e172d39..beef656d 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 23701173..b43b3d6b 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 // |