git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v4 2/7] refs: specify error for regular refs with `old_target`

From
Karthik Nayak <karthik.188@gmail.com>
Date
Jun 6, 2024, 14:20 UTC
Message-ID
<CAOLa=ZQcZ+pqhe+GbiG=UJi1a3vjQBCz4EDthpa+Rj85FQ0ecw@mail.gmail.com>
In-Reply-To
<ZmGXREp9Xa6qHpMC@tanuki>
Patrick Steinhardt <ps@pks.im> writes:
Show 15 quoted lines
> On Wed, Jun 05, 2024 at 12:29:53PM +0200, Karthik Nayak wrote:
>> From: Karthik Nayak <karthik.188@gmail.com>
>>
>> When a regular reference update contains `old_target` set, we call the
>
> s/contains/has its/
>
>> `ref_update_check_old_target` function to check the referent value. But
>> for regular refs we know that the referent value is not set and this
>
> This is fairly technical and focussed on the implementation. Can we
> maybe talk more about intent ("expected a symref, but is a direct ref")
> rather than the exact implementation to make the commit message a bit
> easier to understand for folks?
>
Fair enough, will change this.
Show 8 quoted lines
>> simply raises a generic error which says nothing about this being a
>> regular ref. Instead let's raise a more specific error when a regular
>> ref update contains `old_target`.
>
> It might be helpful to include before/after in this commit message to
> show the change. Even better would be a test of course, but I think we
> cannot add one at this point in time yet.
>
Yeah will do.

Yeah, adding a test is only possible in the commit where we introduce `symref-delete` and we do test it there.

Show 42 quoted lines
>> Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
>> ---
>>  refs/files-backend.c    | 13 +++++++------
>>  refs/reftable-backend.c |  9 +++++++++
>>  2 files changed, 16 insertions(+), 6 deletions(-)
>>
>> diff --git a/refs/files-backend.c b/refs/files-backend.c
>> index 194e74eb4d..f516d4d82f 100644
>> --- a/refs/files-backend.c
>> +++ b/refs/files-backend.c
>> @@ -2491,14 +2491,15 @@ static int lock_ref_for_update(struct files_ref_store *refs,
>>
>>  		/*
>>  		 * Even if the ref is a regular ref, if `old_target` is set, we
>> -		 * check the referent value. Ideally `old_target` should only
>> -		 * be set for symrefs, but we're strict about its usage.
>> +		 * fail with an error.
>>  		 */
>>  		if (update->old_target) {
>> -			if (ref_update_check_old_target(referent.buf, update, err)) {
>> -				ret = TRANSACTION_GENERIC_ERROR;
>> -				goto out;
>> -			}
>> +			strbuf_addf(err, _("cannot update regular ref: '%s': "
>> +					   "symref target '%s' set"),
>> +				    ref_update_original_update_refname(update),
>> +				    update->old_target);
>> +			ret = TRANSACTION_GENERIC_ERROR;
>> +			goto out;
>
> I feel like these error messages are somewhat technical. If I were
> reading it as a user, I don't think I'd understand what it is trying to
> tell me. How about:
>
>         strbuf_addf(err, _("cannot lock ref '%s': %s",
>                            "expected symref but is a direct ref"));
>
> This also matches the other error messages we have in this function more
> closely. The same is true for the equivalent in the reftable backend.
>
> Patrick
>
I do want to also note that there is a old_target set so perhaps
modified   refs/files-backend.c
@@ -2494,8 +2494,9 @@ static int lock_ref_for_update(struct
files_ref_store *refs,
 		 * fail with an error.
 		 */
 		if (update->old_target) {
-			strbuf_addf(err, _("cannot update regular ref: '%s': "
-					   "symref target '%s' set"),
+			strbuf_addf(err, _("cannot lock ref '%s': "
+					   "expected symref with target '%s': "
+					   "but is a regular ref"),
 				    ref_update_original_update_refname(update),
 				    update->old_target);
 			ret = TRANSACTION_GENERIC_ERROR;
Previous: Patrick SteinhardtNext: Karthik Nayak
Message 17 of 22 in “update-ref: add symref support for --stdin”
  1. 0/7 update-ref: add symref support for --stdinKarthik Nayak, Jun 5, 2024
  2. Karthik NayakJun 6, 2024
  3. Karthik NayakJun 6, 2024
  4. 0/7 update-ref: add symref support for --stdinKarthik Nayak, Jun 7, 2024
  5. 1/7 refs: create and use `ref_update_expects_existing_old_ref()`Karthik Nayak, Jun 7, 2024
  6. 2/7 refs: specify error for regular refs with `old_target`Karthik Nayak, Jun 7, 2024
  7. Patrick SteinhardtJun 10, 2024
  8. Karthik NayakJun 10, 2024
  9. 3/7 update-ref: add support for 'symref-verify' commandKarthik Nayak, Jun 7, 2024
  10. 4/7 update-ref: add support for 'symref-delete' commandKarthik Nayak, Jun 7, 2024
  11. 5/7 update-ref: add support for 'symref-create' commandKarthik Nayak, Jun 7, 2024
  12. 6/7 reftable: pick either 'oid' or 'target' for new updatesKarthik Nayak, Jun 7, 2024
  13. 7/7 update-ref: add support for 'symref-update' commandKarthik Nayak, Jun 7, 2024
  14. 1/7 refs: create and use `ref_update_expects_existing_old_ref()`Karthik Nayak, Jun 5, 2024
  15. 2/7 refs: specify error for regular refs with `old_target`Karthik Nayak, Jun 5, 2024
  16. Patrick SteinhardtJun 6, 2024
  17. Karthik NayakJun 6, 2024
  18. 3/7 update-ref: add support for 'symref-verify' commandKarthik Nayak, Jun 5, 2024
  19. 4/7 update-ref: add support for 'symref-delete' commandKarthik Nayak, Jun 5, 2024
  20. 5/7 update-ref: add support for 'symref-create' commandKarthik Nayak, Jun 5, 2024
  21. 6/7 reftable: pick either 'oid' or 'target' for new updatesKarthik Nayak, Jun 5, 2024
  22. 7/7 update-ref: add support for 'symref-update' commandKarthik Nayak, Jun 5, 2024

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.