git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Johannes Schindelin <johannes.schindelin@gmx.de>
Cc: git@vger.kernel.org, "Torsten Bögershausen" <tboegi@web.de>,
	"Jeff King" <peff@peff.net>
Subject: Re: [PATCH v2 2/4] cat-file: introduce the --filters option
Date: Wed, 24 Aug 2016 10:46:03 -0700	[thread overview]
Message-ID: <xmqqmvk2qcv8.fsf@gitster.mtv.corp.google.com> (raw)
In-Reply-To: <320f5e862e8df12bbd1d918f0b347aeacbd25d17.1472041389.git.johannes.schindelin@gmx.de> (Johannes Schindelin's message of "Wed, 24 Aug 2016 14:23:39 +0200 (CEST)")

Johannes Schindelin <johannes.schindelin@gmx.de> writes:

> +static int filter_object(const char *path, unsigned mode,
> +			 const unsigned char *sha1,
> +			 char **buf, unsigned long *size)
> +{
> +	enum object_type type;
> +
> +	*buf = read_sha1_file(sha1, &type, size);
> +	if (!*buf)
> +		return error(_("cannot read object %s '%s'"),
> +			sha1_to_hex(sha1), path);
> +	if (type != OBJ_BLOB) {
> +		free(*buf);
> +		return error(_("blob expected for %s '%s'"),
> +			sha1_to_hex(sha1), path);
> +	}
> +	if (S_ISREG(mode)) {
> +		struct strbuf strbuf = STRBUF_INIT;
> +		if (convert_to_working_tree(path, *buf, *size, &strbuf)) {
> +			free(*buf);
> +			*size = strbuf.len;
> +			*buf = strbuf_detach(&strbuf, NULL);
> +		}
> +	}

When we see a blob that is not ISREG, what is expected to happen?
Is it an error?

We can argue both ways.

Currently the ONLY kind of blob that is not ISREG is a symbolic
link, and it might be OK to output it as-is without any conversion
[*1*], in which case we can simply lose the S_ISREG(mode) check
altogether (and "mode" parameter to this function).

On the other hand, because "cat-file --filters" is meant to be a
smaller-granularity operation that could be used as a building block
to emulate what "git checkout" does, i.e. "imagine that we had the
blob in the index and checking it out from the path, and hand the
caller what would have been written out to the filesystem, so that
the convert_to_working_tree() logic does not have to be emulated in
the userspace", erroring out when we see a symbolic link may be also
a valid way to handle it.  We know the usual CRLF and other conversions
do not apply to them.

In any case, silently succeeding without any output is probably what
the end-user least expects.

If we choose to fail the request, the necessary update to the test
would look like this, I think.

> diff --git a/t/t8010-cat-file-filters.sh b/t/t8010-cat-file-filters.sh
> new file mode 100755
> index 0000000..e466634
> --- /dev/null
> +++ b/t/t8010-cat-file-filters.sh
> @@ -0,0 +1,34 @@
> +#!/bin/sh
> +
> +test_description='git cat-file filters support'
> +. ./test-lib.sh
> +
> +test_expect_success 'setup ' '
> +	echo "*.txt eol=crlf diff=txt" >.gitattributes &&
> +	echo "hello" | append_cr >world.txt &&
> +	git add .gitattributes world.txt &&

	git update-index --cacheinfo :world.txt,$EMPTY_BLOB,symlink &&

> +	test_tick &&
> +	git commit -m "Initial commit"
> +'
> +
> +has_cr () {
> +	tr '\015' Q <"$1" | grep Q >/dev/null
> +}
> +
> +test_expect_success 'no filters with `git show`' '
> +	git show HEAD:world.txt >actual &&
> +	! has_cr actual
> +
> +'
> +
> +test_expect_success 'no filters with cat-file' '
> +	git cat-file blob HEAD:world.txt >actual &&
> +	! has_cr actual
> +'
> +
> +test_expect_success 'cat-file --filters converts to worktree version' '
> +	git cat-file --filters HEAD:world.txt >actual &&
> +	has_cr actual
> +'

test_expect_success 'cat-file --filters rejects a non-blob' '
	test_must_fail git cat-file --filters HEAD:
'

test_expect_success 'cat-file --filters rejects a non-regular blob' '
	test_must_fail git cat-file --filters HEAD:symlink
'

And if we choose to accept as long as it is a blob, then the last
step can lose test_must_fail (and perhaps the result needs to be
checked against "hello" without CR).


[Footnote]

*1* But of course other kinds of non-ISREG blob we would add later
    may not be something you would want to write out as-is.


  reply	other threads:[~2016-08-24 17:50 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-18 12:46 [PATCH 0/4] cat-file: optionally convert to worktree version Johannes Schindelin
2016-08-18 12:46 ` [PATCH 1/4] cat-file: fix a grammo in the man page Johannes Schindelin
2016-08-18 16:21   ` Junio C Hamano
2016-08-18 12:46 ` [PATCH 2/4] cat-file: introduce the --filters option Johannes Schindelin
2016-08-18 15:49   ` Torsten Bögershausen
2016-08-19 12:37     ` Johannes Schindelin
2016-08-19 16:06       ` Junio C Hamano
2016-08-18 16:37   ` Junio C Hamano
2016-08-19 12:49     ` Johannes Schindelin
2016-08-19  8:57   ` Torsten Bögershausen
2016-08-19 15:00     ` Johannes Schindelin
2016-08-19 16:06       ` Junio C Hamano
2016-08-22 16:51       ` Torsten Bögershausen
2016-08-24  8:00         ` Johannes Schindelin
2016-08-18 12:46 ` [PATCH 3/4] cat-file --textconv/--filters: allow specifying the path separately Johannes Schindelin
2016-08-18 16:52   ` Junio C Hamano
2016-08-19 14:49     ` Johannes Schindelin
2016-08-19 16:11       ` Junio C Hamano
2016-08-24  7:57         ` Johannes Schindelin
2016-08-18 12:46 ` [PATCH 4/4] cat-file: support --textconv/--filters in batch mode Johannes Schindelin
2016-08-18 15:42   ` Torsten Bögershausen
2016-08-19 12:25     ` Johannes Schindelin
2016-08-19 15:06       ` Jeff King
2016-08-19 16:19         ` Junio C Hamano
2016-08-18 17:08   ` Junio C Hamano
2016-08-19 12:59     ` Johannes Schindelin
2016-08-19 14:44       ` Jeff King
2016-08-18 22:05   ` Jeff King
2016-08-18 22:47     ` Junio C Hamano
2016-08-19 13:11       ` Johannes Schindelin
2016-08-19 13:09     ` Johannes Schindelin
2016-08-19 13:22       ` Jeff King
2016-08-24 12:23 ` [PATCH v2 0/4] cat-file: optionally convert to worktree version Johannes Schindelin
2016-08-24 12:23   ` [PATCH v2 1/4] cat-file: fix a grammo in the man page Johannes Schindelin
2016-08-24 12:23   ` [PATCH v2 2/4] cat-file: introduce the --filters option Johannes Schindelin
2016-08-24 17:46     ` Junio C Hamano [this message]
2016-08-24 17:52       ` Junio C Hamano
2016-08-31 20:31       ` Johannes Schindelin
2016-08-31 20:53         ` Junio C Hamano
2016-08-24 12:23   ` [PATCH v2 3/4] cat-file --textconv/--filters: allow specifying the path separately Johannes Schindelin
2016-08-24 17:49     ` Junio C Hamano
2016-08-24 18:25       ` Junio C Hamano
2016-08-31 19:49         ` Johannes Schindelin
2016-08-31 20:17           ` Junio C Hamano
2016-08-24 12:23   ` [PATCH v2 4/4] cat-file: support --textconv/--filters in batch mode Johannes Schindelin
2016-08-24 16:09   ` [PATCH v2 0/4] cat-file: optionally convert to worktree version Junio C Hamano
2016-08-24 16:19     ` Jeff King
2016-08-24 17:02       ` Junio C Hamano
2016-08-24 17:32         ` Jeff King
2016-08-24 17:55           ` Junio C Hamano
2016-08-29 21:02   ` Junio C Hamano
2016-08-31 20:34     ` Johannes Schindelin
2016-09-09 10:10   ` [PATCH v3 " Johannes Schindelin
2016-09-09 10:10     ` [PATCH v3 1/4] cat-file: fix a grammo in the man page Johannes Schindelin
2016-09-09 10:10     ` [PATCH v3 2/4] cat-file: introduce the --filters option Johannes Schindelin
2016-09-09 15:09       ` Junio C Hamano
2016-09-09 16:01         ` Johannes Schindelin
2016-09-09 16:08           ` Junio C Hamano
2016-09-09 17:16             ` Junio C Hamano
2016-09-09 17:26               ` Junio C Hamano
2016-09-10  7:57                 ` Johannes Schindelin
2016-09-11 21:44                   ` Junio C Hamano
2016-09-09 10:10     ` [PATCH v3 3/4] cat-file --textconv/--filters: allow specifying the path separately Johannes Schindelin
2016-09-09 18:06       ` Junio C Hamano
2016-09-10  7:59         ` Johannes Schindelin
2016-09-09 10:10     ` [PATCH v3 4/4] cat-file: support --textconv/--filters in batch mode Johannes Schindelin

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=xmqqmvk2qcv8.fsf@gitster.mtv.corp.google.com \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    --cc=johannes.schindelin@gmx.de \
    --cc=peff@peff.net \
    --cc=tboegi@web.de \
    /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).