Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions include/git2/common.h
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,7 @@ typedef enum {
GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION,
GIT_OPT_SET_SSL_CIPHERS,
GIT_OPT_GET_USER_AGENT,
GIT_OPT_ENABLE_OFS_DELTA,
} git_libgit2_opt_t;

/**
Expand Down Expand Up @@ -305,6 +306,16 @@ typedef enum {
* >
* > - `ciphers` is the list of ciphers that are eanbled.
*
* * opts(GIT_OPT_ENABLE_OFS_DELTA, int enabled)
*
* > Enable or disable the use of "offset deltas" when creating packfiles,
* > and the negotiation of them when talking to a remote server.
* > Offset deltas store a delta base location as an offset into the
* > packfile from the current location, which provides a shorter encoding
* > and thus smaller resultant packfiles.
* > Packfiles containing offset deltas can still be read.
* > This defaults to enabled.
*
* @param option Option key
* @param ... value to set the option
* @return 0 on success, <0 on failure
Expand Down
5 changes: 5 additions & 0 deletions src/settings.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#include "global.h"
#include "object.h"
#include "refs.h"
#include "transports/smart.h"

void git_libgit2_version(int *major, int *minor, int *rev)
{
Expand Down Expand Up @@ -222,6 +223,10 @@ int git_libgit2_opts(int key, ...)
}
break;

case GIT_OPT_ENABLE_OFS_DELTA:
git_smart__ofs_delta_enabled = (va_arg(ap, int) != 0);
break;

default:
giterr_set(GITERR_INVALID, "invalid option key");
error = -1;
Expand Down
2 changes: 2 additions & 0 deletions src/transports/smart.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
#define GIT_CAP_THIN_PACK "thin-pack"
#define GIT_CAP_SYMREF "symref"

extern bool git_smart__ofs_delta_enabled;

enum git_pkt_type {
GIT_PKT_CMD,
GIT_PKT_FLUSH,
Expand Down
4 changes: 3 additions & 1 deletion src/transports/smart_protocol.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
/* The minimal interval between progress updates (in seconds). */
#define MIN_PROGRESS_UPDATE_INTERVAL 0.5

bool git_smart__ofs_delta_enabled = true;

int git_smart__store_refs(transport_smart *t, int flushes)
{
gitno_buffer *buf = &t->buffer;
Expand Down Expand Up @@ -138,7 +140,7 @@ int git_smart__detect_caps(git_pkt_ref *pkt, transport_smart_caps *caps, git_vec
if (*ptr == ' ')
ptr++;

if (!git__prefixcmp(ptr, GIT_CAP_OFS_DELTA)) {
if (git_smart__ofs_delta_enabled && !git__prefixcmp(ptr, GIT_CAP_OFS_DELTA)) {
caps->common = caps->ofs_delta = 1;
ptr += strlen(GIT_CAP_OFS_DELTA);
continue;
Expand Down