From b0dbb78e7d2287a5391a75e399009bf2203c4f24 Mon Sep 17 00:00:00 2001 From: Shawn Pearce Date: Fri, 1 Nov 2013 14:14:25 -0600 Subject: [PATCH] Extract protocol constants to a common class This avoids the server from referencing the client code directly. Change-Id: Ie6ade781b5a689646ad8b0b2988ef2b544412195 --- .../jgit/http/server/GitSmartHttpTools.java | 6 +- .../transport/BasePackFetchConnection.java | 27 ++- .../transport/BasePackPushConnection.java | 8 +- .../jgit/transport/BaseReceivePack.java | 8 +- .../jgit/transport/GitProtocolConstants.java | 166 ++++++++++++++++++ .../eclipse/jgit/transport/ReceivePack.java | 2 +- .../eclipse/jgit/transport/UploadPack.java | 35 ++-- 7 files changed, 202 insertions(+), 50 deletions(-) create mode 100644 org.eclipse.jgit/src/org/eclipse/jgit/transport/GitProtocolConstants.java diff --git a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GitSmartHttpTools.java b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GitSmartHttpTools.java index 92d575c2d..d8cd61df8 100644 --- a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GitSmartHttpTools.java +++ b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GitSmartHttpTools.java @@ -44,9 +44,9 @@ package org.eclipse.jgit.http.server; import static org.eclipse.jgit.http.server.ServletUtils.ATTRIBUTE_HANDLER; -import static org.eclipse.jgit.transport.BasePackFetchConnection.OPTION_SIDE_BAND; -import static org.eclipse.jgit.transport.BasePackFetchConnection.OPTION_SIDE_BAND_64K; -import static org.eclipse.jgit.transport.BasePackPushConnection.CAPABILITY_SIDE_BAND_64K; +import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_SIDE_BAND; +import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_SIDE_BAND_64K; +import static org.eclipse.jgit.transport.GitProtocolConstants.CAPABILITY_SIDE_BAND_64K; import static org.eclipse.jgit.transport.SideBandOutputStream.CH_ERROR; import static org.eclipse.jgit.transport.SideBandOutputStream.SMALL_BUF; import static javax.servlet.http.HttpServletResponse.SC_FORBIDDEN; diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java index 952515ded..e7e8af50a 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java @@ -71,6 +71,7 @@ import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.ObjectInserter; import org.eclipse.jgit.lib.ProgressMonitor; import org.eclipse.jgit.lib.Ref; +import org.eclipse.jgit.transport.GitProtocolConstants.MultiAck; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevCommitList; import org.eclipse.jgit.revwalk.RevFlag; @@ -129,72 +130,68 @@ public abstract class BasePackFetchConnection extends BasePackConnection * Include tags if we are also including the referenced objects. * @since 2.0 */ - public static final String OPTION_INCLUDE_TAG = "include-tag"; //$NON-NLS-1$ + public static final String OPTION_INCLUDE_TAG = GitProtocolConstants.OPTION_INCLUDE_TAG; /** * Mutli-ACK support for improved negotiation. * @since 2.0 */ - public static final String OPTION_MULTI_ACK = "multi_ack"; //$NON-NLS-1$ + public static final String OPTION_MULTI_ACK = GitProtocolConstants.OPTION_MULTI_ACK; /** * Mutli-ACK detailed support for improved negotiation. * @since 2.0 */ - public static final String OPTION_MULTI_ACK_DETAILED = "multi_ack_detailed"; //$NON-NLS-1$ + public static final String OPTION_MULTI_ACK_DETAILED = GitProtocolConstants.OPTION_MULTI_ACK_DETAILED; /** * The client supports packs with deltas but not their bases. * @since 2.0 */ - public static final String OPTION_THIN_PACK = "thin-pack"; //$NON-NLS-1$ + public static final String OPTION_THIN_PACK = GitProtocolConstants.OPTION_THIN_PACK; /** * The client supports using the side-band for progress messages. * @since 2.0 */ - public static final String OPTION_SIDE_BAND = "side-band"; //$NON-NLS-1$ + public static final String OPTION_SIDE_BAND = GitProtocolConstants.OPTION_SIDE_BAND; /** * The client supports using the 64K side-band for progress messages. * @since 2.0 */ - public static final String OPTION_SIDE_BAND_64K = "side-band-64k"; //$NON-NLS-1$ + public static final String OPTION_SIDE_BAND_64K = GitProtocolConstants.OPTION_SIDE_BAND_64K; /** * The client supports packs with OFS deltas. * @since 2.0 */ - public static final String OPTION_OFS_DELTA = "ofs-delta"; //$NON-NLS-1$ + public static final String OPTION_OFS_DELTA = GitProtocolConstants.OPTION_OFS_DELTA; /** * The client supports shallow fetches. * @since 2.0 */ - public static final String OPTION_SHALLOW = "shallow"; //$NON-NLS-1$ + public static final String OPTION_SHALLOW = GitProtocolConstants.OPTION_SHALLOW; /** * The client does not want progress messages and will ignore them. * @since 2.0 */ - public static final String OPTION_NO_PROGRESS = "no-progress"; //$NON-NLS-1$ + public static final String OPTION_NO_PROGRESS = GitProtocolConstants.OPTION_NO_PROGRESS; /** * The client supports receiving a pack before it has sent "done". * @since 2.0 */ - public static final String OPTION_NO_DONE = "no-done"; //$NON-NLS-1$ + public static final String OPTION_NO_DONE = GitProtocolConstants.OPTION_NO_DONE; /** * The client supports fetching objects at the tip of any ref, even if not * advertised. * @since 3.1 */ - public static final String OPTION_ALLOW_TIP_SHA1_IN_WANT = "allow-tip-sha1-in-want"; //$NON-NLS-1$ - - static enum MultiAck { - OFF, CONTINUE, DETAILED; - } + public static final String OPTION_ALLOW_TIP_SHA1_IN_WANT = GitProtocolConstants.OPTION_ALLOW_TIP_SHA1_IN_WANT; private final RevWalk walk; diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackPushConnection.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackPushConnection.java index 22b458c92..def6033b8 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackPushConnection.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackPushConnection.java @@ -88,25 +88,25 @@ public abstract class BasePackPushConnection extends BasePackConnection implemen * The client expects a status report after the server processes the pack. * @since 2.0 */ - public static final String CAPABILITY_REPORT_STATUS = "report-status"; //$NON-NLS-1$ + public static final String CAPABILITY_REPORT_STATUS = GitProtocolConstants.CAPABILITY_REPORT_STATUS; /** * The server supports deleting refs. * @since 2.0 */ - public static final String CAPABILITY_DELETE_REFS = "delete-refs"; //$NON-NLS-1$ + public static final String CAPABILITY_DELETE_REFS = GitProtocolConstants.CAPABILITY_DELETE_REFS; /** * The server supports packs with OFS deltas. * @since 2.0 */ - public static final String CAPABILITY_OFS_DELTA = "ofs-delta"; //$NON-NLS-1$ + public static final String CAPABILITY_OFS_DELTA = GitProtocolConstants.CAPABILITY_OFS_DELTA; /** * The client supports using the 64K side-band for progress messages. * @since 2.0 */ - public static final String CAPABILITY_SIDE_BAND_64K = "side-band-64k"; //$NON-NLS-1$ + public static final String CAPABILITY_SIDE_BAND_64K = GitProtocolConstants.CAPABILITY_SIDE_BAND_64K; private final boolean thinPack; diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BaseReceivePack.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BaseReceivePack.java index 1a87049fb..39e4aadc9 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BaseReceivePack.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BaseReceivePack.java @@ -43,10 +43,10 @@ package org.eclipse.jgit.transport; -import static org.eclipse.jgit.transport.BasePackPushConnection.CAPABILITY_DELETE_REFS; -import static org.eclipse.jgit.transport.BasePackPushConnection.CAPABILITY_OFS_DELTA; -import static org.eclipse.jgit.transport.BasePackPushConnection.CAPABILITY_REPORT_STATUS; -import static org.eclipse.jgit.transport.BasePackPushConnection.CAPABILITY_SIDE_BAND_64K; +import static org.eclipse.jgit.transport.GitProtocolConstants.CAPABILITY_DELETE_REFS; +import static org.eclipse.jgit.transport.GitProtocolConstants.CAPABILITY_OFS_DELTA; +import static org.eclipse.jgit.transport.GitProtocolConstants.CAPABILITY_REPORT_STATUS; +import static org.eclipse.jgit.transport.GitProtocolConstants.CAPABILITY_SIDE_BAND_64K; import static org.eclipse.jgit.transport.SideBandOutputStream.CH_DATA; import static org.eclipse.jgit.transport.SideBandOutputStream.CH_PROGRESS; import static org.eclipse.jgit.transport.SideBandOutputStream.MAX_BUF; diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/GitProtocolConstants.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/GitProtocolConstants.java new file mode 100644 index 000000000..c0a70d043 --- /dev/null +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/GitProtocolConstants.java @@ -0,0 +1,166 @@ +/* + * Copyright (C) 2008-2013, Google Inc. + * Copyright (C) 2008, Robin Rosenberg + * Copyright (C) 2008, Shawn O. Pearce + * 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; + +/** + * Wire constants for the native Git protocol. + * + * @since 3.2 + */ +public class GitProtocolConstants { + /** + * Include tags if we are also including the referenced objects. + * + * @since 3.2 + */ + public static final String OPTION_INCLUDE_TAG = "include-tag"; //$NON-NLS-1$ + + /** + * Mutli-ACK support for improved negotiation. + * + * @since 3.2 + */ + public static final String OPTION_MULTI_ACK = "multi_ack"; //$NON-NLS-1$ + + /** + * Mutli-ACK detailed support for improved negotiation. + * + * @since 3.2 + */ + public static final String OPTION_MULTI_ACK_DETAILED = "multi_ack_detailed"; //$NON-NLS-1$ + + /** + * The client supports packs with deltas but not their bases. + * + * @since 3.2 + */ + public static final String OPTION_THIN_PACK = "thin-pack"; //$NON-NLS-1$ + + /** + * The client supports using the side-band for progress messages. + * + * @since 3.2 + */ + public static final String OPTION_SIDE_BAND = "side-band"; //$NON-NLS-1$ + + /** + * The client supports using the 64K side-band for progress messages. + * + * @since 3.2 + */ + public static final String OPTION_SIDE_BAND_64K = "side-band-64k"; //$NON-NLS-1$ + + /** + * The client supports packs with OFS deltas. + * + * @since 3.2 + */ + public static final String OPTION_OFS_DELTA = "ofs-delta"; //$NON-NLS-1$ + + /** + * The client supports shallow fetches. + * + * @since 3.2 + */ + public static final String OPTION_SHALLOW = "shallow"; //$NON-NLS-1$ + + /** + * The client does not want progress messages and will ignore them. + * + * @since 3.2 + */ + public static final String OPTION_NO_PROGRESS = "no-progress"; //$NON-NLS-1$ + + /** + * The client supports receiving a pack before it has sent "done". + * + * @since 3.2 + */ + public static final String OPTION_NO_DONE = "no-done"; //$NON-NLS-1$ + + /** + * The client supports fetching objects at the tip of any ref, even if not + * advertised. + * + * @since 3.2 + */ + public static final String OPTION_ALLOW_TIP_SHA1_IN_WANT = "allow-tip-sha1-in-want"; //$NON-NLS-1$ + + /** + * The client expects a status report after the server processes the pack. + * + * @since 3.2 + */ + public static final String CAPABILITY_REPORT_STATUS = "report-status"; //$NON-NLS-1$ + + /** + * The server supports deleting refs. + * + * @since 3.2 + */ + public static final String CAPABILITY_DELETE_REFS = "delete-refs"; //$NON-NLS-1$ + + /** + * The server supports packs with OFS deltas. + * + * @since 3.2 + */ + public static final String CAPABILITY_OFS_DELTA = "ofs-delta"; //$NON-NLS-1$ + + /** + * The client supports using the 64K side-band for progress messages. + * + * @since 3.2 + */ + public static final String CAPABILITY_SIDE_BAND_64K = "side-band-64k"; //$NON-NLS-1$ + + static enum MultiAck { + OFF, CONTINUE, DETAILED; + } + + private GitProtocolConstants() { + } +} diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java index d17abf78c..4d931dd5d 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java @@ -43,7 +43,7 @@ package org.eclipse.jgit.transport; -import static org.eclipse.jgit.transport.BasePackPushConnection.CAPABILITY_REPORT_STATUS; +import static org.eclipse.jgit.transport.GitProtocolConstants.CAPABILITY_REPORT_STATUS; import java.io.IOException; import java.io.InputStream; 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 28962b7c4..0cc6946b1 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java @@ -44,6 +44,17 @@ package org.eclipse.jgit.transport; import static org.eclipse.jgit.lib.RefDatabase.ALL; +import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_ALLOW_TIP_SHA1_IN_WANT; +import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_INCLUDE_TAG; +import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_MULTI_ACK; +import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_MULTI_ACK_DETAILED; +import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_NO_DONE; +import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_NO_PROGRESS; +import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_OFS_DELTA; +import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_SHALLOW; +import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_SIDE_BAND; +import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_SIDE_BAND_64K; +import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_THIN_PACK; import java.io.EOFException; import java.io.IOException; @@ -81,7 +92,7 @@ import org.eclipse.jgit.revwalk.RevTag; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.revwalk.filter.CommitTimeRevFilter; import org.eclipse.jgit.storage.pack.PackConfig; -import org.eclipse.jgit.transport.BasePackFetchConnection.MultiAck; +import org.eclipse.jgit.transport.GitProtocolConstants.MultiAck; import org.eclipse.jgit.transport.RefAdvertiser.PacketLineOutRefAdvertiser; import org.eclipse.jgit.util.io.InterruptTimer; import org.eclipse.jgit.util.io.NullOutputStream; @@ -92,28 +103,6 @@ import org.eclipse.jgit.util.io.TimeoutOutputStream; * Implements the server side of a fetch connection, transmitting objects. */ public class UploadPack { - static final String OPTION_ALLOW_TIP_SHA1_IN_WANT = BasePackFetchConnection.OPTION_ALLOW_TIP_SHA1_IN_WANT; - - static final String OPTION_INCLUDE_TAG = BasePackFetchConnection.OPTION_INCLUDE_TAG; - - static final String OPTION_MULTI_ACK = BasePackFetchConnection.OPTION_MULTI_ACK; - - static final String OPTION_MULTI_ACK_DETAILED = BasePackFetchConnection.OPTION_MULTI_ACK_DETAILED; - - static final String OPTION_THIN_PACK = BasePackFetchConnection.OPTION_THIN_PACK; - - static final String OPTION_SIDE_BAND = BasePackFetchConnection.OPTION_SIDE_BAND; - - static final String OPTION_SIDE_BAND_64K = BasePackFetchConnection.OPTION_SIDE_BAND_64K; - - static final String OPTION_OFS_DELTA = BasePackFetchConnection.OPTION_OFS_DELTA; - - static final String OPTION_NO_PROGRESS = BasePackFetchConnection.OPTION_NO_PROGRESS; - - static final String OPTION_NO_DONE = BasePackFetchConnection.OPTION_NO_DONE; - - static final String OPTION_SHALLOW = BasePackFetchConnection.OPTION_SHALLOW; - /** Policy the server uses to validate client requests */ public static enum RequestPolicy { /** Client may only ask for objects the server advertised a reference for. */