hlibgit2 0.18.0.4 → 0.18.0.5
raw patch · 2 files changed
+182/−2 lines, 2 files
Files
- hlibgit2.cabal +3/−2
- libgit2/src/transports/smart.h +179/−0
hlibgit2.cabal view
@@ -1,5 +1,5 @@ Name: hlibgit2-Version: 0.18.0.4+Version: 0.18.0.5 Synopsis: Low-level bindings to libgit2 Description: Bindings to libgit2 v0.18.0. License-file: LICENSE@@ -16,6 +16,7 @@ libgit2/include/git2/*.h libgit2/src/*.h libgit2/src/hash/*.h+ libgit2/src/transports/*.h libgit2/src/unix/*.h libgit2/src/win32/*.h libgit2/src/xdiff/*.h@@ -204,7 +205,7 @@ libgit2/src libgit2/deps/http-parser - cc-options: -g -DGIT_THREADS -D_FILE_OFFSET_BITS=64 -DGIT_SSL+ cc-options: -g -DGIT_THREADS -D_FILE_OFFSET_BITS=64 -DGIT_SSL ld-options: -g if os(windows) cc-options: -DGIT_WIN32 -DWIN32 -DWIN32_SHA1 -D_DEBUG -D_WIN32_WINNT=0x0501 -DGIT_WINHTTP
+ libgit2/src/transports/smart.h view
@@ -0,0 +1,179 @@+/*+ * Copyright (C) the libgit2 contributors. All rights reserved.+ *+ * This file is part of libgit2, distributed under the GNU GPL v2 with+ * a Linking Exception. For full terms see the included COPYING file.+ */+#include "git2.h"+#include "vector.h"+#include "netops.h"+#include "buffer.h"+#include "push.h"++#define GIT_SIDE_BAND_DATA 1+#define GIT_SIDE_BAND_PROGRESS 2+#define GIT_SIDE_BAND_ERROR 3++#define GIT_CAP_OFS_DELTA "ofs-delta"+#define GIT_CAP_MULTI_ACK "multi_ack"+#define GIT_CAP_SIDE_BAND "side-band"+#define GIT_CAP_SIDE_BAND_64K "side-band-64k"+#define GIT_CAP_INCLUDE_TAG "include-tag"+#define GIT_CAP_DELETE_REFS "delete-refs"+#define GIT_CAP_REPORT_STATUS "report-status"++enum git_pkt_type {+ GIT_PKT_CMD,+ GIT_PKT_FLUSH,+ GIT_PKT_REF,+ GIT_PKT_HAVE,+ GIT_PKT_ACK,+ GIT_PKT_NAK,+ GIT_PKT_PACK,+ GIT_PKT_COMMENT,+ GIT_PKT_ERR,+ GIT_PKT_DATA,+ GIT_PKT_PROGRESS,+ GIT_PKT_OK,+ GIT_PKT_NG,+ GIT_PKT_UNPACK,+};++/* Used for multi-ack */+enum git_ack_status {+ GIT_ACK_NONE,+ GIT_ACK_CONTINUE,+ GIT_ACK_COMMON,+ GIT_ACK_READY+};++/* This would be a flush pkt */+typedef struct {+ enum git_pkt_type type;+} git_pkt;++struct git_pkt_cmd {+ enum git_pkt_type type;+ char *cmd;+ char *path;+ char *host;+};++/* This is a pkt-line with some info in it */+typedef struct {+ enum git_pkt_type type;+ git_remote_head head;+ char *capabilities;+} git_pkt_ref;++/* Useful later */+typedef struct {+ enum git_pkt_type type;+ git_oid oid;+ enum git_ack_status status;+} git_pkt_ack;++typedef struct {+ enum git_pkt_type type;+ char comment[GIT_FLEX_ARRAY];+} git_pkt_comment;++typedef struct {+ enum git_pkt_type type;+ int len;+ char data[GIT_FLEX_ARRAY];+} git_pkt_data;++typedef git_pkt_data git_pkt_progress;++typedef struct {+ enum git_pkt_type type;+ int len;+ char error[GIT_FLEX_ARRAY];+} git_pkt_err;++typedef struct {+ enum git_pkt_type type;+ char *ref;+} git_pkt_ok;++typedef struct {+ enum git_pkt_type type;+ char *ref;+ char *msg;+} git_pkt_ng;++typedef struct {+ enum git_pkt_type type;+ int unpack_ok;+} git_pkt_unpack;++typedef struct transport_smart_caps {+ int common:1,+ ofs_delta:1,+ multi_ack: 1,+ side_band:1,+ side_band_64k:1,+ include_tag:1,+ delete_refs:1,+ report_status:1;+} transport_smart_caps;++typedef void (*packetsize_cb)(size_t received, void *payload);++typedef struct {+ git_transport parent;+ git_remote *owner;+ char *url;+ git_cred_acquire_cb cred_acquire_cb;+ void *cred_acquire_payload;+ int direction;+ int flags;+ git_transport_message_cb progress_cb;+ git_transport_message_cb error_cb;+ void *message_cb_payload;+ git_smart_subtransport *wrapped;+ git_smart_subtransport_stream *current_stream;+ transport_smart_caps caps;+ git_vector refs;+ git_vector common;+ git_atomic cancelled;+ packetsize_cb packetsize_cb;+ void *packetsize_payload;+ unsigned rpc : 1,+ have_refs : 1,+ connected : 1;+ gitno_buffer buffer;+ char buffer_data[65536];+} transport_smart;++/* smart_protocol.c */+int git_smart__store_refs(transport_smart *t, int flushes);+int git_smart__detect_caps(git_pkt_ref *pkt, transport_smart_caps *caps);+int git_smart__push(git_transport *transport, git_push *push);++int git_smart__negotiate_fetch(+ git_transport *transport,+ git_repository *repo,+ const git_remote_head * const *refs,+ size_t count);++int git_smart__download_pack(+ git_transport *transport,+ git_repository *repo,+ git_transfer_progress *stats,+ git_transfer_progress_callback progress_cb,+ void *progress_payload);++/* smart.c */+int git_smart__negotiation_step(git_transport *transport, void *data, size_t len);+int git_smart__get_push_stream(transport_smart *t, git_smart_subtransport_stream **out);++/* smart_pkt.c */+int git_pkt_parse_line(git_pkt **head, const char *line, const char **out, size_t len);+int git_pkt_buffer_flush(git_buf *buf);+int git_pkt_send_flush(GIT_SOCKET s);+int git_pkt_buffer_done(git_buf *buf);+int git_pkt_buffer_wants(const git_remote_head * const *refs, size_t count, transport_smart_caps *caps, git_buf *buf);+int git_pkt_buffer_have(git_oid *oid, git_buf *buf);+void git_pkt_free(git_pkt *pkt);