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

Re: [PATCH v6 6/7] git-reflog: add create and exists functions

From
Junio C Hamano <gitster@pobox.com>
Date
Jun 30, 2015, 16:07 UTC
Message-ID
<xmqqbnfx89iz.fsf@gitster.dls.corp.google.com>
In-Reply-To
<CAPig+cROJJNTcZnZfMP0meA8ZWGcSHcQCMTCkuC+kn_+OQZ-zA@mail.gmail.com>
Eric Sunshine <sunshine@sunshineco.com> writes:
Show 8 quoted lines
>> +       for (i = start; i < argc; i++) {
>> +               if (safe_create_reflog(argv[i], &err, 1)) {
>> +                       error("could not create reflog %s: %s", argv[i],
>> +                             err.buf);
>> +                       status = 1;
>> +                       strbuf_release(&err);
>
> This feels a bit dirty.

Hmm, I do not share that feeling. I wouldn't be surprised if you found a lot of existing codepaths that run _init() a strbuf once, work on it and then _release() once a section of code is done with it, reuse it for further (unrelated) processing, knowing that _release() implicitly did _init() and the strbuf is ready to use after that. I thought that was a very well established pattern.

Show 8 quoted lines
> While it's true that the current
> implementation of strbuf_release() re-initializes the strbuf (so
> you're not technically wrong by re-using it), that's an implementation
> detail; and indeed, the strbuf_release() documentation says:
>
>     Release a string buffer and the memory it used. You should not
>     use the string buffer after using this function, unless you
>     initialize it again.
Hmph. Perhaps the doc is wrong? ;-)
> Alternatives would be strbuf_reset() or declaring and releasing the
> strbuf within the for-loop scope.

Because _reset() just rewinds the .len pointer without deallocating, you would need an extra _release() before it goes out of scope. If it is expected that the strbuf will be reused for a number of times, the length of the string each iteration uses is similar, and you will iterate the loop many times, "_reset() each time and _release() to clean-up" pattern would save many calls to realloc/free.

Previous: David TurnerNext: Eric Sunshine
Message 19 of 31 in “refs backend preamble”
  1. 0/7 refs backend preambleDavid Turner, Jun 29, 2015
  2. 1/7 refs.c: add err arguments to reflog functionsDavid Turner, Jun 29, 2015
  3. Michael HaggertyJul 6, 2015
  4. David TurnerJul 7, 2015
  5. Michael HaggertyJul 8, 2015
  6. Junio C HamanoJul 8, 2015
  7. Michael HaggertyJul 9, 2015
  8. 2/7 cherry-pick: treat CHERRY_PICK_HEAD and REVERT_HEAD as refsDavid Turner, Jun 29, 2015
  9. Michael HaggertyJul 6, 2015
  10. 3/7 bisect: treat BISECT_HEAD as a refDavid Turner, Jun 29, 2015
  11. 4/7 refs: Break out check for reflog autocreationDavid Turner, Jun 29, 2015
  12. 5/7 refs: new public ref function: safe_create_reflogDavid Turner, Jun 29, 2015
  13. Michael HaggertyJul 6, 2015
  14. David TurnerJul 7, 2015
  15. Michael HaggertyJul 8, 2015
  16. 6/7 git-reflog: add create and exists functionsDavid Turner, Jun 29, 2015
  17. Eric SunshineJun 30, 2015
  18. David TurnerJun 30, 2015
  19. Junio C HamanoJun 30, 2015
  20. Eric SunshineJun 30, 2015
  21. Junio C HamanoJun 30, 2015
  22. David TurnerJun 30, 2015
  23. Junio C HamanoJun 30, 2015
  24. Michael HaggertyJul 6, 2015
  25. David TurnerJul 8, 2015
  26. Michael HaggertyJul 8, 2015
  27. David TurnerJul 8, 2015
  28. 7/7 git-stash: use git-reflog instead of creating filesDavid Turner, Jun 29, 2015
  29. Junio C HamanoJun 29, 2015
  30. Junio C HamanoJun 29, 2015
  31. David TurnerJun 29, 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.