From: Junio C Hamano <gitster@pobox.com>
To: git@vger.kernel.org
Cc: Patrick Steinhardt <ps@pks.im>,
Derrick Stolee <stolee@gmail.com>,
Jonathan Nieder <jrnieder@gmail.com>,
Emily Shaffer <nasamuffin@google.com>
Subject: Re: [PATCH] BreakingChanges: early adopter option
Date: Fri, 20 Sep 2024 14:33:52 -0700 [thread overview]
Message-ID: <xmqqploydn7j.fsf@gitster.g> (raw)
In-Reply-To: <xmqq7cb77810.fsf@gitster.g> (Junio C. Hamano's message of "Thu, 19 Sep 2024 12:33:47 -0700")
Junio C Hamano <gitster@pobox.com> writes:
> Discussing the desire to make breaking changes, declaring that
> breaking changes are made at a certain version boundary, and
> recording these decisions in this document, are necessary but not
> sufficient. We need to make sure that we can implement, test, and
> deploy such impactful changes.
>
> Formalize the mechanism based on the `feature.*` configuration
> variable to allow early adopters to opt into the breaking change in
> a version of Git before the planned version for the breaking change.
>
> Signed-off-by: Junio C Hamano <gitster@pobox.com>
> ---
>
> * Before I forget. I'll find time to rewrite the "we no longer
> honor core.preferSymlinkRefs" topic to follow this new guideline
> when we see a rough concensus that both the procedure outlined
> here and the idea to remove core.preferSymlinkRefs are good.
So I was looking at my other topic that prepares to deprecate and
remove core.preferSymlinkRefs configuration (i.e. we would still be
able to work with a repository whose HEAD is a symbolic link
pointing at refs/heads/main, but we would never be able to use a
symbolic link to represent a symref ourselves, so "git checkout
next" would replace HEAD with a textual symref, a file that has a
single line "ref: refs/heads/next" in it), to see what it involves
to allow early adopters to experience Git 3.0 features/removals
before it actually happens.
Switching behaviour at runtime with feature.git3 should work well,
and we can also add tests that checks the new behaviour by doing
"test_config feature.git3 true".
One trouble is what to do with "git $cmd --help" for those who
choose to be early adopters.
For "git $cmd --help" and "git -c feature.git3=true $cmd --help" to
show documents describing the behaviour before and after Git 3.0
version boundary, we'd need to install separate set of documents and
switch between them at runtime in builtin/help.c:setup_man_path()
and friends [*]. If we are going to have such a transition often
(e.g., more frequently than every few years), laying such an
infrastructure would certainly be worth it, but an obvious
alternative is to say that, even though the toggling of behaviour
can be done at runtime to allow the early adopters from going back
to the current behaviour to make their life less risky, the contents
of the manual pages are defined at the compile time.
If we are willing to burden early adopters a bit more, we could make
it a build-time option. With "make GIT_BUILD_FOR_GIT3=YesPlease",
binaries will be built for all the then-current Git 3.0 features and
documentation under development. It certainly is a simpler-to-build
option that is easier for us, but I am not sure if that is acceptable
by those who volunteer to test the upcoming big version.
One thing to note is that depending on the nature of a change, once
you start using a feature only available in a newer version of Git
in your repository, the resulting repository may not be understood
by an older version of Git (imagine you started using index v4---now
you are locked out of your repository if you want to go back to a
version of Git before 1.7.11). So in that sense, it might be a
disservice to promise that an early adopter can experience the
future with feature.git3=on and then can safely go back to the
current world by flipping it off, and we might be better off to
control this with a single big red build-time switch.
Opinions?
[Footnote]
* Alternatively we could tweak system_path() to hack the value we
return when asked about GIT_INFO_PATH, GIT_MAN_PATH, and
GIT_HTML_PATH, but I somehow feel dirty just for mentioning such
an implementation possibility X-<.
next prev parent reply other threads:[~2024-09-20 21:33 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-19 19:33 [PATCH] BreakingChanges: early adopter option Junio C Hamano
2024-09-20 21:33 ` Junio C Hamano [this message]
2024-09-22 17:51 ` Junio C Hamano
2024-09-26 11:57 ` Patrick Steinhardt
2024-09-26 14:16 ` Phillip Wood
2024-09-26 16:25 ` Junio C Hamano
2024-09-26 16:26 ` Junio C Hamano
2024-09-26 15:57 ` Junio C Hamano
2024-10-11 21:49 ` [PATCH v2] " Junio C Hamano
2024-10-16 7:22 ` Patrick Steinhardt
2024-10-16 22:07 ` Taylor Blau
2025-02-28 17:28 ` Re* " Junio C Hamano
2025-03-03 10:30 ` Patrick Steinhardt
2025-03-03 16:32 ` Junio C Hamano
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=xmqqploydn7j.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=jrnieder@gmail.com \
--cc=nasamuffin@google.com \
--cc=ps@pks.im \
--cc=stolee@gmail.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 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).