mirror of
https://github.com/git/git.git
synced 2024-11-24 10:26:17 +08:00
425b139313
Commit walkers need to know the SHA-1 name of any objects they have been asked to fetch while the native pack transport only wants to know the names of the remote refs as the remote side must do the name->SHA-1 translation. Since we only have three fetch implementations and one of them (bundle) doesn't even need the name information we can reduce the code required to perform a fetch by having just one function and passing of the filtered list of refs to be fetched. Each transport can then obtain the information it needs from that ref array to construct its own internal operation state. Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Conflicts: transport.c Signed-off-by: Junio C Hamano <gitster@pobox.com>
80 lines
2.2 KiB
C
80 lines
2.2 KiB
C
#ifndef TRANSPORT_H
|
|
#define TRANSPORT_H
|
|
|
|
#include "cache.h"
|
|
#include "remote.h"
|
|
|
|
struct transport {
|
|
unsigned verbose : 1;
|
|
unsigned fetch : 1;
|
|
struct remote *remote;
|
|
const char *url;
|
|
|
|
void *data;
|
|
|
|
struct ref *remote_refs;
|
|
|
|
const struct transport_ops *ops;
|
|
};
|
|
|
|
#define TRANSPORT_PUSH_ALL 1
|
|
#define TRANSPORT_PUSH_FORCE 2
|
|
|
|
struct transport_ops {
|
|
/**
|
|
* Returns 0 if successful, positive if the option is not
|
|
* recognized or is inapplicable, and negative if the option
|
|
* is applicable but the value is invalid.
|
|
**/
|
|
int (*set_option)(struct transport *connection, const char *name,
|
|
const char *value);
|
|
|
|
struct ref *(*get_refs_list)(const struct transport *transport);
|
|
int (*fetch)(const struct transport *transport, int refs_nr, struct ref **refs);
|
|
int (*push)(struct transport *connection, int refspec_nr, const char **refspec, int flags);
|
|
|
|
int (*disconnect)(struct transport *connection);
|
|
};
|
|
|
|
/* Returns a transport suitable for the url */
|
|
struct transport *transport_get(struct remote *remote, const char *url,
|
|
int fetch);
|
|
|
|
/* Transport options which apply to git:// and scp-style URLs */
|
|
|
|
/* The program to use on the remote side to send a pack */
|
|
#define TRANS_OPT_UPLOADPACK "uploadpack"
|
|
|
|
/* The program to use on the remote side to receive a pack */
|
|
#define TRANS_OPT_RECEIVEPACK "receivepack"
|
|
|
|
/* Transfer the data as a thin pack if not null */
|
|
#define TRANS_OPT_THIN "thin"
|
|
|
|
/* Keep the pack that was transferred if not null */
|
|
#define TRANS_OPT_KEEP "keep"
|
|
|
|
/* Unpack the objects if fewer than this number of objects are fetched */
|
|
#define TRANS_OPT_UNPACKLIMIT "unpacklimit"
|
|
|
|
/* Limit the depth of the fetch if not null */
|
|
#define TRANS_OPT_DEPTH "depth"
|
|
|
|
/**
|
|
* Returns 0 if the option was used, non-zero otherwise. Prints a
|
|
* message to stderr if the option is not used.
|
|
**/
|
|
int transport_set_option(struct transport *transport, const char *name,
|
|
const char *value);
|
|
|
|
int transport_push(struct transport *connection,
|
|
int refspec_nr, const char **refspec, int flags);
|
|
|
|
struct ref *transport_get_remote_refs(struct transport *transport);
|
|
|
|
int transport_fetch_refs(struct transport *transport, struct ref *refs);
|
|
|
|
int transport_disconnect(struct transport *transport);
|
|
|
|
#endif
|