Skip to content

Commit 8c4417f

Browse files
pks-tgitster
authored andcommitted
update-ref: disallow "start" for ongoing transactions
It is currently possible to write multiple "start" commands into git-update-ref(1) for a single session, but none of them except for the first one actually have any effect. Using such nested "start"s may eventually have a sensible effect. One may imagine that it restarts the current transaction, effectively emptying it and creating a new one. It may also allow for creation of nested transactions. But currently, none of these are implemented. Silently ignoring this misuse is making it hard to iterate in the future if "start" is ever going to have meaningful semantics in such a context. This commit thus makes sure to error out in case we see such use. Signed-off-by: Patrick Steinhardt <[email protected]> Reviewed-by: Jeff King <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 2102043 commit 8c4417f

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

builtin/update-ref.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,8 @@ static void update_refs_stdin(void)
436436
switch (state) {
437437
case UPDATE_REFS_OPEN:
438438
case UPDATE_REFS_STARTED:
439+
if (state == UPDATE_REFS_STARTED && cmd->state == UPDATE_REFS_STARTED)
440+
die("cannot restart ongoing transaction");
439441
/* Do not downgrade a transaction to a non-transaction. */
440442
if (cmd->state >= state)
441443
state = cmd->state;

t/t1400-update-ref.sh

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1583,4 +1583,15 @@ test_expect_success 'transaction can commit after abort' '
15831583
test_cmp expect actual
15841584
'
15851585

1586+
test_expect_success 'transaction cannot restart ongoing transaction' '
1587+
cat >stdin <<-EOF &&
1588+
start
1589+
create refs/heads/restart $A
1590+
start
1591+
commit
1592+
EOF
1593+
test_must_fail git update-ref --stdin <stdin >actual &&
1594+
test_must_fail git show-ref --verify refs/heads/restart
1595+
'
1596+
15861597
test_done

0 commit comments

Comments
 (0)