mbox series

[0/2] Use the built-in implementation of the interactive add command by default

Message ID pull.1087.git.1638281655.gitgitgadget@gmail.com (mailing list archive)
Headers show
Series Use the built-in implementation of the interactive add command by default | expand

Message

Johannes Schindelin via GitGitGadget Nov. 30, 2021, 2:14 p.m. UTC
Over two years ago, Slavica Đukić participated in the Outreachy project,
starting to implement a built-in version of the interactive git add command.
A little over a year ago, Git turned on that mode whenever users were
running with feature.experimental = true.

It is time to declare this implementation robust, to use it by default, and
to start deprecating the scripted implementation.

Johannes Schindelin (2):
  t2016: require the PERL prereq only when necessary
  add -i: default to the built-in implementation

 Documentation/config/add.txt |  6 +++---
 builtin/add.c                | 15 +++++--------
 ci/run-build-and-tests.sh    |  2 +-
 t/README                     |  2 +-
 t/t2016-checkout-patch.sh    | 42 +++++++++++++++++++-----------------
 5 files changed, 32 insertions(+), 35 deletions(-)


base-commit: abe6bb3905392d5eb6b01fa6e54d7e784e0522aa
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1087%2Fdscho%2Fdefault-to-builtin-add-p-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1087/dscho/default-to-builtin-add-p-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/1087

Comments

Jeff King Nov. 30, 2021, 8:56 p.m. UTC | #1
On Tue, Nov 30, 2021 at 02:14:13PM +0000, Johannes Schindelin via GitGitGadget wrote:

> Over two years ago, Slavica Đukić participated in the Outreachy project,
> starting to implement a built-in version of the interactive git add command.
> A little over a year ago, Git turned on that mode whenever users were
> running with feature.experimental = true.
> 
> It is time to declare this implementation robust, to use it by default, and
> to start deprecating the scripted implementation.

Yay. I agree it is time.

It's still possible there are bugs that feature.experimental folks
missed, but at some point we need to flip this switch to get the
exposure to find those bugs. Doing it early in a cycle makes sense.

The patches themselves look good to me. I look forward to dropping the
perl version entirely, just to reduce the duplicated code, but I think
your approach of leaving it as an escape hatch for now makes sense in
the shorter term.

-Peff
Junio C Hamano Nov. 30, 2021, 9:15 p.m. UTC | #2
"Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail.com>
writes:

> Over two years ago, Slavica Đukić participated in the Outreachy project,
> starting to implement a built-in version of the interactive git add command.
> A little over a year ago, Git turned on that mode whenever users were
> running with feature.experimental = true.
>
> It is time to declare this implementation robust, to use it by default, and
> to start deprecating the scripted implementation.

Yes, it is time to use it by default to expose any remaining bugs
that those with feature.experimental set failed to catch.
Unfortunately, we do not catch issues real users would encounter in
any "opt-in" feature, until it becomes "opt-out" and unconfigured
users are exposed to it.  This is true even in the presense of large
corporations that expose their internal users to versions based on
'next' regularly.
Ævar Arnfjörð Bjarmason Dec. 1, 2021, 1:43 p.m. UTC | #3
On Tue, Nov 30 2021, Johannes Schindelin via GitGitGadget wrote:

> Over two years ago, Slavica Đukić participated in the Outreachy project,
> starting to implement a built-in version of the interactive git add command.
> A little over a year ago, Git turned on that mode whenever users were
> running with feature.experimental = true.
>
> It is time to declare this implementation robust, to use it by default, and
> to start deprecating the scripted implementation.
>
> Johannes Schindelin (2):
>   t2016: require the PERL prereq only when necessary
>   add -i: default to the built-in implementation

I'm very happy to see this. I left some minor nits on 2/2[1], but
with/without those suggested changes this LGTM.

I was a tad surprised that feature.experimental=false doesn't disable
this anymore, but after looking into it a bit that's how we should be
doing this. I.e. the life cycle for these has been

    opt in setting [&& experimental] -> opt-out setting [&& !experimental] -> remove opt-out

If you're intending to re-roll anyway I think a brief mention of that
being intended & correct would be nice.

I.e. I went looking down that rabbit hole since there was no mention of
it in the commit message, and wondered if it was intentional & correct,
which I then found it is (well, correct, but I'm assuming also
intentional).

Thanks!

1. https://lore.kernel.org/git/211201.86pmqgbful.gmgdl@evledraar.gmail.com/
Carlo Marcelo Arenas Belón Dec. 1, 2021, 9:24 p.m. UTC | #4
On Wed, Dec 1, 2021 at 12:40 AM Johannes Schindelin via GitGitGadget
<gitgitgadget@gmail.com> wrote:
> It is time to declare this implementation robust, to use it by default, and
> to start deprecating the scripted implementation.
>
> Johannes Schindelin (2):
>   t2016: require the PERL prereq only when necessary
>   add -i: default to the built-in implementation

