From: Junio C Hamano <gitster@pobox.com>
To: Stephen Boyd <bebarino@gmail.com>
Cc: git@vger.kernel.org, Johannes Sixt <j.sixt@viscovery.net>
Subject: Re: [PATCHv3 2/2] read-tree: migrate to parse-options
Date: Fri, 26 Jun 2009 10:23:21 -0700 [thread overview]
Message-ID: <7vab3uucxi.fsf@alter.siamese.dyndns.org> (raw)
In-Reply-To: <4A445CB0.4010506@gmail.com> (Stephen Boyd's message of "Thu\, 25 Jun 2009 22\:29\:20 -0700")
Stephen Boyd <bebarino@gmail.com> writes:
> Sorry I went a little overboard with s/:1// on unpack_tree_options.
> You'll probably want to squash this on top.
>
> diff --git a/unpack-trees.h b/unpack-trees.h
> index d19df44..f344679 100644
> --- a/unpack-trees.h
> +++ b/unpack-trees.h
> @@ -21,14 +21,14 @@ struct unpack_trees_options {
> merge,
> update,
> index_only,
> - nontrivial_merge,
> + nontrivial_merge:1,
> trivial_merges_only,
> verbose_update,
> aggressive,
> - skip_unmerged,
> - initial_checkout,
> - diff_index_cached,
> - gently;
> + skip_unmerged:1,
> + initial_checkout:1,
> + diff_index_cached:1,
> + gently:1;
Let's look at this (not this follow-up patch) the other way around.
Six months down the load, somebody may ask you:
Is there a good reason why many are not bitfields but only selected
few are bitfields in this structure? Most of these can and should be
bitfields, as far as I can see, because the code uses them as
booleans, and the only breakage it may cause if we change them to
bitfields to shrink this structure would be the option parsing code.
What would be your answer? Doesn't it feel wrong to do such a conversion
only to work around the current limitation of parseopt?
By the way, has it been verified that all the users of these fields are OK
with this change when they use these fields? I am not worried about them
reading the value command line option parser set, but more worried about
reading after other codepaths set/modified these fields. The command line
parser that uses parseopt may correctly set only 0 or 1 to these fields
initially and we should be able to verify that from the patch text, but
there is no guarantee that this conversion is even correct at runtime
without an audit, no?
The callers have long relied on the fact that reading from these bitfields
yields either 0 or 1 and never 2 or larger, but they are now widened to
full-width unsigned. A pattern like this:
uto.field = ~uto.field;
if (uto.field == 1) {
field now set;
} else {
field now unset;
}
would be broken by widening "unsigned field:1" to "unsigned field", right?
I am not saying this is the only pattern that would break, nor I know
there are codepaths that use this pattern, but I think you got my point.
next prev parent reply other threads:[~2009-06-26 17:23 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-06-24 4:27 [PATCH 1/2] read-tree: convert unhelpful usage()'s to helpful die()'s Stephen Boyd
2009-06-24 4:27 ` [PATCH 2/2] read-tree: migrate to parse-options Stephen Boyd
2009-06-24 5:08 ` Junio C Hamano
2009-06-25 1:36 ` Stephen Boyd
2009-06-25 5:06 ` [PATCHv2 " Stephen Boyd
2009-06-25 6:55 ` Johannes Sixt
2009-06-26 3:15 ` Stephen Boyd
2009-06-26 5:14 ` [PATCHv3 1/2] read-tree: convert unhelpful usage()'s to helpful die()'s Stephen Boyd
2009-06-26 5:14 ` [PATCHv3 2/2] read-tree: migrate to parse-options Stephen Boyd
2009-06-26 5:29 ` Stephen Boyd
2009-06-26 17:23 ` Junio C Hamano [this message]
2009-06-27 2:00 ` Stephen Boyd
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=7vab3uucxi.fsf@alter.siamese.dyndns.org \
--to=gitster@pobox.com \
--cc=bebarino@gmail.com \
--cc=git@vger.kernel.org \
--cc=j.sixt@viscovery.net \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).