mirror of
https://git.proxmox.com/git/libgit2
synced 2026-01-04 10:05:14 +00:00
Conflicts: .travis.yml include/git2/diff.h src/config_file.c src/diff.c src/diff_output.c src/mwindow.c src/path.c tests-clar/clar_helpers.c tests-clar/object/tree/frompath.c tests/t00-core.c tests/t03-objwrite.c tests/t08-tag.c tests/t10-refs.c tests/t12-repo.c tests/t18-status.c tests/test_helpers.c tests/test_main.c
109 lines
3.3 KiB
C
109 lines
3.3 KiB
C
/*
|
|
* Copyright (C) 2009-2012 the libgit2 contributors
|
|
*
|
|
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
|
* a Linking Exception. For full terms see the included COPYING file.
|
|
*/
|
|
#ifndef INCLUDE_transport_h__
|
|
#define INCLUDE_transport_h__
|
|
|
|
#include "git2/net.h"
|
|
#include "git2/indexer.h"
|
|
#include "vector.h"
|
|
|
|
#define GIT_CAP_OFS_DELTA "ofs-delta"
|
|
|
|
typedef struct git_transport_caps {
|
|
int common:1,
|
|
ofs_delta:1;
|
|
} git_transport_caps;
|
|
|
|
/*
|
|
* A day in the life of a network operation
|
|
* ========================================
|
|
*
|
|
* The library gets told to ls-remote/push/fetch on/to/from some
|
|
* remote. We look at the URL of the remote and fill the function
|
|
* table with whatever is appropriate (the remote may be git over git,
|
|
* ssh or http(s). It may even be an hg or svn repository, the library
|
|
* at this level doesn't care, it just calls the helpers.
|
|
*
|
|
* The first call is to ->connect() which connects to the remote,
|
|
* making use of the direction if necessary. This function must also
|
|
* store the remote heads and any other information it needs.
|
|
*
|
|
* The next useful step is to call ->ls() to get the list of
|
|
* references available to the remote. These references may have been
|
|
* collected on connect, or we may build them now. For ls-remote,
|
|
* nothing else is needed other than closing the connection.
|
|
* Otherwise, the higher leves decide which objects we want to
|
|
* have. ->send_have() is used to tell the other end what we have. If
|
|
* we do need to download a pack, ->download_pack() is called.
|
|
*
|
|
* When we're done, we call ->close() to close the
|
|
* connection. ->free() takes care of freeing all the resources.
|
|
*/
|
|
|
|
struct git_transport {
|
|
/**
|
|
* Where the repo lives
|
|
*/
|
|
char *url;
|
|
/**
|
|
* Whether we want to push or fetch
|
|
*/
|
|
int direction : 1, /* 0 fetch, 1 push */
|
|
connected : 1;
|
|
/**
|
|
* Connect and store the remote heads
|
|
*/
|
|
int (*connect)(struct git_transport *transport, int dir);
|
|
/**
|
|
* Give a list of references, useful for ls-remote
|
|
*/
|
|
int (*ls)(struct git_transport *transport, git_headlist_cb list_cb, void *opaque);
|
|
/**
|
|
* Push the changes over
|
|
*/
|
|
int (*push)(struct git_transport *transport);
|
|
/**
|
|
* Negotiate the minimal amount of objects that need to be
|
|
* retrieved
|
|
*/
|
|
int (*negotiate_fetch)(struct git_transport *transport, git_repository *repo, const git_vector *wants);
|
|
/**
|
|
* Download the packfile
|
|
*/
|
|
int (*download_pack)(struct git_transport *transport, git_repository *repo, git_off_t *bytes, git_indexer_stats *stats);
|
|
/**
|
|
* Fetch the changes
|
|
*/
|
|
int (*fetch)(struct git_transport *transport);
|
|
/**
|
|
* Close the connection
|
|
*/
|
|
int (*close)(struct git_transport *transport);
|
|
/**
|
|
* Free the associated resources
|
|
*/
|
|
void (*free)(struct git_transport *transport);
|
|
};
|
|
|
|
|
|
int git_transport_new(struct git_transport **transport, const char *url);
|
|
int git_transport_local(struct git_transport **transport);
|
|
int git_transport_git(struct git_transport **transport);
|
|
int git_transport_http(struct git_transport **transport);
|
|
int git_transport_dummy(struct git_transport **transport);
|
|
|
|
/**
|
|
Returns true if the passed URL is valid (a URL with a Git supported scheme,
|
|
or pointing to an existing path)
|
|
*/
|
|
int git_transport_valid_url(const char *url);
|
|
|
|
typedef struct git_transport git_transport;
|
|
typedef int (*git_transport_cb)(git_transport **transport);
|
|
|
|
#endif
|