Re: [PATCH 2/2] checkout-index: omit entries with no tempname from --temp output
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Feb 9, 2021, 21:35 UTC
- Message-ID
- <xmqqmtwczzyv.fsf@gitster.c.googlers.com>
- In-Reply-To
- <1275701345b7e198ec83ad4fdcc2dda6d9775ef3.1612812581.git.matheus.bernardino@usp.br>
Matheus Tavares <matheus.bernardino@usp.br> writes:
Show 16 quoted lines
> With --temp (or --stage=all, which implies --temp), checkout-index > writes a list to stdout associating temporary file names to the entries' > names. But if it fails to write an entry, and the failure happens before > even assigning a temporary filename to that entry, we get an odd output > line. This can be seen when trying to check out a symlink whose blob is > missing: > > $ missing_blob=$(git hash-object --stdin </dev/null) > $ git update-index --add --cacheinfo 120000,$missing_blob,foo > $ git checkout-index --temp foo > error: unable to read sha1 file of foo (e69de29bb2d1d6434b8b29ae775ad8c2e48c5391) > foo > > The 'TAB foo' line is not much useful and it might break scripts that > expect the 'tempname TAB foo' output. So let's omit such entries from > the stdout list (but leaving the error message on stderr).
Makes quite a lot of sense.
Show 44 quoted lines
> if (CHECKOUT_ALL == checkout_stage) {
> - for (i = 1; i < 4; i++) {
> - if (i > 1)
> - putchar(' ');
> - if (topath[i][0])
> - fputs(topath[i], stdout);
> - else
> - putchar('.');
> + for (i = 1; i < 4; i++)
> + if (topath[i][0]) {
> + have_tempname = 1;
> + break;
> + }
> +
> + if (have_tempname) {
> + for (i = 1; i < 4; i++) {
> + if (i > 1)
> + putchar(' ');
> + if (topath[i][0])
> + fputs(topath[i], stdout);
> + else
> + putchar('.');
> + }
> }
> - } else
> + } else if (topath[checkout_stage][0]) {
> + have_tempname = 1;
> fputs(topath[checkout_stage], stdout);
> + }
>
> - putchar('\t');
> - write_name_quoted_relative(name, prefix, stdout,
> - nul_term_line ? '\0' : '\n');
> + if (have_tempname) {
> + putchar('\t');
> + write_name_quoted_relative(name, prefix, stdout,
> + nul_term_line ? '\0' : '\n');
>
> - for (i = 0; i < 4; i++) {
> - topath[i][0] = 0;
> + for (i = 0; i < 4; i++) {
> + topath[i][0] = 0;
> + }
> }Hmph, is topath[][] array used after this function gets called and in what way? Whether have_tempname is true or not, wouldn't we want to clear it?
Thanks.