[PATCH v2 0/4] refspec: treat 'fetch' as a Boolean value
- From
Taylor Blau <me@ttaylorr.com>
- Date
- Mar 18, 2025, 22:50 UTC
- Message-ID
- <cover.1742338207.git.me@ttaylorr.com>
- In-Reply-To
- <xmqq5xkdrrhs.fsf@gitster.g>
Here's a small reroll that cleans up some wording in the first patch, and drops the accidental inclusion of a stray 'git-diff-pairs' binary that was sitting in my working tree at the time of writing the initial commit.
Otherwise the series is unchanged, but a range-diff is attached nonetheless. Thanks for reviewing :-).
Taylor Blau (4): refspec: treat 'fetch' as a Boolean value refspec: replace `refspec_init()` with fetch/push variants refspec: remove refspec_item_init_or_die() refspec: replace `refspec_item_init()` with fetch/push variants
builtin/fetch.c | 2 +- builtin/pull.c | 3 ++- refspec.c | 38 +++++++++++++++++++++++++++----------- refspec.h | 18 +++++++----------- remote.c | 4 ++-- transport-helper.c | 2 +- 6 files changed, 40 insertions(+), 27 deletions(-)
Range-diff against v1:
1: 7e662acb5a ! 1: 04e1ab8209 refspec: treat 'fetch' as a Boolean value
@@ Commit message
refspec: treat 'fetch' as a Boolean value
Since 6d4c057859 (refspec: introduce struct refspec, 2018-05-16), we
- have constants called REFSPEC_FETCH and REFSPEC_PUSH. This misleadingly
- suggests that we might introduce other modes in the future.
+ have macros called REFSPEC_FETCH and REFSPEC_PUSH. This confusingly
+ suggests that we might introduce other modes in the future, which, while
+ possible, is highly unlikely.
But these values are treated as a Boolean, and stored in a struct field
called 'fetch'. So the following:
@@ Commit message
if (refspec->fetch) { ... }
are equivalent. Let's avoid renaming the Boolean values "true" and
- "false" here and remove the two REFSPEC_ constants mentioned above.
+ "false" here and remove the two REFSPEC_ macros mentioned above.
Since this value is truly a Boolean and will only ever take on a value
of 0 or 1, we can declare it as a single bit unsigned field. In
@@ builtin/pull.c: static const char *get_tracking_branch(const char *remote, const
if (!*spec_src || !strcmp(spec_src, "HEAD"))
spec_src = "HEAD";
- ## git-diff-pairs (new) ##
- Binary files /dev/null and git-diff-pairs differ
-
## refspec.c ##
@@ refspec.c: void refspec_clear(struct refspec *rs)
int valid_fetch_refspec(const char *fetch_refspec_str)
2: fd2354dade = 2: c3021b82ce refspec: replace `refspec_init()` with fetch/push variants
3: 49b470de61 = 3: 88f6a91c46 refspec: remove refspec_item_init_or_die()
4: 95783265fd = 4: f0c323988f refspec: replace `refspec_item_init()` with fetch/push variantsbase-commit: c702dd48567cfebca3d4a06b691de97da3f8dc4a
-- 2.49.0.3.gbb7a4a684c.dirty