git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: "René Scharfe" <rene.scharfe@lsrfire.ath.cx>
To: Jeff King <peff@peff.net>
Cc: Johannes Sixt <j6t@kdbg.org>,
	Erik Faye-Lund <kusmabite@gmail.com>,
	Junio C Hamano <gitster@pobox.com>,
	git@vger.kernel.org
Subject: Re: [PATCH v2 4/4] upload-archive: use start_command instead of fork
Date: Tue, 09 Aug 2011 12:25:42 +0200	[thread overview]
Message-ID: <4E410B26.1080407@lsrfire.ath.cx> (raw)
In-Reply-To: <20110809050211.GA3588@sigill.intra.peff.net>

Am 09.08.2011 07:02, schrieb Jeff King:
> On Mon, Aug 08, 2011 at 07:10:01PM +0200, René Scharfe wrote:
> 
>>> -	tar_filter_config("tar.tgz.command", "gzip -cn", NULL);
>>> +	tar_filter_config("tar.tgz.command", "gzip -cn | cat", NULL);
>>>  	tar_filter_config("tar.tgz.remote", "true", NULL);
>>> -	tar_filter_config("tar.tar.gz.command", "gzip -cn", NULL);
>>> +	tar_filter_config("tar.tar.gz.command", "gzip -cn | cat", NULL);
>>>  	tar_filter_config("tar.tar.gz.remote", "true", NULL);
>>>  	git_config(git_tar_config, NULL);
>>>  	for (i = 0; i < nr_tar_filters; i++) {
>>>
>>> (provided that 'cat' magically does not suffer from the same problem,
>>> and I do think that it does not.)
>>
>> The external cat can indeed be used.  We'd need to do that for user
>> supplied commands as well, though, like this (ugh):
>>
>> diff --git a/archive-tar.c b/archive-tar.c
>> index 20af005..eaa9a1c 100644
>> --- a/archive-tar.c
>> +++ b/archive-tar.c
>> @@ -326,6 +326,9 @@ static int write_tar_filter_archive(const struct archiver *ar,
>>  		die("BUG: tar-filter archiver called with no filter defined");
>>  
>>  	strbuf_addstr(&cmd, ar->data);
>> +#ifdef WIN32
>> +	strbuf_addstr(&cmd, " | cat");
>> +#endif
>>  	if (args->compression_level >= 0)
>>  		strbuf_addf(&cmd, " -%d", args->compression_level);
> 
> Do we need to? It seems to me that defaulting to "gzip -cn | cat" is not
> "we are on Windows, a platform that needs a special workaround in git",
> but rather "this gzip is horribly broken, but at build-time you can
> set a gzip that works".

It's an MSYS platform problem IMHO, and we can work around it.  That
extra cat is nothing to be proud of, sure.  And msysgit avoiding the
issue by distibuting a gzip that never converts line endings would solve
it without any runtime overhead.

> So if the user wants to specify some broken filter, it is up to them to
> add "| cat" if their filter merits it.

Well, I'd rather take this responsibility from the user, who might
struggle a while before finding out what is going on.  However...

> But that is somewhat a matter of perception, and it won't make a user on
> Windows who does "git config archive.bz2 bzip2 -c" any happier when they
> are told it is their responsibility to deal with it.

If all packers shipped with msysgit are usable then we're probably good.

> BTW, as nice as this "gzip -cn | cat" idea is, I think it needs to be
> wrapped in a shell script. With the code above, we will generate "gzip
> -cn | cat -9".

Yes, the three added lines in the patch above would have to be moved
down two lines, after the compression level is added.  D'oh!

> So we really need:
> 
>   $ cat `which gzip`
>   #!/bin/sh
>   gzip.real -cn "$@" | cat
>
> and then no hacks need to go into git at all. The fix is about providing
> a sane gzip, not fixing git.

OK, that's one way to do it; another would be let gzip (and bzip2 etc.)
do whatever cat does to avoid end of line conversions.  And yet another
is to take them from http://unxutils.sourceforge.net/.

> BTW, from what Johannes said, the issue is about a non-msys program
> calling an msys one. Does that mean that having git run:
> 
>   sh -c 'gzip -cn'
> 
> would work? If so, then could the solution be as simple as turning off
> the "don't bother with the shell" optimization that run-command uses?
> Something like "gzip -cn" gets split by git and run via spawn now
> (because it has no metacharacters). But we could easily make it always
> run through the shell.

Just checked -- it doesn't work.  I assume that's because the shell is
also an MSYS program.

René

  reply	other threads:[~2011-08-09 10:26 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-18 18:08 [PATCH v2 0/4] port upload-archive to Windows Erik Faye-Lund
2011-07-18 18:08 ` [PATCH v2 1/4] compat/win32/sys/poll.c: upgrade from upstream Erik Faye-Lund
2011-07-18 18:08 ` [PATCH v2 2/4] mingw: fix compilation of poll-emulation Erik Faye-Lund
2011-07-18 18:08 ` [PATCH v2 3/4] enter_repo: do not modify input Erik Faye-Lund
2011-07-18 18:08 ` [PATCH v2 4/4] upload-archive: use start_command instead of fork Erik Faye-Lund
2011-07-19 21:09   ` Junio C Hamano
2011-07-28  8:32     ` Erik Faye-Lund
2011-07-28 16:08       ` Jeff King
2011-07-28 16:47         ` Jeff King
2011-07-28 17:02           ` Jeff King
2011-08-01 14:45             ` Erik Faye-Lund
2011-08-01 17:46               ` Jeff King
2011-08-01 18:02                 ` Erik Faye-Lund
2011-08-01 18:25                   ` Jeff King
2011-08-01 20:48                     ` René Scharfe
2011-08-01 21:20                       ` Johannes Sixt
2011-08-01 21:42                         ` René Scharfe
2011-08-01 21:52                         ` René Scharfe
2011-08-02  4:00                           ` Jeff King
2011-08-02 16:46                             ` René Scharfe
2011-08-02 18:13                               ` Jeff King
2011-08-02 23:37                                 ` Johannes Sixt
2011-08-03  5:49                                   ` Jeff King
2011-08-06  9:40                                   ` René Scharfe
2011-08-07 20:02                                     ` Johannes Sixt
2011-08-07 21:06                                       ` Jeff King
2011-08-08 17:10                                       ` René Scharfe
2011-08-09  5:02                                         ` Jeff King
2011-08-09 10:25                                           ` René Scharfe [this message]
2011-08-09 20:05                                             ` Jeff King
2011-09-29 19:54                                               ` Erik Faye-Lund
2011-09-29 20:18                                                 ` René Scharfe
2011-09-29 20:20                                                   ` Erik Faye-Lund

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=4E410B26.1080407@lsrfire.ath.cx \
    --to=rene.scharfe@lsrfire.ath.cx \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=j6t@kdbg.org \
    --cc=kusmabite@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).