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

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

From
Junio C Hamano <gitster@pobox.com>
Date
Jun 25, 2015, 17:18 UTC
Message-ID
<xmqqioabzoz2.fsf@gitster.dls.corp.google.com>
In-Reply-To
<1435173388-8346-6-git-send-email-dturner@twopensource.com>
David Turner <dturner@twopensource.com> writes:
> These are necessary because ref backends manage reflogs.
Because?
	Because with core.logAllRefUpdates set to false, creating or
        updating a ref would not log what is done to it, unless a
        reflog already exists for the ref.  There are cases where
        we always want to have a reflog for a ref (e.g. refs/stash)
        regardless of the value of core.logAllRefUpdates, and we
        need a way to ensure that a reflog for a ref exists.
        "reflog create" is the way to do so.
	Also we need to be able to tell if a reflog for a ref
	exists, and "reflog exists" is the way to do so.

Now, going back to 4/6, I think create_reflog() function as an external API has a few problems.

 * Its name does not tell us what should happen when a reflog
   already exists for the refname the caller asked to "create"
   reflog for.  I understand that this only makes sure it exists and
   does not destroy existing one.  Its old name, log_ref_setup(),
   did not have this problem, but now it does.
 * Its second parameter that is a strbuf is used only internally
   from within log_ref_write_1(); all the external callers do not
   look at it and they are forced to strbuf_init() it before calling
   the function and to strbuf_release() after the function returns.

Oh, also 4/6 incorrectly says that log_ref_write() is renamed to create_reflog(), but it was log_ref_setup() that was renamed.

I think what 4/6 should have done in order to make the guts of what log_ref_setup() does available as a more useful external API is to

 * keep log_ref_setup() as-is, make it static to refs.c, and have
   the internal caller that cares about the strbuf (i.e. the path
   to the log file) call that; and
 * Add a thin-wrapper for callers that do not care about the path to
   the log file, e.g.
	int vivify_reflog(const char *refname, struct strbuf *err)
	{
		int ret;
		struct strbuf sb = STRBUF_INIT;
                ret = log_ref_setup(refname, &sb, err);
                strbuf_release(&sb);
                return ret;
	}
Hmm?
    
Previous: David TurnerNext: Junio C Hamano
Message 12 of 16 in “refs backend preamble”
  1. 0/6 refs backend preambleDavid Turner, Jun 24, 2015
  2. 1/6 refs.c: add an err argument to log_ref_setupDavid Turner, Jun 24, 2015
  3. Junio C HamanoJun 25, 2015
  4. 2/6 cherry-pick: Use refs infrastructure for CHERRY_PICK_HEADDavid Turner, Jun 24, 2015
  5. Junio C HamanoJun 25, 2015
  6. 3/6 bisect: use refs infrastructure for BISECT_STARTDavid Turner, Jun 24, 2015
  7. Junio C HamanoJun 25, 2015
  8. David TurnerJun 25, 2015
  9. 4/6 refs: replace log_ref_write with create_reflogDavid Turner, Jun 24, 2015
  10. Junio C HamanoJun 25, 2015
  11. 5/6 git-reflog: add create and exists functionsDavid Turner, Jun 24, 2015
  12. Junio C HamanoJun 25, 2015
  13. Junio C HamanoJun 25, 2015
  14. David TurnerJun 25, 2015
  15. 6/6 git-stash: use git-reflog instead of creating filesDavid Turner, Jun 24, 2015
  16. Junio C HamanoJun 25, 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.