From: Patrick Steinhardt <ps@pks.im>
To: git <git@vger.kernel.org>
Cc: Christian Couder <christian.couder@gmail.com>
Subject: [PATCH 0/9] Support for transactions in `git-update-ref --stdin`
Date: Wed, 25 Mar 2020 10:53:20 +0100 [thread overview]
Message-ID: <cover.1585129842.git.ps@pks.im> (raw)
[-- Attachment #1: Type: text/plain, Size: 2910 bytes --]
Hi,
inspired by recent discussions about handling transactions in
git-update-refs(1), this series implements proper transaction support in
`git update-refs --stdin`. The goal is to have an all-or-nothing
transaction where a user can queue multiple updates, verify that they
can be committed, and then finally either commits or aborts the
transaction. A typical session would look like the following:
# Start the transaction
> start
< start: ok
# Queue updates
> delete refs/heads/branch
> create refs/heads/another $OID1
# Prepare the transaction. git-update-ref will now try to allocate
# all locks and verify that references are at their expected values.
> prepare
< prepare: ok
# Commit the transaction. The user could also have said "abort" to
# roll back everything.
> commit
< commit: ok
The series builds on the already existing transaction support in refs.c
and exposes it to the user. The most important change that was required
to support this was to convert `git-update-ref --stdin` to handle input
linewise instead of trying to read it in full and only acting after
stdin was closed.
The series is structured as follows:
Patches 1-2: Preparatory patches which make sense as standalone
patches.
Patches 3-7: Preparatory patches that make it easier to convert to
reading commands in a line-wise fashion. No functional
changes are expected.
Patch 8: Conversion to read commands line-wise. No functional
changes are expected, except that Git builds up the transaction
while reading stdin instead of waiting for stdin to be closed
first.
Patch 9: Implementation of transactional commands.
All in all, the new transactional support will only be enabled if the
user invokes any the new commands "start", "prepare", "commit" or
"abort". In case he doesn't, no functional changes are expected.
Patrick
Patrick Steinhardt (9):
refs: fix segfault when aborting empty transaction
git-update-ref.txt: add missing word
strbuf: provide function to append whole lines
update-ref: organize commands in an array
update-ref: drop unused argument for `parse_refname`
update-ref: pass end pointer instead of strbuf
update-ref: move transaction handling into `update_refs_stdin()`
update-ref: read commands in a line-wise fashion
update-ref: implement interactive transaction handling
Documentation/git-update-ref.txt | 28 +++-
builtin/update-ref.c | 255 ++++++++++++++++++++++---------
refs/files-backend.c | 20 +--
strbuf.c | 10 ++
strbuf.h | 6 +
t/t1400-update-ref.sh | 131 ++++++++++++++++
6 files changed, 370 insertions(+), 80 deletions(-)
--
2.26.0
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next reply other threads:[~2020-03-25 9:53 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-25 9:53 Patrick Steinhardt [this message]
2020-03-25 9:53 ` [PATCH 1/9] refs: fix segfault when aborting empty transaction Patrick Steinhardt
2020-03-27 19:59 ` Junio C Hamano
2020-03-25 9:53 ` [PATCH 2/9] git-update-ref.txt: add missing word Patrick Steinhardt
2020-03-25 9:53 ` [PATCH 3/9] strbuf: provide function to append whole lines Patrick Steinhardt
2020-03-27 21:04 ` Junio C Hamano
2020-03-30 13:25 ` Patrick Steinhardt
2020-03-30 17:12 ` Junio C Hamano
2020-03-25 9:53 ` [PATCH 4/9] update-ref: organize commands in an array Patrick Steinhardt
2020-03-27 21:25 ` Junio C Hamano
2020-03-30 8:05 ` Patrick Steinhardt
2020-03-30 16:55 ` Junio C Hamano
2020-03-30 17:37 ` Patrick Steinhardt
2020-03-25 9:54 ` [PATCH 5/9] update-ref: drop unused argument for `parse_refname` Patrick Steinhardt
2020-03-25 9:54 ` [PATCH 6/9] update-ref: pass end pointer instead of strbuf Patrick Steinhardt
2020-03-25 9:54 ` [PATCH 7/9] update-ref: move transaction handling into `update_refs_stdin()` Patrick Steinhardt
2020-03-27 21:44 ` Junio C Hamano
2020-03-25 9:54 ` [PATCH 8/9] update-ref: read commands in a line-wise fashion Patrick Steinhardt
2020-03-27 21:58 ` Junio C Hamano
2020-03-30 8:11 ` Patrick Steinhardt
2020-03-30 17:39 ` Junio C Hamano
2020-03-25 9:54 ` [PATCH 9/9] update-ref: implement interactive transaction handling Patrick Steinhardt
2020-03-27 22:00 ` Junio C Hamano
2020-03-30 13:46 ` [PATCH v2 0/9] Support for transactions in `git-update-ref --stdin` Patrick Steinhardt
2020-03-30 13:46 ` [PATCH v2 1/9] refs: fix segfault when aborting empty transaction Patrick Steinhardt
2020-03-30 13:46 ` [PATCH v2 2/9] git-update-ref.txt: add missing word Patrick Steinhardt
2020-03-30 13:46 ` [PATCH v2 3/9] strbuf: provide function to append whole lines Patrick Steinhardt
2020-03-30 13:46 ` [PATCH v2 4/9] update-ref: organize commands in an array Patrick Steinhardt
2020-03-30 13:46 ` [PATCH v2 5/9] update-ref: drop unused argument for `parse_refname` Patrick Steinhardt
2020-03-30 13:46 ` [PATCH v2 6/9] update-ref: pass end pointer instead of strbuf Patrick Steinhardt
2020-03-30 13:46 ` [PATCH v2 7/9] update-ref: move transaction handling into `update_refs_stdin()` Patrick Steinhardt
2020-03-30 13:46 ` [PATCH v2 8/9] update-ref: read commands in a line-wise fashion Patrick Steinhardt
2020-03-30 13:47 ` [PATCH v2 9/9] update-ref: implement interactive transaction handling Patrick Steinhardt
2020-04-02 7:09 ` [PATCH v3 0/9] Support for transactions in `git-update-ref --stdin` Patrick Steinhardt
2020-04-02 7:09 ` [PATCH v3 1/9] refs: fix segfault when aborting empty transaction Patrick Steinhardt
2020-04-02 7:09 ` [PATCH v3 2/9] git-update-ref.txt: add missing word Patrick Steinhardt
2020-04-02 7:09 ` [PATCH v3 3/9] strbuf: provide function to append whole lines Patrick Steinhardt
2020-04-02 7:09 ` [PATCH v3 4/9] update-ref: organize commands in an array Patrick Steinhardt
2020-04-02 7:09 ` [PATCH v3 5/9] update-ref: drop unused argument for `parse_refname` Patrick Steinhardt
2020-04-02 7:09 ` [PATCH v3 6/9] update-ref: pass end pointer instead of strbuf Patrick Steinhardt
2020-04-02 7:09 ` [PATCH v3 7/9] update-ref: move transaction handling into `update_refs_stdin()` Patrick Steinhardt
2020-04-02 7:09 ` [PATCH v3 8/9] update-ref: read commands in a line-wise fashion Patrick Steinhardt
2020-04-02 7:10 ` [PATCH v3 9/9] update-ref: implement interactive transaction handling Patrick Steinhardt
2020-04-03 13:40 ` Phillip Wood
2020-04-03 16:51 ` Patrick Steinhardt
2020-04-03 17:33 ` Junio C Hamano
2020-04-03 17:35 ` Junio C Hamano
2020-04-06 7:10 ` Patrick Steinhardt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cover.1585129842.git.ps@pks.im \
--to=ps@pks.im \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).