packaging: Add contrib installation
[platform/upstream/git.git] / fetch-pack.h
index cb14871..736a3da 100644 (file)
@@ -2,35 +2,88 @@
 #define FETCH_PACK_H
 
 #include "string-list.h"
+#include "run-command.h"
+#include "protocol.h"
+#include "list-objects-filter-options.h"
+
+struct oid_array;
 
 struct fetch_pack_args {
        const char *uploadpack;
        int unpacklimit;
        int depth;
-       unsigned quiet:1,
-               keep_pack:1,
-               lock_pack:1,
-               use_thin_pack:1,
-               fetch_all:1,
-               stdin_refs:1,
-               verbose:1,
-               no_progress:1,
-               include_tag:1,
-               stateless_rpc:1;
+       const char *deepen_since;
+       const struct string_list *deepen_not;
+       struct list_objects_filter_options filter_options;
+       const struct string_list *server_options;
+
+       /*
+        * If not NULL, during packfile negotiation, fetch-pack will send "have"
+        * lines only with these tips and their ancestors.
+        */
+       const struct oid_array *negotiation_tips;
+
+       unsigned deepen_relative:1;
+       unsigned quiet:1;
+       unsigned keep_pack:1;
+       unsigned lock_pack:1;
+       unsigned use_thin_pack:1;
+       unsigned fetch_all:1;
+       unsigned stdin_refs:1;
+       unsigned diag_url:1;
+       unsigned verbose:1;
+       unsigned no_progress:1;
+       unsigned include_tag:1;
+       unsigned stateless_rpc:1;
+       unsigned check_self_contained_and_connected:1;
+       unsigned self_contained_and_connected:1;
+       unsigned cloning:1;
+       unsigned update_shallow:1;
+       unsigned deepen:1;
+
+       /*
+        * Indicate that the remote of this request is a promisor remote. The
+        * pack received does not need all referred-to objects to be present in
+        * the local object store, and fetch-pack will store the pack received
+        * together with a ".promisor" file indicating that the aforementioned
+        * pack is a promisor pack.
+        */
+       unsigned from_promisor:1;
+
+       /*
+        * Because fetch_pack() overwrites the shallow file upon a
+        * successful deepening non-clone fetch, if this struct
+        * specifies such a fetch, fetch_pack() needs to perform a
+        * connectivity check before deciding if a fetch is successful
+        * (and overwriting the shallow file). fetch_pack() sets this
+        * field to 1 if such a connectivity check was performed.
+        *
+        * This is different from check_self_contained_and_connected
+        * in that the former allows existing objects in the
+        * repository to satisfy connectivity needs, whereas the
+        * latter doesn't.
+        */
+       unsigned connectivity_checked:1;
 };
 
 /*
- * sought contains the full names of remote references that should be
- * updated from.  On return, the names that were found on the remote
- * will have been removed from the list.  The util members of the
- * string_list_items are used internally; they must be NULL on entry
- * (and will be NULL on exit).
+ * sought represents remote references that should be updated from.
+ * On return, the names that were found on the remote will have been
+ * marked as such.
  */
 struct ref *fetch_pack(struct fetch_pack_args *args,
-                      int fd[], struct child_process *conn,
+                      int fd[],
                       const struct ref *ref,
-                      const char *dest,
-                      struct string_list *sought,
-                      char **pack_lockfile);
+                      struct ref **sought,
+                      int nr_sought,
+                      struct oid_array *shallow,
+                      struct string_list *pack_lockfiles,
+                      enum protocol_version version);
+
+/*
+ * Print an appropriate error message for each sought ref that wasn't
+ * matched.  Return 0 if all sought refs were matched, otherwise 1.
+ */
+int report_unmatched_refs(struct ref **sought, int nr_sought);
 
 #endif