git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Johannes Schindelin <Johannes.Schindelin@gmx.de>
To: Junio C Hamano <gitster@pobox.com>
Cc: Jeff King <peff@peff.net>, Eric Rannaud <eric.rannaud@gmail.com>,
	git@vger.kernel.org, Jeremy Serror <jeremy.serror@gmail.com>
Subject: Re: git rebase regression: cannot pass a shell expression directly to --exec
Date: Tue, 16 May 2017 12:46:49 +0200 (CEST)	[thread overview]
Message-ID: <alpine.DEB.2.21.1.1705161227060.3610@virtualbox> (raw)
In-Reply-To: <xmqqr2zp31vg.fsf@gitster.mtv.corp.google.com>

Hi Junio,

On Tue, 16 May 2017, Junio C Hamano wrote:

> The point of rewriting things in C and using run_command() interface was
> to avoid shell overhead.

That statement is missing the point.

It is true that converting shell scripts to proper builtins avoids the
shell overhead.

It is even more true that that results in a nice speed-up that can even be
felt on Linux (I feel I have to stress this, as you seem to be mostly
focused on Linux usage, and I do not want you to get the impression that
you are only doing "the Windows folks" a favor when you gracefully accept
the patches to convert scripts to proper builtins).

But the real truth is: shell scripting is not portable.

Shell scripting is never only shell scripting, of course. A quite
undocumented set of utilities is expected to be present for our scripts to
run, too: sed, awk, tr, cat, expr, just to name a few.

It does not end there. For example, sed is not equal to sed. BSD sed has
different semantics than GNU sed, and we jump through hoops to try to
ensure that our shell scripts run with both versions. Which must make many
a contributor feel a lot less positive about their contributions e.g. when
a reviewer points out that their \t in their sed statement would break Git
on MacOSX. Sad!

We place a burden on maintainers targeting platforms that are not Linux.
If I remember correctly, we need to override the default shell on one
Unix, even, because we simply failed to make our shell scripts run with
it.

And then, of course, there are all the problems inflicted on users on that
most prevalent Operating System of them all: Windows. Yes, I know, you
"non-Windows folk" would like to happily ignore that little tiny problem,
but that's really doing Git a disservice. So stop doing it.

What hurts me most about this is that Subversion, a software that us "Git
folk" pride ourselves in making obsolete, never had those problems. It was
designed with an eye toward portability from the start.

It is a good thing to support users who want to automate their workflows
using scripts, of course. Oh, and please, do not forget to remember that
there are tons of scripting languages out there, e.g. AppleScript,
Javascript, Tcl, Python, Ruby; just because you prefer Bash does not mean
the majority of developers do.

So let's continue to broaden our scripting support. And at the same time,
let's also change our mindset so that we can reduce the portability
problems of Git.

Ciao,
Dscho

  parent reply	other threads:[~2017-05-16 10:47 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-15 18:08 git rebase regression: cannot pass a shell expression directly to --exec Eric Rannaud
2017-05-16  3:25 ` Jeff King
2017-05-16  3:37   ` Jeff King
2017-05-16 16:41     ` Jonathan Nieder
2017-05-16 16:47       ` Jeff King
2017-05-16 17:11         ` Eric Rannaud
2017-05-16 17:15         ` Brandon Williams
2017-05-16 17:23           ` Jeff King
2017-05-16 17:30             ` Brandon Williams
2017-05-16 19:14             ` Linus Torvalds
2017-05-16 19:35               ` [TANGENT] run-command: use vfork instead of fork Eric Wong
2017-05-16 20:47                 ` Linus Torvalds
2017-05-16 21:11                   ` Brandon Williams
2017-05-16 20:12               ` git rebase regression: cannot pass a shell expression directly to --exec Johannes Schindelin
2017-05-16 20:27                 ` Linus Torvalds
2017-05-16 17:37         ` Jonathan Nieder
2017-05-16  3:40   ` Junio C Hamano
2017-05-16  3:53     ` Jeff King
2017-05-16  4:08       ` Jeff King
2017-05-16 16:45       ` Eric Rannaud
2017-05-16 10:46     ` Johannes Schindelin [this message]
2017-05-16 10:23 ` Johannes Schindelin
2017-05-16 16:18   ` Jeff King
2017-05-16 16:59     ` Eric Rannaud
2017-05-16 17:14       ` Kevin Daudt
2017-05-16 17:29         ` Eric Rannaud
2017-05-16 17:41           ` Jeff King
2017-05-16 17:21       ` Eric Rannaud
2017-05-16 17:37         ` Jeff King

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

  List information: http://vger.kernel.org/majordomo-info.html

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

  git send-email \
    --in-reply-to=alpine.DEB.2.21.1.1705161227060.3610@virtualbox \
    --to=johannes.schindelin@gmx.de \
    --cc=eric.rannaud@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jeremy.serror@gmail.com \
    --cc=peff@peff.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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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).