summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2017-11-12 10:31:48 +0000
committerPatrick Steinhardt <ps@pks.im>2018-06-22 09:52:12 +0200
commitc16556aaddffc1d663c6403747d793adc0819e0a (patch)
tree6bf65254b08ffa9eb528e392b8b44bc274eedcba /src
parenta616fb1668fcf406dbcd8dcc241d5a3613669e62 (diff)
downloadlibgit2-c16556aaddffc1d663c6403747d793adc0819e0a.tar.gz
indexer: introduce options struct to `git_indexer_new`
We strive to keep an options structure to many functions to be able to extend options in the future without breaking the API. `git_indexer_new` doesn't have one right now, but we want to be able to add an option for enabling strict packfile verification. Add a new `git_indexer_options` structure and adjust callers to use that.
Diffstat (limited to 'src')
-rw-r--r--src/indexer.c18
-rw-r--r--src/odb_pack.c6
-rw-r--r--src/pack-objects.c6
3 files changed, 24 insertions, 6 deletions
diff --git a/src/indexer.c b/src/indexer.c
index 1a59f03f1..fc9a3bbff 100644
--- a/src/indexer.c
+++ b/src/indexer.c
@@ -113,24 +113,34 @@ static int objects_cmp(const void *a, const void *b)
return git_oid__cmp(&entrya->oid, &entryb->oid);
}
+int git_indexer_init_options(git_indexer_options *opts, unsigned int version)
+{
+ GIT_INIT_STRUCTURE_FROM_TEMPLATE(
+ opts, version, git_indexer_options, GIT_INDEXER_OPTIONS_INIT);
+ return 0;
+}
+
int git_indexer_new(
git_indexer **out,
const char *prefix,
unsigned int mode,
git_odb *odb,
- git_transfer_progress_cb progress_cb,
- void *progress_payload)
+ git_indexer_options *in_opts)
{
+ git_indexer_options opts = GIT_INDEXER_OPTIONS_INIT;
git_indexer *idx;
git_buf path = GIT_BUF_INIT, tmp_path = GIT_BUF_INIT;
static const char suff[] = "/pack";
int error, fd = -1;
+ if (in_opts)
+ memcpy(&opts, in_opts, sizeof(opts));
+
idx = git__calloc(1, sizeof(git_indexer));
GITERR_CHECK_ALLOC(idx);
idx->odb = odb;
- idx->progress_cb = progress_cb;
- idx->progress_payload = progress_payload;
+ idx->progress_cb = opts.progress_cb;
+ idx->progress_payload = opts.progress_cb_payload;
idx->mode = mode ? mode : GIT_PACK_FILE_MODE;
git_hash_ctx_init(&idx->hash_ctx);
git_hash_ctx_init(&idx->trailer);
diff --git a/src/odb_pack.c b/src/odb_pack.c
index 2c3048034..4107db6c1 100644
--- a/src/odb_pack.c
+++ b/src/odb_pack.c
@@ -519,6 +519,7 @@ static int pack_backend__writepack(struct git_odb_writepack **out,
git_transfer_progress_cb progress_cb,
void *progress_payload)
{
+ git_indexer_options opts;
struct pack_backend *backend;
struct pack_writepack *writepack;
@@ -526,13 +527,16 @@ static int pack_backend__writepack(struct git_odb_writepack **out,
*out = NULL;
+ opts.progress_cb = progress_cb;
+ opts.progress_cb_payload = progress_payload;
+
backend = (struct pack_backend *)_backend;
writepack = git__calloc(1, sizeof(struct pack_writepack));
GITERR_CHECK_ALLOC(writepack);
if (git_indexer_new(&writepack->indexer,
- backend->pack_folder, 0, odb, progress_cb, progress_payload) < 0) {
+ backend->pack_folder, 0, odb, &opts) < 0) {
git__free(writepack);
return -1;
}
diff --git a/src/pack-objects.c b/src/pack-objects.c
index c12f25ea5..2b786df33 100644
--- a/src/pack-objects.c
+++ b/src/pack-objects.c
@@ -1388,6 +1388,7 @@ int git_packbuilder_write(
git_transfer_progress_cb progress_cb,
void *progress_cb_payload)
{
+ git_indexer_options opts = GIT_INDEXER_OPTIONS_INIT;
git_indexer *indexer;
git_transfer_progress stats;
struct pack_write_context ctx;
@@ -1395,8 +1396,11 @@ int git_packbuilder_write(
PREPARE_PACK;
+ opts.progress_cb = progress_cb;
+ opts.progress_cb_payload = progress_cb_payload;
+
if (git_indexer_new(
- &indexer, path, mode, pb->odb, progress_cb, progress_cb_payload) < 0)
+ &indexer, path, mode, pb->odb, &opts) < 0)
return -1;
if (!git_repository__cvar(&t, pb->repo, GIT_CVAR_FSYNCOBJECTFILES) && t)