All of lore.kernel.org
 help / color / mirror / Atom feed
From: Patrick Steinhardt <ps@pks.im>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, Christian Couder <christian.couder@gmail.com>
Subject: Re: [PATCH v2 1/4] fetch: extract writing to FETCH_HEAD
Date: Mon, 11 Jan 2021 11:26:13 +0100	[thread overview]
Message-ID: <X/wnxSn4KjQF0/T+@ncase> (raw)
In-Reply-To: <xmqqmtxjgfq6.fsf@gitster.c.googlers.com>

[-- Attachment #1: Type: text/plain, Size: 3810 bytes --]

On Fri, Jan 08, 2021 at 03:40:17PM -0800, Junio C Hamano wrote:
> Patrick Steinhardt <ps@pks.im> writes:
> > +static void append_fetch_head(struct fetch_head *fetch_head, const char *old_oid,
> 
> It is clear from the type these days but variable names like
> "old_oid" hint the readers that they are not a hexadecimal object
> name string but either an array of uchar[40] or a struct object_id;
> perhaps "old_oid_hex" would be less misleading.
> 
> If the caller does have struct object_id, then it would be even
> better to take it as-is as a parameter and use oid_to_hex_r() on it in
> this function when it is given to fprintf().  [Nit #1]

Agreed.

[snip]
> > +	fprintf(fetch_head->fp, "%s\t%s\t%s",
> > +		old_oid, merge_status_marker, note);
> > +	for (i = 0; i < url_len; ++i)
> > +		if ('\n' == url[i])
> > +			fputs("\\n", fetch_head->fp);
> > +		else
> > +			fputc(url[i], fetch_head->fp);
> > +	fputc('\n', fetch_head->fp);
> > +}
> 
> OK.  This is the "case FETCH_HEAD_NOT_FOR_MERGE" and "case
> FETCH_HEAD_MERGE" parts in the original.
> 
> As an abstraction, it may be better to make the caller pass a
> boolean "is this for merge?" and keep the knowledge of what exact
> string is used for merge_status_marker to this function, instead of
> letting the caller passing it as a parameter in the string form.
> After all, we never allow anything other than an empty string or a
> fixed "not-for-merge" string in that place in the file format.
> [Nit #2]

I think it's even nicer to just pass in `rm->fetch_head_status`
directly, which allows us to move below switch into `append_fetch_head`.

[snip]
> > +	fclose(fetch_head->fp);
> > +}
> 
> > @@ -909,22 +959,19 @@ N_("It took %.2f seconds to check forced updates. You can use\n"
> >  static int store_updated_refs(const char *raw_url, const char *remote_name,
> >  			      int connectivity_checked, struct ref *ref_map)
> >  {
> > -	FILE *fp;
> > +	struct fetch_head fetch_head;
> 
> And that is why this variable is left uninitialised on stack and it
> is OK.  An alternative design would be to initialize fetch_head.fp
> to NULL, and return early with "if (!fetch_head->fp)" in the two
> functions that take fetch_head struct.  That way, we have less
> reliance on the global variable write_fetch_head.

I like your proposal more. I wasn't quite happy with leaving `fp`
uninitialized, and using it as a sentinel for whether to write something
or not feels natural to me.

[snip]
> > @@ -1016,16 +1063,10 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
> >  				merge_status_marker = "not-for-merge";
> >  				/* fall-through */
> >  			case FETCH_HEAD_MERGE:
> > -				fprintf(fp, "%s\t%s\t%s",
> > -					oid_to_hex(&rm->old_oid),
> > -					merge_status_marker,
> > -					note.buf);
> > -				for (i = 0; i < url_len; ++i)
> > -					if ('\n' == url[i])
> > -						fputs("\\n", fp);
> > -					else
> > -						fputc(url[i], fp);
> > -				fputc('\n', fp);
> > +				append_fetch_head(&fetch_head,
> > +						  oid_to_hex(&rm->old_oid),
> > +						  merge_status_marker,
> > +						  note.buf, url, url_len);
> 
> Here, we can lose merge_status_marker variable from this caller, and
> then this caller becomes:
> 
> 		switch (rm->fetch_head_status) {
> 		case FETCH_HEAD_NOT_FOR_MERGE:
> 		case FETCH_HEAD_MERGE:
> 			append_fetch_head(&fetch_head, &rm->old_oid,
> 				rm->fetch_head_status == FETCH_HEAD_MERGE,
>                                 note.buf, url, url_len);
> 
> Note that I am passing "is this a ref to be merged?" boolean to keep
> the exact string of "not-for-merge" in the callee.

As said above, I'm just moving this complete switch into
`append_fetch_head` and pass `rm->fetch_head_status`.

Patrick

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2021-01-11 10:27 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-07 13:51 [PATCH 0/2] fetch: implement support for atomic reference updates Patrick Steinhardt
2021-01-07 13:51 ` [PATCH 1/2] fetch: allow passing a transaction to `s_update_ref()` Patrick Steinhardt
2021-01-07 22:59   ` Junio C Hamano
2021-01-08  0:45     ` Christian Couder
2021-01-08  7:18       ` Junio C Hamano
2021-01-07 13:51 ` [PATCH 2/2] fetch: implement support for atomic reference updates Patrick Steinhardt
2021-01-08  0:19   ` Junio C Hamano
2021-01-08 12:11 ` [PATCH v2 0/4] " Patrick Steinhardt
2021-01-08 12:11   ` [PATCH v2 1/4] fetch: extract writing to FETCH_HEAD Patrick Steinhardt
2021-01-08 23:40     ` Junio C Hamano
2021-01-11 10:26       ` Patrick Steinhardt [this message]
2021-01-11 19:24         ` Junio C Hamano
2021-01-08 12:11   ` [PATCH v2 2/4] fetch: refactor `s_update_ref` to use common exit path Patrick Steinhardt
2021-01-08 23:50     ` Junio C Hamano
2021-01-11 10:28       ` Patrick Steinhardt
2021-01-08 12:11   ` [PATCH v2 3/4] fetch: allow passing a transaction to `s_update_ref()` Patrick Steinhardt
2021-01-08 23:53     ` Junio C Hamano
2021-01-08 12:11   ` [PATCH v2 4/4] fetch: implement support for atomic reference updates Patrick Steinhardt
2021-01-09  0:05     ` Junio C Hamano
2021-01-11 10:42       ` Patrick Steinhardt
2021-01-11 19:47         ` Junio C Hamano
2021-01-12 12:22           ` Patrick Steinhardt
2021-01-12 12:29             ` Patrick Steinhardt
2021-01-12 19:19             ` Junio C Hamano
2021-01-11 11:05 ` [PATCH v3 0/5] " Patrick Steinhardt
2021-01-11 11:05   ` [PATCH v3 1/5] fetch: extract writing to FETCH_HEAD Patrick Steinhardt
2021-01-11 23:16     ` Junio C Hamano
2021-01-11 11:05   ` [PATCH v3 2/5] fetch: use strbuf to format FETCH_HEAD updates Patrick Steinhardt
2021-01-11 11:10     ` Patrick Steinhardt
2021-01-11 11:17     ` Christian Couder
2021-01-11 23:21     ` Junio C Hamano
2021-01-11 11:05   ` [PATCH v3 3/5] fetch: refactor `s_update_ref` to use common exit path Patrick Steinhardt
2021-01-11 11:05   ` [PATCH v3 4/5] fetch: allow passing a transaction to `s_update_ref()` Patrick Steinhardt
2021-01-11 11:05   ` [PATCH v3 5/5] fetch: implement support for atomic reference updates Patrick Steinhardt
2021-01-12  0:04   ` [PATCH v3 0/5] " Junio C Hamano
2021-01-12 12:27 ` [PATCH v4 " Patrick Steinhardt
2021-01-12 12:27   ` [PATCH v4 1/5] fetch: extract writing to FETCH_HEAD Patrick Steinhardt
2021-01-12 12:27   ` [PATCH v4 2/5] fetch: use strbuf to format FETCH_HEAD updates Patrick Steinhardt
2021-01-12 12:27   ` [PATCH v4 3/5] fetch: refactor `s_update_ref` to use common exit path Patrick Steinhardt
2021-01-12 12:27   ` [PATCH v4 4/5] fetch: allow passing a transaction to `s_update_ref()` Patrick Steinhardt
2021-01-12 12:27   ` [PATCH v4 5/5] fetch: implement support for atomic reference updates Patrick Steinhardt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=X/wnxSn4KjQF0/T+@ncase \
    --to=ps@pks.im \
    --cc=christian.couder@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.