summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit
diff options
context:
space:
mode:
authorShawn Pearce <spearce@spearce.org>2016-02-16 16:41:51 -0800
committerShawn Pearce <spearce@spearce.org>2016-02-16 16:41:51 -0800
commit68d8a51d08ae62b6897f41e8de7fa016b6cf09c7 (patch)
tree10055d278fe49662c8205ccdf13c0ec929e57c44 /org.eclipse.jgit
parente7a6e85b95b2665b124f57181d8f9bc29100adce (diff)
downloadjgit-68d8a51d08ae62b6897f41e8de7fa016b6cf09c7.tar.gz
jgit-68d8a51d08ae62b6897f41e8de7fa016b6cf09c7.zip
Introduce specific WantNotValidException for servers
Capture the internal "want X not valid" state as a specific subclass of PackProtocolException, allowing this to be more easily identified in server stack traces and wrapper application code. Change-Id: I4b1adb7497f396432da420b0f600ad25a261f912
Diffstat (limited to 'org.eclipse.jgit')
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java21
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/transport/WantNotValidException.java90
2 files changed, 96 insertions, 15 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java
index 8c1f99d226..8b642bb980 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java
@@ -1179,9 +1179,7 @@ public class UploadPack {
}
wantIds.clear();
} catch (MissingObjectException notFound) {
- ObjectId id = notFound.getObjectId();
- throw new PackProtocolException(MessageFormat.format(
- JGitText.get().wantNotValid, id.name()), notFound);
+ throw new WantNotValidException(notFound.getObjectId(), notFound);
} finally {
q.release();
}
@@ -1206,8 +1204,7 @@ public class UploadPack {
if (!up.isBiDirectionalPipe())
new ReachableCommitRequestValidator().checkWants(up, wants);
else if (!wants.isEmpty())
- throw new PackProtocolException(MessageFormat.format(
- JGitText.get().wantNotValid, wants.iterator().next().name()));
+ throw new WantNotValidException(wants.iterator().next());
}
}
@@ -1240,8 +1237,7 @@ public class UploadPack {
refIdSet(up.getRepository().getRefDatabase().getRefs(ALL).values());
for (ObjectId obj : wants) {
if (!refIds.contains(obj))
- throw new PackProtocolException(MessageFormat.format(
- JGitText.get().wantNotValid, obj.name()));
+ throw new WantNotValidException(obj);
}
}
}
@@ -1287,14 +1283,11 @@ public class UploadPack {
RevObject obj;
while ((obj = q.next()) != null) {
if (!(obj instanceof RevCommit))
- throw new PackProtocolException(MessageFormat.format(
- JGitText.get().wantNotValid, obj.name()));
+ throw new WantNotValidException(obj);
walk.markStart((RevCommit) obj);
}
} catch (MissingObjectException notFound) {
- ObjectId id = notFound.getObjectId();
- throw new PackProtocolException(MessageFormat.format(
- JGitText.get().wantNotValid, id.name()), notFound);
+ throw new WantNotValidException(notFound.getObjectId(), notFound);
} finally {
q.release();
}
@@ -1308,9 +1301,7 @@ public class UploadPack {
RevCommit bad = walk.next();
if (bad != null) {
- throw new PackProtocolException(MessageFormat.format(
- JGitText.get().wantNotValid,
- bad.name()));
+ throw new WantNotValidException(bad);
}
walk.reset();
}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/WantNotValidException.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/WantNotValidException.java
new file mode 100644
index 0000000000..f0f64344b8
--- /dev/null
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/WantNotValidException.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2016, Google Inc.
+ * and other copyright owners as documented in the project's IP log.
+ *
+ * This program and the accompanying materials are made available
+ * under the terms of the Eclipse Distribution License v1.0 which
+ * accompanies this distribution, is reproduced below, and is
+ * available at http://www.eclipse.org/org/documents/edl-v10.php
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ *
+ * - Neither the name of the Eclipse Foundation, Inc. nor the
+ * names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package org.eclipse.jgit.transport;
+
+import java.text.MessageFormat;
+
+import org.eclipse.jgit.errors.PackProtocolException;
+import org.eclipse.jgit.internal.JGitText;
+import org.eclipse.jgit.lib.AnyObjectId;
+
+/**
+ * Indicates client requested an object the server does not want to serve.
+ * <p>
+ * Typically visible only inside of the server implementation; clients are
+ * usually looking at the text message from the server in a generic
+ * {@link PackProtocolException}.
+ *
+ * @since 4.3
+ */
+public class WantNotValidException extends PackProtocolException {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Construct a {@code "want $id not valid"} exception.
+ *
+ * @param id
+ * invalid object identifier received from the client.
+ */
+ public WantNotValidException(AnyObjectId id) {
+ super(msg(id));
+ }
+
+ /**
+ * Construct a {@code "want $id not valid"} exception.
+ *
+ * @param id
+ * invalid object identifier received from the client.
+ * @param cause
+ * root cause of the object being invalid, such as an IOException
+ * from the storage system.
+ */
+ public WantNotValidException(AnyObjectId id, Throwable cause) {
+ super(msg(id), cause);
+ }
+
+ private static String msg(AnyObjectId id) {
+ return MessageFormat.format(JGitText.get().wantNotValid, id.name());
+ }
+}