aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchRequest.java
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchRequest.java')
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchRequest.java191
1 files changed, 191 insertions, 0 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchRequest.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchRequest.java
new file mode 100644
index 0000000000..91eed96d4e
--- /dev/null
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchRequest.java
@@ -0,0 +1,191 @@
+/*
+ * Copyright (C) 2018, 2022 Google LLC. and others
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Distribution License v. 1.0 which is available at
+ * https://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+package org.eclipse.jgit.transport;
+
+import static java.util.Objects.requireNonNull;
+
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.jgit.annotations.NonNull;
+import org.eclipse.jgit.annotations.Nullable;
+import org.eclipse.jgit.lib.ObjectId;
+
+/**
+ * Common fields between v0/v1/v2 fetch requests.
+ */
+abstract class FetchRequest {
+
+ final Set<ObjectId> wantIds;
+
+ final int depth;
+
+ final Set<ObjectId> clientShallowCommits;
+
+ final FilterSpec filterSpec;
+
+ final Set<String> clientCapabilities;
+
+ final int deepenSince;
+
+ final List<String> deepenNots;
+
+ @Nullable
+ final String agent;
+
+ @Nullable
+ final String clientSID;
+
+ /**
+ * Initialize the common fields of a fetch request.
+ *
+ * @param wantIds
+ * list of want ids
+ * @param depth
+ * how deep to go in the tree
+ * @param clientShallowCommits
+ * commits the client has without history
+ * @param filterSpec
+ * the filter spec
+ * @param clientCapabilities
+ * capabilities sent in the request
+ * @param deepenNots
+ * Requests that the shallow clone/fetch should be cut at these
+ * specific revisions instead of a depth.
+ * @param deepenSince
+ * Requests that the shallow clone/fetch should be cut at a
+ * specific time, instead of depth
+ * @param agent
+ * agent as reported by the client in the request body
+ * @param clientSID
+ * agent as reported by the client in the request body
+ */
+ FetchRequest(@NonNull Set<ObjectId> wantIds, int depth,
+ @NonNull Set<ObjectId> clientShallowCommits,
+ @NonNull FilterSpec filterSpec,
+ @NonNull Set<String> clientCapabilities, int deepenSince,
+ @NonNull List<String> deepenNots, @Nullable String agent,
+ @Nullable String clientSID) {
+ this.wantIds = requireNonNull(wantIds);
+ this.depth = depth;
+ this.clientShallowCommits = requireNonNull(clientShallowCommits);
+ this.filterSpec = requireNonNull(filterSpec);
+ this.clientCapabilities = requireNonNull(clientCapabilities);
+ this.deepenSince = deepenSince;
+ this.deepenNots = requireNonNull(deepenNots);
+ this.agent = agent;
+ this.clientSID = clientSID;
+ }
+
+ /**
+ * Get object ids in the "want" lines
+ *
+ * @return object ids in the "want" (and "want-ref") lines of the request
+ */
+ @NonNull
+ Set<ObjectId> getWantIds() {
+ return wantIds;
+ }
+
+ /**
+ * Get the depth set in a "deepen" line
+ *
+ * @return the depth set in a "deepen" line. 0 by default.
+ */
+ int getDepth() {
+ return depth;
+ }
+
+ /**
+ * Shallow commits the client already has.
+ *
+ * These are sent by the client in "shallow" request lines.
+ *
+ * @return set of commits the client has declared as shallow.
+ */
+ @NonNull
+ Set<ObjectId> getClientShallowCommits() {
+ return clientShallowCommits;
+ }
+
+ /**
+ * Get the filter spec given in a "filter" line
+ *
+ * @return the filter spec given in a "filter" line
+ */
+ @NonNull
+ FilterSpec getFilterSpec() {
+ return filterSpec;
+ }
+
+ /**
+ * Capabilities that the client wants enabled from the server.
+ *
+ * Capabilities are options that tune the expected response from the server,
+ * like "thin-pack", "no-progress" or "ofs-delta". This list should be a
+ * subset of the capabilities announced by the server in its first response.
+ *
+ * These options are listed and well-defined in the git protocol
+ * specification.
+ *
+ * The agent capability is not included in this set. It can be retrieved via
+ * {@link #getAgent()}.
+ *
+ * @return capabilities sent by the client (excluding the "agent"
+ * capability)
+ */
+ @NonNull
+ Set<String> getClientCapabilities() {
+ return clientCapabilities;
+ }
+
+ /**
+ * The value in a "deepen-since" line in the request, indicating the
+ * timestamp where to stop fetching/cloning.
+ *
+ * @return timestamp in seconds since the epoch, where to stop the shallow
+ * fetch/clone. Defaults to 0 if not set in the request.
+ */
+ int getDeepenSince() {
+ return deepenSince;
+ }
+
+ /**
+ * Get refs received in "deepen-not" lines
+ *
+ * @return refs received in "deepen-not" lines.
+ */
+ @NonNull
+ List<String> getDeepenNots() {
+ return deepenNots;
+ }
+
+ /**
+ * Get string identifying the agent
+ *
+ * @return string identifying the agent (as sent in the request body by the
+ * client)
+ */
+ @Nullable
+ String getAgent() {
+ return agent;
+ }
+
+ /**
+ * Get string identifying the client session ID
+ *
+ * @return string identifying the client session ID (as sent in the request
+ * body by the client)
+ */
+ @Nullable
+ String getClientSID() {
+ return clientSID;
+ }
+}