diff options
author | Junio C Hamano <gitster@pobox.com> | 2020-12-08 15:11:17 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2020-12-08 15:11:17 -0800 |
commit | 1bc550effee121c930e877fed3b9dc20935959de (patch) | |
tree | 19a89bf3ff69ce478b26a707737f675bf55bf052 /builtin | |
parent | Merge branch 'js/add-i-color-fix' (diff) | |
parent | update-ref: disallow "start" for ongoing transactions (diff) | |
download | tgif-1bc550effee121c930e877fed3b9dc20935959de.tar.xz |
Merge branch 'ps/update-ref-multi-transaction'
"git update-ref --stdin" learns to take multiple transactions in a
single session.
* ps/update-ref-multi-transaction:
update-ref: disallow "start" for ongoing transactions
p1400: use `git-update-ref --stdin` to test multiple transactions
update-ref: allow creation of multiple transactions
t1400: avoid touching refs on filesystem
Diffstat (limited to 'builtin')
-rw-r--r-- | builtin/update-ref.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/builtin/update-ref.c b/builtin/update-ref.c index 8a2df4459c..6029a80544 100644 --- a/builtin/update-ref.c +++ b/builtin/update-ref.c @@ -436,6 +436,8 @@ static void update_refs_stdin(void) switch (state) { case UPDATE_REFS_OPEN: case UPDATE_REFS_STARTED: + if (state == UPDATE_REFS_STARTED && cmd->state == UPDATE_REFS_STARTED) + die("cannot restart ongoing transaction"); /* Do not downgrade a transaction to a non-transaction. */ if (cmd->state >= state) state = cmd->state; @@ -446,7 +448,18 @@ static void update_refs_stdin(void) state = cmd->state; break; case UPDATE_REFS_CLOSED: - die("transaction is closed"); + if (cmd->state != UPDATE_REFS_STARTED) + die("transaction is closed"); + + /* + * Open a new transaction if we're currently closed and + * get a "start". + */ + state = cmd->state; + transaction = ref_transaction_begin(&err); + if (!transaction) + die("%s", err.buf); + break; } |