# [PATCH] archive: Refuse to write the archive to a terminal.

7 messages from 2009-09-16 to 2009-09-17. Participants: Josh Triplett, Johannes Sixt, Mikael Magnusson, Reece Dunn, Matthieu Moy.
Thread: https://gitlist.dev/t/20967

## Josh Triplett, 2009-09-16 10:31

Subject: [PATCH] archive: Refuse to write the archive to a terminal.
Message-ID: <20090916103129.GA21430@feather>
URL: https://gitlist.dev/e/20090916103129.GA21430%40feather

```
If not given the -o/--output option, git archive writes the archive to
stdout.  This proves unhelpful if not redirected or piped somewhere.
Rather than spewing binary at the user's terminal, die with an
appropriate message.

Signed-off-by: Josh Triplett <josh@joshtriplett.org>
---

I considered adding a -f/--force option, like gzip has, but writing an
archive to a tty seems like a sufficiently insane use case that I'll let
whoever actually needs that write the patch for it. ;)

 builtin-archive.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/builtin-archive.c b/builtin-archive.c
index 12351e9..73accd0 100644
--- a/builtin-archive.c
+++ b/builtin-archive.c
@@ -101,6 +101,9 @@ int cmd_archive(int argc, const char **argv, const char *prefix)
 		create_output_file(output);
 		if (!format)
 			format = format_from_name(output);
+	} else if (isatty(1)) {
+		die("Archive not written to a terminal.\n"
+		    "Specify output filename or redirect output.");
 	}
 
 	if (format) {
-- 
1.6.3.3

```

## Johannes Sixt, 2009-09-16 11:11

Subject: Re: [PATCH] archive: Refuse to write the archive to a terminal.
Message-ID: <4AB0C7DE.7030109@viscovery.net>
URL: https://gitlist.dev/e/4AB0C7DE.7030109%40viscovery.net
In-Reply-To: <20090916103129.GA21430@feather>

```
Josh Triplett schrieb:
> I considered adding a -f/--force option, like gzip has, but writing an
> archive to a tty seems like a sufficiently insane use case that I'll let
> whoever actually needs that write the patch for it. ;)

How about '--output -' instead?

-- Hannes

```

## Mikael Magnusson, 2009-09-16 11:27

Subject: Re: [PATCH] archive: Refuse to write the archive to a terminal.
Message-ID: <237967ef0909160427m4d7de120tf5ef3176f75123ad@mail.gmail.com>
URL: https://gitlist.dev/e/237967ef0909160427m4d7de120tf5ef3176f75123ad%40mail.gmail.com
In-Reply-To: <4AB0C7DE.7030109@viscovery.net>

```
2009/9/16 Johannes Sixt <j.sixt@viscovery.net>:
> Josh Triplett schrieb:
>> I considered adding a -f/--force option, like gzip has, but writing an
>> archive to a tty seems like a sufficiently insane use case that I'll let
>> whoever actually needs that write the patch for it. ;)
>
> How about '--output -' instead?

You could always just add '|cat'.

-- 
Mikael Magnusson

```

## Reece Dunn, 2009-09-16 11:48

Subject: Re: [PATCH] archive: Refuse to write the archive to a terminal.
Message-ID: <3f4fd2640909160448x1fbb7a64s1ce0adca2af5010@mail.gmail.com>
URL: https://gitlist.dev/e/3f4fd2640909160448x1fbb7a64s1ce0adca2af5010%40mail.gmail.com
In-Reply-To: <237967ef0909160427m4d7de120tf5ef3176f75123ad@mail.gmail.com>

