mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Abhishek Kumar <>
Cc: Abhishek Kumar <>,,
	Johannes Schindelin <>
Subject: Re: [GSoC][RFC] Convert mergetool to builtin
Date: Wed, 18 Mar 2020 22:00:00 +0530	[thread overview]
Message-ID: <> (raw)

Hello Christian

Sorry for the late reply - the work on the interval based graph labels has
been pretty chaotic. I am going to roll out the second version of this
proposal soon.

In the meantime,

> Hi,
> [...]
>> ### Conversion of mergetool--lib
>> As mentioned earlier, conversion of the mergetool-related scripts has to be
>> spread over 2-3 SoC or similar projects due to the size of scripts involved.
>> Conversion of mergetool would set up most of the plumbing required for
>> mergetool--lib and makes the subsequent conversion possible.
> I wonder if it would be better to convert first
> and then and that are using
> it.

I had been agonizing over this decision while I was initially writing
the proposal.

My justifications for over at the time were:

1. makes many more calls to git subcommands than mergetool--lib.
Therefore, its performance improves from both moving from bash to C and use of
git internals.
2. I had *incorrectly* counted overall lines to be over 1,700 with
1,200 lines for mergetool--lib + difftool--helper + mergetools/ whereas it
actually stands at rather manageable 1,000 lines with mergetools/ being fairly

There are solid reasons to consider the conversion of mergetool--lib too:
1. The code path of difftool-helper would be entirely in C, improving its
performance on Windows particularly well.
2. It has two well-defined entry points, which makes conversion straightforward
and with less code churn.
3. It could be done with the more frequently-adopted approach of script
calling the builtin.

As it stands now, I am open to converting either scripts.

I have CC'ed Johannes as well. I am sure he would like to weigh in
this discussion.

> [...]
>> `get_merge_tool` decides the external tool. This function is used by
>> both mergetool--lib and difftool--helper.
> Isn't this function defined in and used by

Yes, thanks for correcting it.

> [...]
>> ## Plan
>> Similar to the conversion of difftool, I plan to create a builtin that shells
>> out to a helper script. Once mergetool--lib is converted, we can retire the
>> helper script and conversion would be complete.
> So you plan to create a builtin that would shell out to
> Could you be clearer about what the conversion of difftool did and how
> you plan to imitate that?

Conversion of difftool had three patches:

1. difftool: add a skeleton for the upcoming builtin
- Rename git-difftool.perl to git-legacy-difftool.perl
- Create builtin/difftool.c which executes git-legacy-difftool.perl
- Add difftool to builtin.h
- Add "difftool.usebuiltin" configuration option
- Modify build process

2. difftool: implement the functionality in the builtin

3. difftool: retire the legacy script
- Remove git-legacy-difftool.perl from the build process
- Remove outdated "NEEDWORK" comments
- Remove perl dependency from test file

Since most of the conversion was done in a single commit, it is hard to talk
about the exact order of changes. Johannes, could you please guide us through
the process?

Similar to this, my changes can be grouped as:

1. Create a skeleton builtin.
2. Implement scaffolding, implement shared functions, teach builtin to resolve
symlink, submodule and deleted file conflicts, and others. They form the core
functionality of mergetool.
3. Teach builtin to shell out for file conflict (at which we retire

> [...]
>> 8. Teach builtin to assign merge tool (July 10 - July 15)
>> - Convert `get_configured_merge_tool` from mergetool--lib
>> - Around 50 lines
> Ok, so at this point you start to convert Where
> is the converted code going to be? Does needs
> what you will convert?

Yes. Some functions like get_configured_merge_tool, guess_merge_tool are only
used by mergetool and can be moved to builtin/mergetool.c.

> [...]
>> 9. Teach builtin to shell out for file conflict (July 15 - July 31)
>>  - Write a minimal (similar to
>> - Call the helper script from the builtin
>> - Retire the legacy script.
> Which legacy script? was renamed to back in first step.

> [...]


             reply	other threads:[~2020-03-18 16:31 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-18 16:30 Abhishek Kumar [this message]
2020-03-19  8:42 ` [GSoC][RFC] Convert mergetool to builtin Kaartic Sivaraam
2020-03-22 11:27 ` Christian Couder
  -- strict thread matches above, loose matches on Subject: below --
2020-03-08 17:30 Abhishek Kumar
2020-03-12  1:15 ` Christian Couder

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:

  List information:

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

  git send-email \ \ \ \ \ \

* 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.
Code repositories for project(s) associated with this public inbox

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 read-only IMAP folder(s) and NNTP newsgroup(s).