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

Re: [PATCH v2 03/12] struct ref_update: move "have_old" into "flags"

From
Junio C Hamano <gitster@pobox.com>
Date
Feb 12, 2015, 19:15 UTC
Message-ID
<xmqqsiebrlez.fsf@gitster.dls.corp.google.com>
In-Reply-To
<CAGZ79kYqx8s8Cz29Qn1aBtCnDOkR-Guk4RM-_KQeO+nHWv=r8w@mail.gmail.com>
Stefan Beller <sbeller@google.com> writes:
Show 19 quoted lines
> On Thu, Feb 12, 2015 at 3:12 AM, Michael Haggerty <mhagger@alum.mit.edu> wrote:
>> -       int flags; /* REF_NODEREF? */
>> -       int have_old; /* 1 if old_sha1 is valid, 0 otherwise */
>> +       /*
>> +        * One or more of REF_HAVE_OLD, REF_NODEREF,
>> +        * REF_DELETING, and REF_IS_PRUNING:
>> +        */
>> +       int flags;
>
> Nit:
> I'd find it more readable if it would be:
>     /*
>      * One or more of
>      * REF_HAVE_OLD,
>      * REF_NODEREF,
>      * REF_DELETING,
>      * REF_IS_PRUNING:
>      * whose definition is found at the top of this file.
>      */

I wouldn't do either, though, as you would have to keep repeating yourself here and over there. Wouldn't it be sufficient to:

 - Have a header that says "these are bits meant to go to struct
   ref_update.flags" at the beginning of series of #define's;
 - Say "ref_update.flags bits are defined above" here.  The phrasing
   can be "One or more of REF_HAVE_OLD, etc. defined above." as long
   as it is clear that this is not meant to be an exhausitive list.

Also, unless we are taking advantage of the fact that MSB is special in signed integral types [*1*], I would prefer to see us use an unsigned type to store these bits in a variable of an integral type. That would let the readers assume that they have fewer tricky things possibly going on in the code.

[Footnote]
*1* For example, you can give the MSB to the REF_ERROR bit, and say
	if (structure->flags < 0)
        	there is an error;
	else
        	other things;

only if flags is a signed type. Also if you are relying on the fact that MSB is special in this kind of thing:

	structure->flags >>= 3;
then you obviously cannot use unsigned type for collection of bits.
Previous: Stefan BellerNext: Michael Haggerty
Message 6 of 27 in “Allow reference values to be checked in a transaction”
  1. 00/12 Allow reference values to be checked in a transactionMichael Haggerty, Feb 12, 2015
  2. 01/12 refs: move REF_DELETING to refs.cMichael Haggerty, Feb 12, 2015
  3. 02/12 refs: remove the gap in the REF_* constant valuesMichael Haggerty, Feb 12, 2015
  4. 03/12 struct ref_update: move "have_old" into "flags"Michael Haggerty, Feb 12, 2015
  5. Stefan BellerFeb 12, 2015
  6. Junio C HamanoFeb 12, 2015
  7. Michael HaggertyFeb 17, 2015
  8. Junio C HamanoFeb 17, 2015
  9. 04/12 ref_transaction_update(): remove "have_old" parameterMichael Haggerty, Feb 12, 2015
  10. Junio C HamanoFeb 12, 2015
  11. Michael HaggertyFeb 13, 2015
  12. Junio C HamanoFeb 13, 2015
  13. 05/12 ref_transaction_delete(): remove "have_old" parameterMichael Haggerty, Feb 12, 2015
  14. 06/12 commit: add tests of commit racesMichael Haggerty, Feb 12, 2015
  15. Stefan BellerFeb 12, 2015
  16. Michael HaggertyFeb 17, 2015
  17. Junio C HamanoFeb 12, 2015
  18. Michael HaggertyFeb 17, 2015
  19. 07/12 commit: avoid race when creating orphan commitsMichael Haggerty, Feb 12, 2015
  20. Junio C HamanoFeb 12, 2015
  21. 08/12 ref_transaction_create(): check that new_sha1 is validMichael Haggerty, Feb 12, 2015
  22. 09/12 ref_transaction_delete(): check that old_sha1 is not null_sha1Michael Haggerty, Feb 12, 2015
  23. 10/12 ref_transaction_verify(): new function to check a reference's valueMichael Haggerty, Feb 12, 2015
  24. Stefan BellerFeb 12, 2015
  25. 11/12 update_ref(): improve documentationMichael Haggerty, Feb 12, 2015
  26. 12/12 refs.h: Remove duplication in function docstringsMichael Haggerty, Feb 12, 2015
  27. Junio C HamanoFeb 12, 2015

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.