```
2009/9/16 Mikael Magnusson <mikachu@gmail.com>:
> 2009/9/16 Johannes Sixt <j.sixt@viscovery.net>:
>> Josh Triplett schrieb:
>>> I considered adding a -f/--force option, like gzip has, but writing an
>>> archive to a tty seems like a sufficiently insane use case that I'll let
>>> whoever actually needs that write the patch for it. ;)
>>
>> How about '--output -' instead?
>
> You could always just add '|cat'.

Except when running on Windows. Yes MSYS and cygwin provide a version
of cat, but this cannot be guaranteed (e.g. with the series to support
building with MSVC).

The `--output -` / `-o -` syntax looks reasonable (the issue with
using -f/--force is: what are you forcing the operation of?). Is -
used elsewhere in git for specifying stdout?

Also, the die message might be more useful (and in keeping with the
other git commands) by showing the 'inline context help'; something
like:

    Failed to generate the archive: output is a terminal.
    Please specify the file to write to (using `-o archive.tar`) or
redirect the output (e.g. `... | gzip`).
    If you want to write the archive out to the terminal, use `-o -`
to force the operation.

- Reece

```

## Matthieu Moy, 2009-09-16 12:57

Subject: Re: [PATCH] archive: Refuse to write the archive to a terminal.
Message-ID: <vpq8wgfm4ho.fsf@bauges.imag.fr>
URL: https://gitlist.dev/e/vpq8wgfm4ho.fsf%40bauges.imag.fr
In-Reply-To: <3f4fd2640909160448x1fbb7a64s1ce0adca2af5010@mail.gmail.com>

```
Reece Dunn <msclrhd@googlemail.com> writes:

> 2009/9/16 Mikael Magnusson <mikachu@gmail.com>:
>> 2009/9/16 Johannes Sixt <j.sixt@viscovery.net>:
>>> Josh Triplett schrieb:
>>>> I considered adding a -f/--force option, like gzip has, but writing an
>>>> archive to a tty seems like a sufficiently insane use case that I'll let
>>>> whoever actually needs that write the patch for it. ;)
>>>
>>> How about '--output -' instead?
>>
>> You could always just add '|cat'.
>
> Except when running on Windows. Yes MSYS and cygwin provide a version
> of cat, but this cannot be guaranteed (e.g. with the series to support
> building with MSVC).

In general, autodectection features sometimes fail, so it's good to
have an explicit override option.

> The `--output -` / `-o -` syntax looks reasonable

I like this too.

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/

```

## Josh Triplett, 2009-09-17 01:49

Subject: Re: [PATCH] archive: Refuse to write the archive to a terminal.
Message-ID: <20090917014854.GD3274@feather>
URL: https://gitlist.dev/e/20090917014854.GD3274%40feather
In-Reply-To: <4AB0C7DE.7030109@viscovery.net>

```
On Wed, Sep 16, 2009 at 01:11:26PM +0200, Johannes Sixt wrote:
> Josh Triplett schrieb:
> > I considered adding a -f/--force option, like gzip has, but writing an
> > archive to a tty seems like a sufficiently insane use case that I'll let
> > whoever actually needs that write the patch for it. ;)
> 
> How about '--output -' instead?

Yeah, that seems significantly better than --force.  Though I don't
particularly care for the '-' convention to mean 'stdout'; in principle
that ought to create a file named '-' in the current directory.
/dev/stdout makes more sense, and doesn't require any work on git's
part beyond this patch.

- Josh Triplett

```

## Johannes Sixt, 2009-09-17 05:53

Subject: Re: [PATCH] archive: Refuse to write the archive to a terminal.
Message-ID: <4AB1CEDF.7020105@viscovery.net>
URL: https://gitlist.dev/e/4AB1CEDF.7020105%40viscovery.net
In-Reply-To: <20090917014854.GD3274@feather>

```
Josh Triplett schrieb:
> On Wed, Sep 16, 2009 at 01:11:26PM +0200, Johannes Sixt wrote:
>> How about '--output -' instead?
> 
> Yeah, that seems significantly better than --force.  Though I don't
> particularly care for the '-' convention to mean 'stdout'; in principle
> that ought to create a file named '-' in the current directory.
> /dev/stdout makes more sense, and doesn't require any work on git's
> part beyond this patch.

Except that /dev/stdout is not portable. You can always say --output ./-
if you want an oddly named file in the current directory.

-- Hannes

```
