Explorar el Código

Merge branch 'stable-4.8' into stable-4.9

* stable-4.8:
  Fix ObjectUploadListener#close
  Fix error handling in FileLfsServlet
  ObjectDownloadListener#onWritePossible: Make code spec compatible
  ObjectDownloadListener: Return from onWritePossible when data is written
  Fix IOException when LockToken#close fails

Change-Id: Id8eb635094336567d9f3c28ec985cd5127d31632
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
tags/v4.9.5.201809180939-r
David Pursehouse hace 5 años
padre
commit
1780a12e20

+ 5
- 0
org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/fs/FileLfsServlet.java Ver fichero

@@ -202,6 +202,11 @@ public class FileLfsServlet extends HttpServlet {
*/
protected static void sendError(HttpServletResponse rsp, int status, String message)
throws IOException {
if (rsp.isCommitted()) {
rsp.getOutputStream().close();
return;
}
rsp.reset();
rsp.setStatus(status);
PrintWriter writer = rsp.getWriter();
gson.toJson(new Error(message), writer);

+ 19
- 12
org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/fs/ObjectDownloadListener.java Ver fichero

@@ -80,7 +80,7 @@ public class ObjectDownloadListener implements WriteListener {

private final WritableByteChannel outChannel;

private final ByteBuffer buffer = ByteBuffer.allocateDirect(8192);
private ByteBuffer buffer = ByteBuffer.allocateDirect(8192);

/**
* @param repository
@@ -115,19 +115,26 @@ public class ObjectDownloadListener implements WriteListener {
@Override
public void onWritePossible() throws IOException {
while (out.isReady()) {
if (in.read(buffer) != -1) {
buffer.flip();
outChannel.write(buffer);
buffer.compact();
} else {
in.close();
buffer.flip();
while (out.isReady()) {
if (buffer.hasRemaining()) {
outChannel.write(buffer);
} else {
try {
buffer.clear();
if (in.read(buffer) < 0) {
buffer = null;
} else {
buffer.flip();
}
} catch(Throwable t) {
LOG.log(Level.SEVERE, t.getMessage(), t);
buffer = null;
} finally {
if (buffer != null) {
outChannel.write(buffer);
} else {
try {
out.close();
} finally {
context.complete();
}
return;
}
}
}

+ 3
- 1
org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/fs/ObjectUploadListener.java Ver fichero

@@ -150,7 +150,9 @@ public class ObjectUploadListener implements ReadListener {
channel.close();
// TODO check if status 200 is ok for PUT request, HTTP foresees 204
// for successful PUT without response body
response.setStatus(HttpServletResponse.SC_OK);
if (!response.isCommitted()) {
response.setStatus(HttpServletResponse.SC_OK);
}
} finally {
context.complete();
}

+ 12
- 7
org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java Ver fichero

@@ -868,13 +868,18 @@ public abstract class FS {

@Override
public void close() {
if (link.isPresent()) {
try {
Files.delete(link.get());
} catch (IOException e) {
LOG.error(MessageFormat.format(JGitText.get().closeLockTokenFailed,
this), e);
}
if (!link.isPresent()) {
return;
}
Path p = link.get();
if (!Files.exists(p)) {
return;
}
try {
Files.delete(p);
} catch (IOException e) {
LOG.error(MessageFormat
.format(JGitText.get().closeLockTokenFailed, this), e);
}
}


Cargando…
Cancelar
Guardar