From: Taylor Blau <me@ttaylorr.com>
To: Patrick Steinhardt <ps@pks.im>
Cc: "Junio C Hamano" <gitster@pobox.com>, "Jeff King" <peff@peff.net>,
git@vger.kernel.org, "SZEDER Gábor" <szeder.dev@gmail.com>,
"Taylor Blau" <me@ttaylorr.com>
Subject: Re: [PATCH v4] refs: implement reference transaction hook
Date: Mon, 26 Oct 2020 19:52:23 -0400 [thread overview]
Message-ID: <X5dhN+dsLXlKfukF@nand.local> (raw)
In-Reply-To: <20201026074303.GA972@ncase>
On Mon, Oct 26, 2020 at 08:43:03AM +0100, Patrick Steinhardt wrote:
> @Taylor, given that you've already dug into the code: do you already
> have plans to post a patch for this?
You are likely in a better position to do that than I am. I am
unfamiliar enough with the refs.c code to feel confident that my change
is correct, let alone working. The combination of REF_HAVE_OLD, the lock
OID, the update OID, and so on is very puzzling.
Ordinarily, I'd be happy to post a patch after familiarizing myself, but
right now I don't have the time. So, I may come back to this in six
months, but I certainly won't feel bad if you beat me to it ;-).
In the meantime, I'd be fine to apply Peff's patch with some fix-ups,
maybe something like what's below the scissors line.
Taylor
--- >8 ---
Subject: [PATCH] t1416: specify pre-state for ref-updates
The ref-transaction hook documentation says that the expected format for
each line is:
<old-value> SP <new-value> SP <ref-name> LF
without defining what <old-value> is. It could either be the current
state of the refs (after locking, but before committing the
transaction), or the optional caller-provided pre-state.
If <old-value> is to mean the caller-provided pre-state, than $ZERO_OID
could be taken to mean that the update is allowed to take place without
requiring the ref to be at some state. On the other hand, if <old-value>
is taken to mean "the current value of the reference", then that
requires a behavior change.
But that may only be semi-realistic, since any careful callers are
likely to pass a pre-state around anyway, and failing to meet that
pre-state means the hook will not even be invoked.
So, tweak the tests to more closely match how callers will actually
invoke this hook by providing a pre-state explicitly and then asserting
that it made its way down to the ref-transaction hook.
If we do decide to go further and implement a behavior change, it would
make sense to modify the tests to instead look something like:
for before in "$PRE" ""
do
cat >expect <<-EOF &&
$ZERO_OID $POST_OID HEAD
$ZERO_OID $POST_OID refs/heads/master
$PRE_OID $POST_OID HEAD
$PRE_OID $POST_OID refs/heads/master
EOF
git reset --hard $PRE &&
git update-ref HEAD POST $before &&
test_cmp expect actual
done
Co-authored-by: Jeff King <peff@peff.net>
Signed-off-by: Taylor Blau <me@ttaylorr.com>
---
t/t1416-ref-transaction-hooks.sh | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/t/t1416-ref-transaction-hooks.sh b/t/t1416-ref-transaction-hooks.sh
index f6e741c6c0..74f94e293c 100755
--- a/t/t1416-ref-transaction-hooks.sh
+++ b/t/t1416-ref-transaction-hooks.sh
@@ -52,10 +52,10 @@ test_expect_success 'hook gets all queued updates in prepared state' '
fi
EOF
cat >expect <<-EOF &&
- $ZERO_OID $POST_OID HEAD
- $ZERO_OID $POST_OID refs/heads/master
+ $PRE_OID $POST_OID HEAD
+ $PRE_OID $POST_OID refs/heads/master
EOF
- git update-ref HEAD POST <<-EOF &&
+ git update-ref HEAD POST PRE <<-EOF &&
update HEAD $ZERO_OID $POST_OID
update refs/heads/master $ZERO_OID $POST_OID
EOF
@@ -75,10 +75,10 @@ test_expect_success 'hook gets all queued updates in committed state' '
fi
EOF
cat >expect <<-EOF &&
- $ZERO_OID $POST_OID HEAD
- $ZERO_OID $POST_OID refs/heads/master
+ $PRE_OID $POST_OID HEAD
+ $PRE_OID $POST_OID refs/heads/master
EOF
- git update-ref HEAD POST &&
+ git update-ref HEAD POST PRE &&
test_cmp expect actual
'
--
2.29.1.9.g605042ee00
next prev parent reply other threads:[~2020-10-26 23:52 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-02 8:25 [PATCH] refs: implement reference transaction hooks Patrick Steinhardt
2020-06-02 17:47 ` Junio C Hamano
2020-06-03 11:26 ` Patrick Steinhardt
2020-06-07 20:12 ` SZEDER Gábor
2020-06-08 5:36 ` Patrick Steinhardt
2020-06-02 18:09 ` SZEDER Gábor
2020-06-03 9:46 ` Patrick Steinhardt
2020-06-03 12:27 ` [PATCH v2] refs: implement reference transaction hook Patrick Steinhardt
2020-06-03 16:51 ` Taylor Blau
2020-06-04 7:36 ` Patrick Steinhardt
2020-06-15 16:46 ` Taylor Blau
2020-06-16 5:45 ` Patrick Steinhardt
2020-06-03 17:44 ` Han-Wen Nienhuys
2020-06-03 18:03 ` Junio C Hamano
2020-06-18 10:27 ` [PATCH v3] " Patrick Steinhardt
2020-06-18 22:23 ` Junio C Hamano
2020-06-19 6:56 ` [PATCH v4] " Patrick Steinhardt
2020-10-23 1:03 ` Jeff King
2020-10-23 3:59 ` Junio C Hamano
2020-10-23 19:57 ` Taylor Blau
2020-10-23 22:07 ` Taylor Blau
2020-10-26 7:43 ` Patrick Steinhardt
2020-10-26 23:52 ` Taylor Blau [this message]
2020-10-27 5:37 ` Jeff King
2020-10-28 18:22 ` Patrick Steinhardt
2020-10-23 20:00 ` Taylor Blau
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=X5dhN+dsLXlKfukF@nand.local \
--to=me@ttaylorr.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peff@peff.net \
--cc=ps@pks.im \
--cc=szeder.dev@gmail.com \
/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).