Sadly this implementation has a few bugs that still need fixing, with
at least one IMHO being a showstopper.

The way macOS implements stdin (through a device) it will always
timeout in poll(), so escape keys that are left in the unread buffer
and that could match some of the entries will result in the wrong
entry being selected.

I have a series[1] that reimplements this and that seemed to work fine
in my tests while making the code simpler, but that I didn't
prioritize (and wanted to clean up further) since I wanted to
prioritize the EDITOR fixes in the same area.

Carlo

[1] https://github.com/git/git/pull/1150
Johannes Schindelin Dec. 2, 2021, 5:33 p.m. UTC | #5
Hi Carlo,

On Wed, 1 Dec 2021, Carlo Arenas wrote:

> On Wed, Dec 1, 2021 at 12:40 AM Johannes Schindelin via GitGitGadget
> <gitgitgadget@gmail.com> wrote:
> > It is time to declare this implementation robust, to use it by default, and
> > to start deprecating the scripted implementation.
> >
> > Johannes Schindelin (2):
> >   t2016: require the PERL prereq only when necessary
> >   add -i: default to the built-in implementation
>
> Sadly this implementation has a few bugs that still need fixing, with
> at least one IMHO being a showstopper.
>
> The way macOS implements stdin (through a device) it will always
> timeout in poll(), so escape keys that are left in the unread buffer
> and that could match some of the entries will result in the wrong
> entry being selected.
>
> I have a series[1] that reimplements this and that seemed to work fine
> in my tests while making the code simpler, but that I didn't
> prioritize (and wanted to clean up further) since I wanted to
> prioritize the EDITOR fixes in the same area.
>
> Carlo
>
> [1] https://github.com/git/git/pull/1150

Thank you for pointing that out. I agree both with prioritizing your macOS
patches, and with prioritizing the editor patches before that. Please just
let me know when would be a good time to move forward with this here patch
series.

Thank you,
Dscho
Philippe Blain Dec. 3, 2021, 1:58 p.m. UTC | #6
Hi Dscho,

Le 2021-11-30 à 09:14, Johannes Schindelin via GitGitGadget a écrit :
> Over two years ago, Slavica Đukić participated in the Outreachy project,
> starting to implement a built-in version of the interactive git add command.
> A little over a year ago, Git turned on that mode whenever users were
> running with feature.experimental = true.
> 
> It is time to declare this implementation robust, to use it by default, and
> to start deprecating the scripted implementation.
> 
> Johannes Schindelin (2):
>    t2016: require the PERL prereq only when necessary
>    add -i: default to the built-in implementation
> 
>   Documentation/config/add.txt |  6 +++---
>   builtin/add.c                | 15 +++++--------
>   ci/run-build-and-tests.sh    |  2 +-
>   t/README                     |  2 +-
>   t/t2016-checkout-patch.sh    | 42 +++++++++++++++++++-----------------
>   5 files changed, 32 insertions(+), 35 deletions(-)

I just noticed that 'INSTALL' mentions that Perl is needed for 'git add interactive'
et al, so maybe we would want to tweak the wording a bit in there when switch the default
to the C version ?

Cheers,
Philippe.
Johannes Schindelin Dec. 6, 2021, 3:59 p.m. UTC | #7
Hi Philippe,

On Fri, 3 Dec 2021, Philippe Blain wrote:

> Le 2021-11-30 à 09:14, Johannes Schindelin via GitGitGadget a écrit :
> > Over two years ago, Slavica Đukić participated in the Outreachy project,
> > starting to implement a built-in version of the interactive git add command.
> > A little over a year ago, Git turned on that mode whenever users were
> > running with feature.experimental = true.
> >
> > It is time to declare this implementation robust, to use it by default, and
> > to start deprecating the scripted implementation.
> >
> > Johannes Schindelin (2):
> >    t2016: require the PERL prereq only when necessary
> >    add -i: default to the built-in implementation
> >
> >   Documentation/config/add.txt |  6 +++---
> >   builtin/add.c                | 15 +++++--------
> >   ci/run-build-and-tests.sh    |  2 +-
> >   t/README                     |  2 +-
> >   t/t2016-checkout-patch.sh    | 42 +++++++++++++++++++-----------------
> >   5 files changed, 32 insertions(+), 35 deletions(-)
>
> I just noticed that 'INSTALL' mentions that Perl is needed for 'git add
> interactive'
> et al, so maybe we would want to tweak the wording a bit in there when switch
> the default
> to the C version ?

Not yet. Only once we remove `git-add--interactive.perl`.

Thanks,
Dscho