Remove use of org.bouncycastle.util.io.TeeOutputStream
Bug: 559106 Change-Id: Ife06f21a00d258780a2030745738194098c631cf Signed-off-by: Michael Dardis <git@md-5.net> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
This commit is contained in:
parent
f2b67be62a
commit
4055522359
|
@ -0,0 +1,81 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2020, Michael Dardis. and others
|
||||||
|
*
|
||||||
|
* This program and the accompanying materials are made available under the
|
||||||
|
* terms of the Eclipse Distribution License v. 1.0 which is available at
|
||||||
|
* https://www.eclipse.org/org/documents/edl-v10.php.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
*/
|
||||||
|
package org.eclipse.jgit.util.io;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertArrayEquals;
|
||||||
|
import static org.junit.Assert.assertFalse;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.eclipse.jgit.lib.Constants;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class TeeOutputStreamTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() throws IOException {
|
||||||
|
byte[] data = Constants.encode("Hello World");
|
||||||
|
|
||||||
|
TestOutput first = new TestOutput();
|
||||||
|
TestOutput second = new TestOutput();
|
||||||
|
try (TeeOutputStream tee = new TeeOutputStream(first, second)) {
|
||||||
|
tee.write(data);
|
||||||
|
assertArrayEquals("Stream output must match", first.toByteArray(),
|
||||||
|
second.toByteArray());
|
||||||
|
|
||||||
|
tee.write(1);
|
||||||
|
assertArrayEquals("Stream output must match", first.toByteArray(),
|
||||||
|
second.toByteArray());
|
||||||
|
|
||||||
|
tee.write(data, 1, 4); // Test partial write methods
|
||||||
|
assertArrayEquals("Stream output must match", first.toByteArray(),
|
||||||
|
second.toByteArray());
|
||||||
|
}
|
||||||
|
assertTrue("First stream should be closed", first.closed);
|
||||||
|
assertTrue("Second stream should be closed", second.closed);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCloseException() {
|
||||||
|
TestOutput first = new TestOutput() {
|
||||||
|
@Override
|
||||||
|
public void close() throws IOException {
|
||||||
|
throw new IOException();
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
TestOutput second = new TestOutput();
|
||||||
|
|
||||||
|
@SuppressWarnings("resource")
|
||||||
|
TeeOutputStream tee = new TeeOutputStream(first, second);
|
||||||
|
try {
|
||||||
|
tee.close();
|
||||||
|
} catch (IOException ex) {
|
||||||
|
// Expected from first closed
|
||||||
|
}
|
||||||
|
assertFalse("First stream should not be closed", first.closed);
|
||||||
|
assertTrue("Second stream should still be closed if first close failed",
|
||||||
|
second.closed);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class TestOutput extends ByteArrayOutputStream {
|
||||||
|
|
||||||
|
private boolean closed;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void close() throws IOException {
|
||||||
|
closed = true;
|
||||||
|
super.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -172,7 +172,6 @@ Import-Package: com.googlecode.javaewah;version="[1.1.6,2.0.0)",
|
||||||
org.bouncycastle.openpgp.operator;version="[1.61.0,2.0.0)",
|
org.bouncycastle.openpgp.operator;version="[1.61.0,2.0.0)",
|
||||||
org.bouncycastle.openpgp.operator.jcajce;version="[1.61.0,2.0.0)",
|
org.bouncycastle.openpgp.operator.jcajce;version="[1.61.0,2.0.0)",
|
||||||
org.bouncycastle.util.encoders;version="[1.61.0,2.0.0)",
|
org.bouncycastle.util.encoders;version="[1.61.0,2.0.0)",
|
||||||
org.bouncycastle.util.io;version="[1.61.0,2.0.0)",
|
|
||||||
org.slf4j;version="[1.7.0,2.0.0)",
|
org.slf4j;version="[1.7.0,2.0.0)",
|
||||||
org.xml.sax,
|
org.xml.sax,
|
||||||
org.xml.sax.helpers
|
org.xml.sax.helpers
|
||||||
|
|
|
@ -17,11 +17,11 @@
|
||||||
import java.io.UnsupportedEncodingException;
|
import java.io.UnsupportedEncodingException;
|
||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.Callable;
|
||||||
|
|
||||||
import org.bouncycastle.util.io.TeeOutputStream;
|
|
||||||
import org.eclipse.jgit.api.errors.AbortedByHookException;
|
import org.eclipse.jgit.api.errors.AbortedByHookException;
|
||||||
import org.eclipse.jgit.lib.Repository;
|
import org.eclipse.jgit.lib.Repository;
|
||||||
import org.eclipse.jgit.util.FS;
|
import org.eclipse.jgit.util.FS;
|
||||||
import org.eclipse.jgit.util.ProcessResult;
|
import org.eclipse.jgit.util.ProcessResult;
|
||||||
|
import org.eclipse.jgit.util.io.TeeOutputStream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Git can fire off custom scripts when certain important actions occur. These
|
* Git can fire off custom scripts when certain important actions occur. These
|
||||||
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2020, Michael Dardis. and others
|
||||||
|
*
|
||||||
|
* This program and the accompanying materials are made available under the
|
||||||
|
* terms of the Eclipse Distribution License v. 1.0 which is available at
|
||||||
|
* https://www.eclipse.org/org/documents/edl-v10.php.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.eclipse.jgit.util.io;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An output stream that writes all data to two streams.
|
||||||
|
*
|
||||||
|
* @since 5.7
|
||||||
|
*/
|
||||||
|
public class TeeOutputStream extends OutputStream {
|
||||||
|
|
||||||
|
private final OutputStream stream1;
|
||||||
|
private final OutputStream stream2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize a tee output stream.
|
||||||
|
*
|
||||||
|
* @param stream1 first output stream
|
||||||
|
* @param stream2 second output stream
|
||||||
|
*/
|
||||||
|
public TeeOutputStream(OutputStream stream1, OutputStream stream2) {
|
||||||
|
this.stream1 = stream1;
|
||||||
|
this.stream2 = stream2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** {@inheritDoc} */
|
||||||
|
@Override
|
||||||
|
public void write(byte[] buf) throws IOException {
|
||||||
|
this.stream1.write(buf);
|
||||||
|
this.stream2.write(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** {@inheritDoc} */
|
||||||
|
@Override
|
||||||
|
public void write(byte[] buf, int off, int len) throws IOException {
|
||||||
|
this.stream1.write(buf, off, len);
|
||||||
|
this.stream2.write(buf, off, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** {@inheritDoc} */
|
||||||
|
@Override
|
||||||
|
public void write(int b) throws IOException {
|
||||||
|
this.stream1.write(b);
|
||||||
|
this.stream2.write(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** {@inheritDoc} */
|
||||||
|
@Override
|
||||||
|
public void flush() throws IOException {
|
||||||
|
this.stream1.flush();
|
||||||
|
this.stream2.flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** {@inheritDoc} */
|
||||||
|
@Override
|
||||||
|
public void close() throws IOException {
|
||||||
|
try {
|
||||||
|
this.stream1.close();
|
||||||
|
} finally {
|
||||||
|
this.stream2.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue