diff options
| author | Patrick Steinhardt <ps@pks.im> | 2017-11-12 10:31:48 +0000 |
|---|---|---|
| committer | Patrick Steinhardt <ps@pks.im> | 2018-06-22 09:52:12 +0200 |
| commit | c16556aaddffc1d663c6403747d793adc0819e0a (patch) | |
| tree | 6bf65254b08ffa9eb528e392b8b44bc274eedcba /src | |
| parent | a616fb1668fcf406dbcd8dcc241d5a3613669e62 (diff) | |
| download | libgit2-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.c | 18 | ||||
| -rw-r--r-- | src/odb_pack.c | 6 | ||||
| -rw-r--r-- | src/pack-objects.c | 6 |
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) |
