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

Re: [PATCH v5 01/14] Add data structures and basic functions for commit trailers

From
Christian Couder <chriscool@tuxfamily.org>
Date
Feb 9, 2014, 13:48 UTC
Message-ID
<20140209.144809.1747063529382396154.chriscool@tuxfamily.org>
In-Reply-To
<xmqqzjm3x0v3.fsf@gitster.dls.corp.google.com>
From: Junio C Hamano <gitster@pobox.com>
Show 11 quoted lines
>
> Christian Couder <chriscool@tuxfamily.org> writes:
> 
>> +enum action_where { WHERE_AFTER, WHERE_BEFORE };
>> +enum action_if_exist { EXIST_ADD_IF_DIFFERENT, EXIST_ADD_IF_DIFFERENT_NEIGHBOR,
>> +		       EXIST_ADD, EXIST_OVERWRITE, EXIST_DO_NOTHING };
>> +enum action_if_missing { MISSING_ADD, MISSING_DO_NOTHING };
> 
> All these names and "conf_info" below are not named to be specific
> to this little tool.  Can I assume that these will never be exposed
> to the rest of the system?  If so, they are fine.
Yeah, I don't plan them to be exposed to other files.
 
Show 12 quoted lines
>> +struct conf_info {
>> +	char *name;
>> +	char *key;
>> +	char *command;
>> +	enum action_where where;
>> +	enum action_if_exist if_exist;
>> +	enum action_if_missing if_missing;
> 
> It still feels somewhat strange.  It is true that an item can be
> either "exist" or "missing" and it is understandable that it tempts
> you to split that into two, but EXIST_OVERWRITE will not trigger
> either WHERE_AFTER or WHERE_BEFORE action.

Yeah, it's true that WHERE_AFTER/WHERE_BEFORE does not make sense for EXIST_OVERWRITE, EXIST_DO_NOTHING and MISSING_DO_NOTHING, but it's a fact of life that sometimes some options do not make sense with others.

Show 17 quoted lines
>> +static inline int same_token(struct trailer_item *a, struct trailer_item *b, int alnum_len)
>> +{
>> +	return !strncasecmp(a->token, b->token, alnum_len);
>> +}
>> +
>> +static inline int same_value(struct trailer_item *a, struct trailer_item *b)
>> +{
>> +	return !strcasecmp(a->value, b->value);
>> +}
>> +
>> +static inline int same_trailer(struct trailer_item *a, struct trailer_item *b, int alnum_len)
>> +{
>> +	return same_token(a, b, alnum_len) && same_value(a, b);
>> +}
> 
> All these "inlines" look premature optimization that can be
> delegated to any decent compiler, don't they?

Yeah, but as Eric suggested to add them like in header files and you did not reply to him, I thought you agreed with him. I will remove them.

Show 14 quoted lines
>> +/* Get the length of buf from its beginning until its last alphanumeric character */
>> +static inline size_t alnum_len(const char *buf, int len)
>> +{
>> +	while (--len >= 0 && !isalnum(buf[len]));
> 
> Style:
> 
> 	while (--len >= 0 && !isalnum(buf[len]))
>         	;
> 
> You may add a comment on the empty statement to make it stand out
> even more, i.e.
> 
> 		; /* nothing */
Ok, I will do that.
Show 5 quoted lines
>> +	return (size_t) len + 1;
> 
> This is somewhat unfortunate.  if the caller wants to receive
> size_t, perhaps it should be passing in size_t (or ssize_t) to the
> function?  Hard to guess without an actual caller, though.
Ok, I will make it return an int.

Thanks, Christian.

Previous: Junio C HamanoNext: Eric Sunshine
Message 4 of 48 in “Add interpret-trailers builtin”
  1. 00/14 Add interpret-trailers builtinChristian Couder, Feb 6, 2014
  2. 01/14 Add data structures and basic functions for commit trailersChristian Couder, Feb 6, 2014
  3. Junio C HamanoFeb 6, 2014
  4. Christian CouderFeb 9, 2014
  5. Eric SunshineFeb 10, 2014
  6. Junio C HamanoFeb 6, 2014
  7. Christian CouderFeb 9, 2014
  8. 02/14 trailer: process trailers from file and argumentsChristian Couder, Feb 6, 2014
  9. Junio C HamanoFeb 7, 2014
  10. Christian CouderFeb 9, 2014
  11. Junio C HamanoFeb 10, 2014
  12. Christian CouderFeb 10, 2014
  13. Junio C HamanoFeb 10, 2014
  14. Christian CouderFeb 11, 2014
  15. Junio C HamanoFeb 11, 2014
  16. Christian CouderFeb 14, 2014
  17. Junio C HamanoFeb 14, 2014
  18. Christian CouderFeb 14, 2014
  19. Junio C HamanoFeb 14, 2014
  20. Junio C HamanoFeb 14, 2014
  21. Junio C HamanoFeb 15, 2014
  22. Junio C HamanoFeb 21, 2014
  23. Christian CouderFeb 23, 2014
  24. 03/14 trailer: read and process config informationChristian Couder, Feb 6, 2014
  25. 04/14 trailer: process command line trailer argumentsChristian Couder, Feb 6, 2014
  26. Junio C HamanoFeb 7, 2014
  27. Christian CouderFeb 9, 2014
  28. 05/14 trailer: parse trailers from input fileChristian Couder, Feb 6, 2014
  29. 06/14 trailer: put all the processing together and printChristian Couder, Feb 6, 2014
  30. 07/14 trailer: add interpret-trailers commandChristian Couder, Feb 6, 2014
  31. Junio C HamanoFeb 7, 2014
  32. Christian CouderFeb 7, 2014
  33. Junio C HamanoFeb 7, 2014
  34. Junio C HamanoFeb 7, 2014
  35. 08/14 trailer: add tests for "git interpret-trailers"Christian Couder, Feb 6, 2014
  36. Junio C HamanoFeb 7, 2014
  37. 09/14 trailer: if no input file is passed, read from stdinChristian Couder, Feb 6, 2014
  38. Junio C HamanoFeb 7, 2014
  39. 10/14 trailer: execute command from 'trailer.<name>.command'Christian Couder, Feb 6, 2014
  40. Junio C HamanoFeb 7, 2014
  41. Junio C HamanoFeb 7, 2014
  42. 11/14 trailer: add tests for trailer commandChristian Couder, Feb 6, 2014
  43. 12/14 trailer: set author and committer env variablesChristian Couder, Feb 6, 2014
  44. Junio C HamanoFeb 7, 2014
  45. Junio C HamanoFeb 7, 2014
  46. 13/14 trailer: add tests for commands using env variablesChristian Couder, Feb 6, 2014
  47. 14/14 Documentation: add documentation for 'git interpret-trailers'Christian Couder, Feb 6, 2014
  48. Eric SunshineFeb 10, 2014

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.