Skip to content

Commit bced10f

Browse files
pks-tgitster
authored andcommitted
reftable/stack: allow passing flags to reftable_stack_add()
The `reftable_stack_add()` function is a simple wrapper to lock the stack, add records to it via a callback and then commit the result. One problem with it though is that it doesn't accept any flags for creating the addition. This makes it impossible to automatically reload the stack in case it was modified before we managed to lock the stack. Add a `flags` field to plug this gap and pass it through accordingly. For now this new flag won't be used by us, but it will be used by libgit2. Signed-off-by: Patrick Steinhardt <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent a93649d commit bced10f

File tree

4 files changed

+39
-36
lines changed

4 files changed

+39
-36
lines changed

refs/reftable-backend.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1960,7 +1960,7 @@ static int reftable_be_rename_ref(struct ref_store *ref_store,
19601960
ret = backend_for(&arg.be, refs, newrefname, &newrefname, 1);
19611961
if (ret)
19621962
goto done;
1963-
ret = reftable_stack_add(arg.be->stack, &write_copy_table, &arg);
1963+
ret = reftable_stack_add(arg.be->stack, &write_copy_table, &arg, 0);
19641964

19651965
done:
19661966
assert(ret != REFTABLE_API_ERROR);
@@ -1989,7 +1989,7 @@ static int reftable_be_copy_ref(struct ref_store *ref_store,
19891989
ret = backend_for(&arg.be, refs, newrefname, &newrefname, 1);
19901990
if (ret)
19911991
goto done;
1992-
ret = reftable_stack_add(arg.be->stack, &write_copy_table, &arg);
1992+
ret = reftable_stack_add(arg.be->stack, &write_copy_table, &arg, 0);
19931993

19941994
done:
19951995
assert(ret != REFTABLE_API_ERROR);
@@ -2360,7 +2360,7 @@ static int reftable_be_create_reflog(struct ref_store *ref_store,
23602360
goto done;
23612361
arg.stack = be->stack;
23622362

2363-
ret = reftable_stack_add(be->stack, &write_reflog_existence_table, &arg);
2363+
ret = reftable_stack_add(be->stack, &write_reflog_existence_table, &arg, 0);
23642364

23652365
done:
23662366
return ret;
@@ -2431,7 +2431,7 @@ static int reftable_be_delete_reflog(struct ref_store *ref_store,
24312431
return ret;
24322432
arg.stack = be->stack;
24332433

2434-
ret = reftable_stack_add(be->stack, &write_reflog_delete_table, &arg);
2434+
ret = reftable_stack_add(be->stack, &write_reflog_delete_table, &arg, 0);
24352435

24362436
assert(ret != REFTABLE_API_ERROR);
24372437
return ret;

reftable/reftable-stack.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,15 @@ int reftable_addition_commit(struct reftable_addition *add);
6868
* transaction. Releases the lock if held. */
6969
void reftable_addition_destroy(struct reftable_addition *add);
7070

71-
/* add a new table to the stack. The write_table function must call
72-
* reftable_writer_set_limits, add refs and return an error value. */
71+
/*
72+
* Add a new table to the stack. The write_table function must call
73+
* reftable_writer_set_limits, add refs and return an error value.
74+
* The flags are passed through to `reftable_stack_new_addition()`.
75+
*/
7376
int reftable_stack_add(struct reftable_stack *st,
7477
int (*write_table)(struct reftable_writer *wr,
7578
void *write_arg),
76-
void *write_arg);
79+
void *write_arg, unsigned flags);
7780

7881
struct reftable_iterator;
7982

reftable/stack.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -737,10 +737,10 @@ static int reftable_stack_init_addition(struct reftable_addition *add,
737737
static int stack_try_add(struct reftable_stack *st,
738738
int (*write_table)(struct reftable_writer *wr,
739739
void *arg),
740-
void *arg)
740+
void *arg, unsigned flags)
741741
{
742742
struct reftable_addition add = REFTABLE_ADDITION_INIT;
743-
int err = reftable_stack_init_addition(&add, st, 0);
743+
int err = reftable_stack_init_addition(&add, st, flags);
744744
if (err < 0)
745745
goto done;
746746

@@ -756,9 +756,9 @@ static int stack_try_add(struct reftable_stack *st,
756756

757757
int reftable_stack_add(struct reftable_stack *st,
758758
int (*write)(struct reftable_writer *wr, void *arg),
759-
void *arg)
759+
void *arg, unsigned flags)
760760
{
761-
int err = stack_try_add(st, write, arg);
761+
int err = stack_try_add(st, write, arg, flags);
762762
if (err < 0) {
763763
if (err == REFTABLE_OUTDATED_ERROR) {
764764
/* Ignore error return, we want to propagate

t/unit-tests/t-reftable-stack.c

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ static void write_n_ref_tables(struct reftable_stack *st,
128128
ref.refname = buf;
129129
t_reftable_set_hash(ref.value.val1, i, REFTABLE_HASH_SHA1);
130130

131-
err = reftable_stack_add(st, &write_test_ref, &ref);
131+
err = reftable_stack_add(st, &write_test_ref, &ref, 0);
132132
check(!err);
133133
}
134134

@@ -170,7 +170,7 @@ static void t_reftable_stack_add_one(void)
170170
err = reftable_new_stack(&st, dir, &opts);
171171
check(!err);
172172

173-
err = reftable_stack_add(st, write_test_ref, &ref);
173+
err = reftable_stack_add(st, write_test_ref, &ref, 0);
174174
check(!err);
175175

176176
err = reftable_stack_read_ref(st, ref.refname, &dest);
@@ -235,16 +235,16 @@ static void t_reftable_stack_uptodate(void)
235235
err = reftable_new_stack(&st2, dir, &opts);
236236
check(!err);
237237

238-
err = reftable_stack_add(st1, write_test_ref, &ref1);
238+
err = reftable_stack_add(st1, write_test_ref, &ref1, 0);
239239
check(!err);
240240

241-
err = reftable_stack_add(st2, write_test_ref, &ref2);
241+
err = reftable_stack_add(st2, write_test_ref, &ref2, 0);
242242
check_int(err, ==, REFTABLE_OUTDATED_ERROR);
243243

244244
err = reftable_stack_reload(st2);
245245
check(!err);
246246

247-
err = reftable_stack_add(st2, write_test_ref, &ref2);
247+
err = reftable_stack_add(st2, write_test_ref, &ref2, 0);
248248
check(!err);
249249
reftable_stack_destroy(st1);
250250
reftable_stack_destroy(st2);
@@ -428,7 +428,7 @@ static void t_reftable_stack_auto_compaction_fails_gracefully(void)
428428
err = reftable_new_stack(&st, dir, &opts);
429429
check(!err);
430430

431-
err = reftable_stack_add(st, write_test_ref, &ref);
431+
err = reftable_stack_add(st, write_test_ref, &ref, 0);
432432
check(!err);
433433
check_int(st->merged->tables_len, ==, 1);
434434
check_int(st->stats.attempts, ==, 0);
@@ -446,7 +446,7 @@ static void t_reftable_stack_auto_compaction_fails_gracefully(void)
446446
write_file_buf(table_path.buf, "", 0);
447447

448448
ref.update_index = 2;
449-
err = reftable_stack_add(st, write_test_ref, &ref);
449+
err = reftable_stack_add(st, write_test_ref, &ref, 0);
450450
check(!err);
451451
check_int(st->merged->tables_len, ==, 2);
452452
check_int(st->stats.attempts, ==, 1);
@@ -484,10 +484,10 @@ static void t_reftable_stack_update_index_check(void)
484484
err = reftable_new_stack(&st, dir, &opts);
485485
check(!err);
486486

487-
err = reftable_stack_add(st, write_test_ref, &ref1);
487+
err = reftable_stack_add(st, write_test_ref, &ref1, 0);
488488
check(!err);
489489

490-
err = reftable_stack_add(st, write_test_ref, &ref2);
490+
err = reftable_stack_add(st, write_test_ref, &ref2, 0);
491491
check_int(err, ==, REFTABLE_API_ERROR);
492492
reftable_stack_destroy(st);
493493
clear_dir(dir);
@@ -503,7 +503,7 @@ static void t_reftable_stack_lock_failure(void)
503503
err = reftable_new_stack(&st, dir, &opts);
504504
check(!err);
505505
for (i = -1; i != REFTABLE_EMPTY_TABLE_ERROR; i--) {
506-
err = reftable_stack_add(st, write_error, &i);
506+
err = reftable_stack_add(st, write_error, &i, 0);
507507
check_int(err, ==, i);
508508
}
509509

@@ -546,7 +546,7 @@ static void t_reftable_stack_add(void)
546546
}
547547

548548
for (i = 0; i < N; i++) {
549-
int err = reftable_stack_add(st, write_test_ref, &refs[i]);
549+
int err = reftable_stack_add(st, write_test_ref, &refs[i], 0);
550550
check(!err);
551551
}
552552

@@ -555,7 +555,7 @@ static void t_reftable_stack_add(void)
555555
.log = &logs[i],
556556
.update_index = reftable_stack_next_update_index(st),
557557
};
558-
int err = reftable_stack_add(st, write_test_log, &arg);
558+
int err = reftable_stack_add(st, write_test_log, &arg, 0);
559559
check(!err);
560560
}
561561

@@ -639,7 +639,7 @@ static void t_reftable_stack_iterator(void)
639639
}
640640

641641
for (i = 0; i < N; i++) {
642-
err = reftable_stack_add(st, write_test_ref, &refs[i]);
642+
err = reftable_stack_add(st, write_test_ref, &refs[i], 0);
643643
check(!err);
644644
}
645645

@@ -649,7 +649,7 @@ static void t_reftable_stack_iterator(void)
649649
.update_index = reftable_stack_next_update_index(st),
650650
};
651651

652-
err = reftable_stack_add(st, write_test_log, &arg);
652+
err = reftable_stack_add(st, write_test_log, &arg, 0);
653653
check(!err);
654654
}
655655

@@ -725,11 +725,11 @@ static void t_reftable_stack_log_normalize(void)
725725
check(!err);
726726

727727
input.value.update.message = (char *) "one\ntwo";
728-
err = reftable_stack_add(st, write_test_log, &arg);
728+
err = reftable_stack_add(st, write_test_log, &arg, 0);
729729
check_int(err, ==, REFTABLE_API_ERROR);
730730

731731
input.value.update.message = (char *) "one";
732-
err = reftable_stack_add(st, write_test_log, &arg);
732+
err = reftable_stack_add(st, write_test_log, &arg, 0);
733733
check(!err);
734734

735735
err = reftable_stack_read_log(st, input.refname, &dest);
@@ -738,7 +738,7 @@ static void t_reftable_stack_log_normalize(void)
738738

739739
input.value.update.message = (char *) "two\n";
740740
arg.update_index = 2;
741-
err = reftable_stack_add(st, write_test_log, &arg);
741+
err = reftable_stack_add(st, write_test_log, &arg, 0);
742742
check(!err);
743743
err = reftable_stack_read_log(st, input.refname, &dest);
744744
check(!err);
@@ -792,7 +792,7 @@ static void t_reftable_stack_tombstone(void)
792792
}
793793
}
794794
for (i = 0; i < N; i++) {
795-
int err = reftable_stack_add(st, write_test_ref, &refs[i]);
795+
int err = reftable_stack_add(st, write_test_ref, &refs[i], 0);
796796
check(!err);
797797
}
798798

@@ -801,7 +801,7 @@ static void t_reftable_stack_tombstone(void)
801801
.log = &logs[i],
802802
.update_index = reftable_stack_next_update_index(st),
803803
};
804-
int err = reftable_stack_add(st, write_test_log, &arg);
804+
int err = reftable_stack_add(st, write_test_log, &arg, 0);
805805
check(!err);
806806
}
807807

@@ -855,7 +855,7 @@ static void t_reftable_stack_hash_id(void)
855855
err = reftable_new_stack(&st, dir, &opts);
856856
check(!err);
857857

858-
err = reftable_stack_add(st, write_test_ref, &ref);
858+
err = reftable_stack_add(st, write_test_ref, &ref, 0);
859859
check(!err);
860860

861861
/* can't read it with the wrong hash ID. */
@@ -927,7 +927,7 @@ static void t_reflog_expire(void)
927927
.log = &logs[i],
928928
.update_index = reftable_stack_next_update_index(st),
929929
};
930-
int err = reftable_stack_add(st, write_test_log, &arg);
930+
int err = reftable_stack_add(st, write_test_log, &arg, 0);
931931
check(!err);
932932
}
933933

@@ -978,7 +978,7 @@ static void t_empty_add(void)
978978
err = reftable_new_stack(&st, dir, &opts);
979979
check(!err);
980980

981-
err = reftable_stack_add(st, write_nothing, NULL);
981+
err = reftable_stack_add(st, write_nothing, NULL, 0);
982982
check(!err);
983983

984984
err = reftable_new_stack(&st2, dir, &opts);
@@ -1021,7 +1021,7 @@ static void t_reftable_stack_auto_compaction(void)
10211021
};
10221022
snprintf(name, sizeof(name), "branch%04"PRIuMAX, (uintmax_t)i);
10231023

1024-
err = reftable_stack_add(st, write_test_ref, &ref);
1024+
err = reftable_stack_add(st, write_test_ref, &ref, 0);
10251025
check(!err);
10261026

10271027
err = reftable_stack_auto_compact(st);
@@ -1058,7 +1058,7 @@ static void t_reftable_stack_auto_compaction_factor(void)
10581058
};
10591059
xsnprintf(name, sizeof(name), "branch%04"PRIuMAX, (uintmax_t)i);
10601060

1061-
err = reftable_stack_add(st, &write_test_ref, &ref);
1061+
err = reftable_stack_add(st, &write_test_ref, &ref, 0);
10621062
check(!err);
10631063

10641064
check(i < 5 || st->merged->tables_len < 5 * fastlogN(i, 5));
@@ -1140,7 +1140,7 @@ static void t_reftable_stack_add_performs_auto_compaction(void)
11401140
snprintf(buf, sizeof(buf), "branch-%04"PRIuMAX, (uintmax_t)i);
11411141
ref.refname = buf;
11421142

1143-
err = reftable_stack_add(st, write_test_ref, &ref);
1143+
err = reftable_stack_add(st, write_test_ref, &ref, 0);
11441144
check(!err);
11451145

11461146
/*

0 commit comments

Comments
 (0)