in wagon-providers/wagon-ssh-common-test/src/main/java/org/apache/maven/wagon/providers/ssh/ScpCommand.java [303:351]
protected void writeFile(String header, SshFile path) throws IOException {
if (LOG.isDebugEnabled()) {
LOG.debug("Writing file {}", path);
}
if (!header.startsWith("C")) {
throw new IOException("Expected a C message but got '" + header + "'");
}
long length = Long.parseLong(header.substring(6, header.indexOf(' ', 6)));
String name = header.substring(header.indexOf(' ', 6) + 1);
SshFile file;
if (path.doesExist() && path.isDirectory()) {
file = root.getFile(path, name);
} else if (path.doesExist() && path.isFile()) {
file = path;
} else if (!path.doesExist()
&& path.getParentFile().doesExist()
&& path.getParentFile().isDirectory()) {
file = path;
} else {
throw new IOException("Can not write to " + path);
}
if (file.doesExist() && file.isDirectory()) {
throw new IOException("File is a directory: " + file);
} else if (file.doesExist() && !file.isWritable()) {
throw new IOException("Can not write to file: " + file);
}
OutputStream os = file.createOutputStream(0);
try {
ack();
byte[] buffer = new byte[8 * 1024];
while (length > 0) {
int len = (int) Math.min(length, buffer.length);
len = in.read(buffer, 0, len);
if (len <= 0) {
throw new IOException("End of stream reached");
}
os.write(buffer, 0, len);
length -= len;
}
} finally {
os.close();
}
ack();
readAck(false);
}