Browse Source

Merge branch 'stable-4.7' into stable-4.8

* stable-4.7:
  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: Iad9836811be034cf992ea25dad4409addba75115
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
stable-4.8
David Pursehouse 6 years ago
parent
commit
531da4e5e9
  1. 5
      org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/fs/FileLfsServlet.java
  2. 31
      org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/fs/ObjectDownloadListener.java
  3. 4
      org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/fs/ObjectUploadListener.java
  4. 19
      org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java

5
org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/fs/FileLfsServlet.java

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

31
org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/fs/ObjectDownloadListener.java

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

4
org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/fs/ObjectUploadListener.java

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

19
org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java

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

Loading…
Cancel
Save